我正在使用带有以下tsconfig.json
片段的类型脚本v3.6.4
:
"compilerOptions": {
"moduleResolution": "node",
"baseUrl": "./src",
"paths": {
"@config/*": ["config/*"],
"@config": ["config"],
}
}
和package.json:中的模块别名
"_moduleAliases": {
"@config": "dist/config"
}
我有以下文件夹结构:
src
|-config
|-index.ts
|-app
|index.ts
|logic.ts
|-dist
现在在app/index.ts中,如果我这样做:
import 'module-alias/register';
import config from '@config';
我的npm start
命令是:
"start": "node -r ts-node/register ./src/app/index.ts",
tsc
将成功编译,但npm start
将给出错误:
Error: Cannot find module '@config' in src/app/logic.ts
解决这个问题的唯一方法是添加
import 'module-alias/register';
在src/app/logic.ts
中
似乎我必须在我做别名的每个文件中添加import 'module-alias/register'
?这是一种配置方式吗?
@2021
对我来说,我遇到了完全相同的问题:当每个模块的顶行都有import 'module-alias/register';
时,typescript只允许我使用模块别名,而当它有这样的模块别名时。
在花了将近一整天的时间后,我明白了:
tsc
对传输这些装饰器没有帮助。因此,您必须确保js编译代码的每个使用者都有acknoledge,并知道如何使用别名处理这些模块导入
即:
node index.js
=>
node -r module-alias/register index.js
///
mocha .
=>
mocha -r module-alias/register .
解决方案非常简单:
在根文件中,如app/index.ts,将import 'module-alias/register';
放在所有其他导入的末尾,不需要将其放在每个文件中。这对我来说不起作用,因为我把进口放在所有其他进口之前,而不是之后。
例如:
import express from 'express';
import corsFilter from 'cors';
...
import 'module-alias/register'; // This has to be after all other imports