2017-07-07 56 views
4

我想编译一个Typescript项目到JS与ES6模块分辨率,但似乎不正确。Typescript编译器忘记将文件扩展名添加到ES6模块导入?

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.htmltype="module"-属性:

<script src="main.js" type="module"></script> 

当我用Firefox(dom.moduleScripts.enabled在about:config中设置)和Chrome Canary(实验性Web平台标志设置)测试此项时。在这两种情况下,它都不起作用。

Typescript编译器似乎将TS import { testText } from 'module1'; -statement转换为JS语句import { testText } from 'module1';。 (注:这两个是完全一样的)

正确ES6进口语句应该是: import { testText } from 'module1.js'; (注意.js文件扩展名) 如果我手动添加文件扩展名来生成的代码,它的工作原理。

我做错了什么或Typescript "module": "es6"设置不正确? 有没有办法以这样的方式配置tsc:将.js文件扩展名添加到生成的导入语句中?

+0

这是一个已知的问题,报告为https://github.com/Microsoft/TypeScript/issues/13422和https://github.com/Microsoft/TypeScript/issues/16577 – artem

+0

我正在解决同样的问题。导入'* .js'文件是很好的解决方法,但后来我遇到了IDE(使用CLion)重构和去声明,定义等问题。所以我切换回导入时没有'* .js'扩展名,实际上我是使用SystemJS来转换ES6 JavaScript(作为开发过程中的临时解决方案)。我找到了关于使用TypeScript编译器[API](https:// github。COM /微软/打字稿/维基/使用最编译器API)。为这种情况考虑“定制”构建工具,但实际上我很忙。如果任何人有一些想法,笔记或有像t的东西 – Martin

回答

0

这是一个bug in TypeScript

在短期内,你可以解决它通过指定输出文件:

main.ts指定.js扩展名和路径:

import { testText } from './module1.js'; 
alert(testText); 

这将正确地拿起module.ts,但输出与包括.js扩展。

请注意,您还需要为本地文件添加前缀./,因为“裸”模块名称保留供将来使用。

相关问题