如何通过Webpack和6to5使用带es6模块的npm包?

dav*_*ark 22 javascript commonjs ecmascript-6 webpack

假设我想在我的项目(或任何给定的npm包)中使用Immutable.我npm install编了它,所以它在node_modules.当然,它有CommonJS出口.但是,我想在我的项目中使用es6模块.

我正在使用Webpack将它们全部编译在一起,使用6to5-loader来处理es6模块语法.

在我的源文件中,我说import Immutable from 'immutable';---但这会导致问题,因为es6 import正在寻找default已导出的es6 ,但情况并非如此(对于Immutable或可能几乎任何其他npm包).编译后的代码最终看起来像这样:var Immutable = require('immutable')["default"];---当然会抛出错误,因为没有default找到的属性.

我可以使用es6模块使用npm包吗?

Jam*_*yle 30

Babel.js在这里贡献.您正在寻找以下内容:

import * as Immutable from 'immutable';
// compiles to:
var Immutable = require('immutable');
Run Code Online (Sandbox Code Playgroud)

互动演示

注意:这是使用commoncommonInterop模块选项.对于其他人,请参阅:https://babeljs.io/docs/usage/modules/

  • `commonInterop` 可能会成为[默认](https://github.com/6to5/6to5/issues/242)。我仍然建议以这种方式编写它,因为在使用 es6 编写依赖项之前,将其编写为 `import * as` 更为正确(在规范方面)。 (2认同)