我正在使用主要Express应用程序中的类创建命令行脚本。
脚本位于文件夹中:
bin/utils/
├── sync-buyers.ts
└── tsconfig.json
主要的快速应用在/app
中使用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-node是否支持“ @”导入样式?如果是这样,我该如何设置?
答案 0 :(得分:1)
因此TypeScript paths
配置仅适用于TypeScript的类型解析和检查,这意味着它将允许TypeScript仅出于类型检查的目的而理解那些导入,但其生成的代码不会自动重写这些导入到正确的位置。
有两种常见的解决方法:
更新节点解析器以了解TypeScript paths
配置。生成的文件仍将通过其@名称引用这些路径。
通常,tsconfig-paths
模块用于此目的。您可以直接通过node
命令要求该模块:
node -r tsconfig-paths/register main.js
重写生成的文件,以便将@名称替换为“真实”的本地相对路径位置。
有一个tspath
的独立模块-您只需在编译TypeScript之后运行tspath
,它就会使用正确的路径更新生成的文件。
如果您使用的是Webpack,还可以使用tsconfig-paths-webpack-plugin
,它将用于配置Webpack的解析器以正确定位那些@名称路径。
最后,如果您使用的是Babel,您可能会对babel-plugin-module-resolver
感兴趣,它对Babel工具链也有类似的作用,但是缺点是它不会读取paths
的配置tsconfig.json
,因此您基本上必须在此插件的paths
配置中复制alias
配置。
如果是直接使用tsconfig-paths
编译的Node脚本或服务器,如果是前端Webpack构建的,则我建议使用tsc
。
答案 1 :(得分:1)
使用tsmon
的简短答案tsmon bin/utils/sync-buyers.ts