无法读取未定义的 属性 '_babelPolyfill'

Cannot read property '_babelPolyfill' of undefined

我正在尝试让 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

这个项目模板有点ill-advised。 Webpack 创建要在浏览器环境中加载的包。然而,Mocha 在节点中运行。所以你必须考虑 transmogrifications webpack 对捆绑代码做了什么,以及当这个代码被反馈到节点时会发生什么。

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,他们将得到一个异常说明,引用,"only one instance of babel-polyfill is allowed"