3

我正在尝试让 babel-polyfill 与库一起使用,但出现以下错误:

TypeError: Cannot read property '_babelPolyfill' of undefined
at Object.<anonymous> (/Users/foo/webpack-library-starter/lib/library.js:73:6)
...

我使用webpack-library-starter作为我的模板。

完整复制详细信息:

git clone https://github.com/krasimir/webpack-library-starter.git
cd webpack-library-starter
npm i
npm i --save babel-polyfill

尝试添加import 'babel-polyfill'到“src/index.js”的开头并没有它。

添加'babel-polyfill'到“webpack.config.js”:

  entry: ['babel-polyfill', __dirname + '/src/index.js'],

然后构建并测试:

npm run dev
npm run build
npm test
4

1 回答 1

4

这个项目模板有点不明智。Webpack 创建旨在在浏览器环境中加载的包。但是,Mocha 在 node.js 中运行。所以你必须考虑到 webpack 对捆绑代码做了什么变形,以及当这个代码反馈到 node.js 时会发生什么。

babel-polyfill被 webpack 捆绑时,有一个隐含的假设,即捆绑将被加载到浏览器中,并且一些特定的全局变量(即,this在未绑定的函数中引用window)将在那里。

加载节点的正确方法babel-polyfill是使用节点自己的require. 例如,将测试脚本更改package.json为:

"test": "mocha --compilers js:babel-core/register --colors -r babel-polyfill ./test/*.spec.js"

但是,您的库的捆绑包根本不应该加载babel-polyfill。如果您的库初始化babel-polyfill并且有人将您的库包含到他们的项目中,该项目也初始化babel-polyfill了 ,他们将得到一个异常声明,quote, "only one instance of babel-polyfill is allowed"

于 2017-01-16T10:36:31.427 回答