角度更改模块从es6到commonJs结果

时间:2017-02-12 23:23:23

标签: angular typescript ecmascript-6 commonjs

我尝试为我的应用导入FileSaver。我让它发挥作用的唯一方法是通过以下命令

import filesaver = require('filesaver');

然后我收到此错误

  

定位ECMAScript 2015模块时无法使用导入分配

我通过将tsconfig.json中的模块从es6更改为commonjs来遵循解决方案。

现在一切正常。但是,我很担心从es6变为commonjs的后果是什么。显然,出于某种原因这是es6吗?

有没有办法做到这一点,我不必改变?

1 个答案:

答案 0 :(得分:3)

是的,如果您使用的是TypeScript,请使用es6 / TypeScript模块加载语法:

import { type } from './module';

将TypeScript编译为JavaScript时,可以定位所需的任何模块加载器:

es6
system
commonjs
AMD
UMD

您可以从tsconfig.json:

定位模块系统
"compilerOptions": {
  ...
  "module": "commonjs",
}

浏览器本身尚未支持模块加载。在他们这样做之前,根据您使用的模块系统包含必要的脚本。

例如,如果您定位“system”或“commonjs”,请确保包含兼容的脚本以正确加载模块(即node_modules / systemjs / dist / system.js)

我的建议,如果您在TypeScript中编写ng2应用程序

恕我直言,es6提供了最干净的模块加载语法。我更喜欢使用TypeScript编写Angular2程序并使用es6语言功能(包括清理器模块加载语法)。在将TypeScript编译为JavaScript时,我尝试以es5为目标,因为如今大多数浏览器都提供接近100%的合规性而没有垫片,并使用systemjs作为模块加载器(如果我想稍后更改格式,则最灵活)。

在FileServer代码中,使用TypeScript编写它,并使用es6模块加载语法。这样,它将被编译为您要定位的模块加载器语法,这应该与其余的ts文件保持一致。