所有主流浏览器 http://caniuse.com/#feat=es6-module支持 ES6 模块已有一段时间了。
这些方法与许多服务器端方法的不同之处在于,它们需要指定要从中导入的确切文件 - 它们无法使用文件发现。
这是有道理的 - 在 Node 应用程序或像 WebPack 这样的捆绑器中,它们实际上只需要模块的名称,然后可以花费一些额外的时间来发现保存代码的特定文件。在网络上,可能会浪费大量的往返(是'library'
in library/index.js
, or library/library.js
, or library.js
? require()
不在乎,但在网络上我们必须这样做)。
TypeScript 有 ES6 模块支持(设置"module": "es6"
in tsconfig.json
)但它似乎正在使用文件发现方法......
假设我有library.ts
:
export function myFunction(...) { ... }
Then in app.ts
:
import {myFunction} from './library';
var x = myFunction(...);
然而,这在转译时没有改变 - TS 输出仍然具有'library'
文件发现的名称,这不起作用。这会引发错误,因为'library'
未找到:
<script type="module" src="app.js"></script>
为了使 ES6 模块正常工作,TS 输出需要引用特定文件:
import {myFunction} from './library.js';
var x = myFunction(...);
如何使 TS 输出有效 ES6 模块import
声明?
注:我是not询问如何使捆绑器将 TS 输出加入到单个文件中。我特别想使用单独加载这些文件<script type="module">