Javascript Typescript编译器忘记向ES6模块导入添加文件扩展名了吗?
我正试图用ES6模块解析将一个Typescript项目编译成JS,但似乎有些不对劲 我的tsconfig.json如下所示:Javascript Typescript编译器忘记向ES6模块导入添加文件扩展名了吗?,javascript,typescript,ecmascript-6,es6-modules,Javascript,Typescript,Ecmascript 6,Es6 Modules,我正试图用ES6模块解析将一个Typescript项目编译成JS,但似乎有些不对劲 我的tsconfig.json如下所示: { "compilerOptions": { "module": "es6", "target": "es6", "sourceMap": true, "lib": ["es6"] } } 我用两个模块构建了一个简单的测试用例。第一个模块(module1.ts)仅导出一个常量: export const testText =
{
"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)的输出文件包含在my index.html中,带有type=“module”
-属性:
<script src="main.js" type="module"></script>
当我使用Firefox(dom.moduleScripts.enabled
在about:config中设置)和Chrome Canary(设置了实验性Web平台标志)进行测试时。在这两种情况下,它都不起作用
Typescript编译器似乎从'module1'传输TSimport{testText}
-从'module1'导入{testText}到JS语句的语句import代码>。(注:两者完全相同)
正确的ES6导入声明应为:
从'module1.js'导入{testText}代码>
(注意.js文件扩展名)
如果我手动将文件扩展名添加到生成的代码中,它就会工作
我是否做错了什么,或者Typescript“模块”:“es6”
设置是否无法正常工作?
是否有一种方法可以配置tsc,使.js文件扩展名添加到生成的导入语句中?这是一种简单的方法
短期内,您可以通过指定输出文件来解决此问题:
在main.ts
中指定.js
扩展名和路径:
import { testText } from './module1.js';
alert(testText);
这将正确拾取module.ts
,但输出时包含.js
扩展名
请注意,您还需要在本地文件前面加上/
,因为“裸”模块名称保留供将来使用。Keith回答正确
在你的主要演讲中
而不是
import { testText } from 'module1';
试试下面的方法
import { testText } from 'module1.js';
在我的例子中,vscode intellisense工作+我也得到了所需的输出文件main.js。这是一个已知的问题,报告为,我正在解决相同的问题。导入*.js
文件是一个很好的解决方法,但是我在IDE中遇到了重构问题(使用CLion)和声明、定义等。因此我切换回导入而不使用*.js
扩展,实际上我使用SystemJS来传输ES6 JavaScript(作为开发期间的临时解决方案)。我找到了有关使用TypeScript编译器的信息。考虑为这种情况使用“定制”构建工具,但实际上我很忙。如果有人有一些想法、笔记或类似于针对这种糟糕的TS bug的叛逆智能解决方案;)谢谢因“按预期工作”而关闭。所以这是一个错误功能而不是一个bug?回答得好,只想提到baseUrl
属性作为一个tsconfig选项添加到了typescript v3.5中。如果你把它设置到你的所有类型的源文件的根目录,你就可以省去<本地输入的代码> > /<代码>没有更新。@ MuHMMayAdoo-不幸的是,更新是TypeScript团队认为这是“按预期的工作”,不会改变行为。