【发布时间】:2017-12-12 07:04:45
【问题描述】:
我正在尝试使用 ES6 模块解析将 Typescript 项目编译为 JS,但似乎有些不对劲。
我的 tsconfig.json 看起来像这样:
{
"compilerOptions": {
"module": "es6",
"target": "es6",
"sourceMap": true,
"lib": ["es6"]
}
}
我用两个模块构建了一个简单的测试用例。第一个模块 (module1.ts) 只是导出一个常量:
export const testText = "It works!";
第二个模块 (main.ts) 只是从第一个模块导入导出:
import { testText } from 'module1';
alert(testText);
第二个模块的输出文件 (main.js) 包含在我的 index.html 中,type="module"-Attribute:
<script src="main.js" type="module"></script>
当我使用 Firefox(dom.moduleScripts.enabled 在 about:config 中设置)和 Chrome Canary(设置了实验性 Web 平台标志)进行测试时。在这两种情况下都不起作用。
Typescript 编译器似乎将 TS import { testText } from 'module1'; 语句转换为 JS 语句 import { testText } from 'module1';。 (注:两者完全相同)
正确的 ES6 导入语句应该是:
import { testText } from 'module1.js';
(注意 .js 文件扩展名)
如果我手动将文件扩展名添加到生成的代码中,它就可以工作。
是我做错了什么还是 Typescript "module": "es6" 设置无法正常工作?
有没有办法配置 tsc 以将 .js 文件扩展名添加到生成的导入语句中?
【问题讨论】:
-
我正在解决同样的问题。导入
*.js文件是一个很好的解决方法,但后来我在 IDE 中重构(使用 CLion)和去声明、定义等时遇到了问题。所以我切换回没有*.js扩展名的导入,实际上我正在使用 SystemJS 进行转译ES6 JavaScript(作为开发过程中的临时解决方案)。我找到了有关使用 TypeScript 编译器 API 的信息。为这种情况考虑“自定义”构建工具,但实际上我很忙。如果有人有一些想法、笔记或有类似的东西
标签: javascript typescript ecmascript-6 es6-modules