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

时间:2014-12-04 23:12:28

标签: commonjs webpack javascript ecmascript-6

我想说我想在我的项目(或任何给定的npm包)中使用Immutable。我npm install编辑了它,因此它位于node_modules。当然,它有CommonJS出口。但是,我想在我的项目中使用es6模块。

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

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

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

2 个答案:

答案 0 :(得分:30)

Babel.js贡献者。您正在寻找以下内容:

import * as Immutable from 'immutable';
// compiles to:
var Immutable = require('immutable');

Interactive demo

  

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

答案 1 :(得分:0)

刚想通了。 (该解决方案是特定于工具的 - 但是es6模块现在只在工具启用的情况下才存在,因此我认为这足以解决问题"。

6to5的默认模块转换使用common选项,这导致我上面提到的问题。但是还有另一种选择:commonInterop ---必须建立它来处理我正在处理的情况。见https://6to5.github.io/modules.html#common-interop

为6to5做了三次欢呼。