0

Angular 2编码的应用程序typescript 2使用Intl.js polyfill

我已经module:"es2015"按照Angular 的建议tsconfig.json允许使用 Rollup.js 进行树摇动。在我的组件中,我只是做import 'intl'

当我在浏览器中运行应用程序时,出现错误

全局未定义

我尝试使用rollup-plugin-commonjs将库转换为es2015

rollup.config.js

plugins: [
        nodeResolve({jsnext: true, module: true}),
        commonjs({
            include: 'node_modules/intl/**/*',
        })
]

当我在浏览器中运行应用程序时,我收到错误:

IntlPolyfill 未定义

在线的:

IntlPolyfill.__addLocaleData({locale:"en-US",...});

我注意到这里的库是用它编写的,es6所以它应该与rollup. 关于如何将此库用作es6模块的任何提示?

4

1 回答 1

2

要将 Intl.js 用作 ES6 模块,您要么需要

  1. 说服维护者发布一个 ES 模块版本以及dist文件夹中的其他文件(例如Intl.esm.js等等),使用modulejsnext:main字段package.json- 他们已经在使用 Rollup 生成他们的 UMD 构建,所以这将是一个微不足道的添加,或者
  2. 自己构建它,使用 中的文件src,注意使用相同的 Babel 配置等。

但是您可以使用 rollup-plugin-commonjs 以当前形式使用它。事实证明,您只需要确保您导入的是dist/Intl.js文件而不是index.js文件(可能是由于一些棘手的循环依赖关系,它们在 CommonJS 中的工作方式与它们在 ES 模块中的工作方式不同):

import 'intl/dist/Intl.js';
console.log(Intl); // works!

这将产生比导入更好的结果,index.js即使它有效,因为 dist 文件是直接从 ES 模块生成的(没有臃肿的 CommonJS 转换)。

于 2016-10-09T12:33:46.630 回答