2015-07-04 6 views
4

Я работаю над веб-приложением, которое использует Webpack для объединения модулей. По какой-то причине введение Firebase в приложение вызывает ошибку Webpack. Эта ошибка возникает, когда Webpack пытается загрузить модуль Firebase.Webpack + Firebase: отключить разбор Firebase

Как я могу идти об исключении Firebase из Webpack, но все еще может позвонить

import Firebase from 'firebase';

внутри моих файлов JS?

Вот несколько скриншотов об ошибке.

pic1 pic2

+0

Это может ожидать глобальный контекст. Трудно сказать точно, не проверяя код Firebase. См. Https://github.com/webpack/docs/wiki/shimming-modules#imports-loader для того, чтобы справиться с ним. –

ответ

23

TL; др Исключить /node_modules/ из путей Бабель-погрузчика.


Ваш второй рис показывает ошибку на firebase-web.js:12:

Uncaught TypeError: Cannot read property 'navigator' of undefined 

К сожалению, firebase-web.js is minified, так что трудно сказать точно, что происходит не так. Давайте beautify firebase-web.js с помощью http://jsbeautifier.org:

TypeError in beautified firebase-web.js

Теперь ясно видно, что скрипт пытается получить доступ к aa.navigator, но aa не определен. Вы можете увидеть at the top of the file:

var h, aa = this; 

Мы можем увидеть, что скрипт пытается сделать сейчас: она ожидает this === window так что он может получить доступ к window.navigator.

Но почему this не определено? Это потому, что в какой-то момент сценарий помещается в strict mode, что вызывает this === undefined вместо this === window. Мы можем видеть, что в WebPack сгенерированных main.js:

"use strict" in main.js

Оказывается, что "use strict" идет предваряется по babel-loader, поэтому мы должны быть в состоянии отключить Бабель-загрузчик для firebase- web.js решить эту проблему:

... 
module: { 
    loaders: [ 
    {test: /\.jsx?$/, exclude: /node_modules/, loader: 'babel-loader'} 
    ] 
} 
... 

firebase-web.js without babel-loader

Хорошо, теперь больше нет "use strict" и ошибки больше не возникает!

(Полное раскрытие:. Я работал над проектом, который @kashiB работает над и иметь доступ к исходному коду)

+0

Большое вам спасибо ...Я потратил неделю, пытаясь выяснить ошибку на window.navigator, в другом контексте, но с babel. Великий !! – benek

+0

The ** tl; dr ** комментарий - это то, что помогло мне. Оказывается, я делал это: 'exclude: '/ node_modules /''. Я удалил цитаты, и все стало работать. Теперь, только если я смогу получить эти 3 дня назад! – motoxer4533

+0

Я использовал rollup и 'exclude: '/ node_modules/**'' самостоятельно не исправил проблему. Мне пришлось добавить 'useStrict: false' в мою конфигурацию rollup также – lukejacksonn

 Смежные вопросы

  • Нет связанных вопросов^_^