Невозможно прочитать свойство _babelPolyfill неопределенного

Я пытаюсь заставить 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

person Nelson Yeung    schedule 14.01.2017    source источник
comment
Не могли бы вы также добавить '/src/index.js' к вопросу?   -  person Stefan Dragnev    schedule 16.01.2017
comment
@StefanDragnev Вы имеете в виду содержимое файла? Это все в том репозитории, который я связал.   -  person Nelson Yeung    schedule 16.01.2017


Ответы (1)


Этот шаблон проекта несколько опрометчив. Webpack создает пакеты, предназначенные для загрузки в среде браузера. Однако Mocha работает в node. Таким образом, вы должны принять во внимание то, что трансмогрификации веб-пакета делает со связанным кодом и что происходит, когда этот код возвращается в node.

Когда 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".

person Stefan Dragnev    schedule 16.01.2017
comment
Пакет вашей библиотеки вообще не должен загружать babel-polyfill. ...Очень важный момент, который я совершенно упустил! Большое спасибо. - person Nelson Yeung; 16.01.2017