typescript路径别名需要每个文件上的模块别名/寄存器



我正在使用带有以下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

最新更新