rid*_*rid 3 typescript typescript3.0
我有一个具有以下结构的项目:
? tsconfig.json
? {
? "compilerOptions": {
? "baseUrl": ".",
? "paths": { "a-mapped/*": ["a/*"] }
? }
? }
?
? a
? ?? a.ts
? export const a = 1;
? b
?? b.ts
import { a } from "a-mapped/a";
export const b = a + 1;
Run Code Online (Sandbox Code Playgroud)
当我运行时tsc,结果b.js包含:
var a_1 = require("a-mapped/a");
exports.b = a_1.a + 1;
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用 运行它node,则会收到错误“找不到模块a-mapped/a”。
我希望tsc从 生成导入../a/a,而不是a-mapped/a. 我错过了什么或做错了什么?
不久前我自己也遇到了这个问题。有趣的是,打字稿会理解路径映射,但按设计将它们保留在已编译的 javascript 中。
编译器不会重写模块名称。模块名称被视为资源标识符,并在它们出现在源中时映射到输出
您编写的模块名称不会在输出中更改。"paths" 和 "baseURL" 用于告诉编译器它们在运行时的位置。 https://github.com/Microsoft/TypeScript/issues/9910#issuecomment-234729007
有几种方法可以解决这个问题。
您可以使用 ts-node 而不是 node 来运行您的项目。
优点:
缺点:
或者,您可以使用typescript 转换器使编译器输出正确的 javascript 文件(例如@zerollup/ts-transform-paths和ttypescript)。
优点:
ttsc --watch可靠地使用。注意:我已经测试了这个设置,它比使用
--watch.
缺点:
最后,您可以使用一个工具为您在生成的 javascript 中修复路径(ts-module-alias、module-alias、ef-tspm)。
优点:
缺点:
我最终使用 ef-tspm 来修复文件,它通常有效,尽管我对构建时间并不完全满意,并且可能值得探索转换器和 ttypescript。如果有帮助,我已经创建了一个带有路径别名设置的打字稿/节点项目。
| 归档时间: |
|
| 查看次数: |
2651 次 |
| 最近记录: |