Javascript ts节点是否支持“@”样式的导入?如果是,如何设置?

Javascript ts节点是否支持“@”样式的导入?如果是,如何设置?,javascript,typescript,ts-node,Javascript,Typescript,Ts Node,我正在使用主express应用程序中的类创建一个命令行脚本 脚本位于以下文件夹中: bin/utils/ ├── sync-buyers.ts └── tsconfig.json 主要的express应用程序是in/app-use-uses-import'@/foo/bar/thing 这是在主应用程序的tsconfig.json中设置的,如下所示: "paths": { "@/*": ["*"], "*": [ "node_module

我正在使用主express应用程序中的类创建一个命令行脚本

脚本位于以下文件夹中:

bin/utils/
├── sync-buyers.ts
└── tsconfig.json
主要的express应用程序是in/app-use-uses-import'@/foo/bar/thing

这是在主应用程序的tsconfig.json中设置的,如下所示:

"paths": {
        "@/*": ["*"],
        "*": [
            "node_modules/*",
            "app/typings/*"
        ]
    }
},
"include": ["app/**/*", "test/**/*"],
"exclude": ["app/**/*.test.ts", "/__tests__/", "/__mocks__/", "/__snapshots__/", "app/**/__mocks__/"],
"files": ["typings/global.d.ts"]
脚本执行

我正在测试是否可以从主应用程序导入,因此我创建了一个sayHello函数

#!/usr/bin/env ts-node
/* tslint:disable */

import { sayHello } from '../../app/services/v2/oapp';
sayHello();
当我运行它时:

TSError: ⨯ Unable to compile TypeScript:
../../app/services/v2/oapp.ts(9,19): error TS2307: Cannot find module 
'@/helpers/fetch'.
../../app/services/v2/oapp.ts(10,31): error TS2307: Cannot find module 
'@/services/v2/buyer'.
../../app/services/v2/oapp.ts(11,51): error TS2307: Cannot find module 
'@/http/HttpHeader'.
总结:

ts节点是否支持“@”类型的导入?如果是,我如何设置它

因此,TypeScript路径配置仅适用于TypeScript的类型解析和检查,这意味着它将允许TypeScript仅出于类型检查的目的理解这些导入,但它生成的代码不会自动将这些导入重写到正确的位置

有两种常见的解决方法:

更新节点解析器以了解TypeScript路径配置。生成的文件仍将通过@-名称引用这些路径

最常见的是,该模块用于此目的。您可以直接从node命令中要求该模块:

node -r tsconfig-paths/register main.js
重写生成的文件,以便@名称替换为真实的本地相对路径位置

这有一个独立的模块,-您只需在编译TypeScript后运行tspath,它就会用正确的路径更新生成的文件

如果您正在使用Webpack,还可以使用,这将负责配置Webpack的解析器以正确定位这些@名称路径

最后,如果您使用的是Babel,您可能会对Babel工具链的类似功能感兴趣,但是这里的缺点是它没有从tsconfig.json读取路径配置,因此您必须在这个插件的别名配置中复制路径配置

就我个人而言,如果这是一个直接使用tsc编译的节点脚本或服务器,我建议使用tsconfig路径;如果这是一个前端网页包构建,我建议使用tsconfig路径网页包插件