首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >typescript路径别名需要在每个文件上使用module- alias /register

typescript路径别名需要在每个文件上使用module- alias /register
EN

Stack Overflow用户
提问于 2019-10-31 05:44:21
回答 2查看 4.9K关注 0票数 4

我正在使用带有以下tsconfig.json片段的typescript v3.6.4

代码语言:javascript
复制
  "compilerOptions": {
    "moduleResolution": "node",
    "baseUrl": "./src",
    "paths": {
      "@config/*": ["config/*"],
      "@config": ["config"],
    }
  }

和package.json中的模块别名:

代码语言:javascript
复制
  "_moduleAliases": {
    "@config": "dist/config"
  }

我有以下文件夹结构:

代码语言:javascript
复制
src
 |-config
     |-index.ts
 |-app
     |index.ts
     |logic.ts
 |-dist

现在在app/index.ts中,如果我这样做:

代码语言:javascript
复制
import 'module-alias/register';
import config from '@config';

我的npm start命令是:

代码语言:javascript
复制
"start": "node -r ts-node/register ./src/app/index.ts",

tsc将成功编译,但npm start将显示错误:

代码语言:javascript
复制
Error: Cannot find module '@config' in src/app/logic.ts

解决这个问题的唯一方法是还添加

代码语言:javascript
复制
import 'module-alias/register';

src/app/logic.ts

似乎我必须在我做别名的每个文件中添加import 'module-alias/register'?这是一种配置它的方法吗?

EN

回答 2

Stack Overflow用户

发布于 2021-06-24 22:08:50

@2021

对我来说,我遇到了完全相同的问题: typescript允许我只在每个模块的顶行都有import 'module-alias/register';时才使用模块别名,而每个模块都有这样的模块别名。

几乎花了一整天的时间,我明白了:

tsc 不会帮助转换这些装饰器。因此,您必须确保js编译代码的每个使用者都已删除,并知道如何使用alias.处理这些模块导入。

即:

代码语言:javascript
复制
node index.js
=>
node -r module-alias/register index.js

///

mocha .
=>
mocha -r module-alias/register .
票数 2
EN

Stack Overflow用户

发布于 2020-11-13 02:34:54

这个问题的解决方案非常简单:

在根文件中,比如app/index.ts,将import 'module-alias/register';放在所有其他导入的末尾,这样就不需要把它放到每个文件中。它对我不起作用,因为我将导入放在所有其他导入之前,而不是放在后面。

例如:

代码语言:javascript
复制
import express from 'express';
import corsFilter from 'cors';
...
import 'module-alias/register'; // This has to be after all other imports
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58634070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档