Следующий фрагмент будет работать только в среде build
из-за вашего состояния (stage === 'build-html'
):
exports.onCreateWebpackConfig = ({ stage, actions, getConfig }) => {
if (stage === 'build-html') {
actions.setWebpackConfig({
externals: getConfig().externals.concat(function(context, request, callback) {
const regex = /^@?firebase(\/(.+))?/;
if (regex.test(request)) {
return callback(null, `umd ${request}`);
}
callback();
}),
});
}
};
Удалите его и используйте так:
exports.onCreateWebpackConfig = ({ stage, actions, getConfig }) => {
actions.setWebpackConfig({
externals: getConfig().externals.concat(function(context, request, callback) {
const regex = /^@?firebase(\/(.+))?/;
if (regex.test(request)) {
return callback(null, `umd ${request}`);
}
callback();
}),
});
};
Спасибо большое! Он работает только при разработке gatbsy, но теперь, когда я хочу собрать проект, я получаю ошибку - TypeError: Невозможно прочитать свойство concat из undefined. Вы знаете, как ее решить?
Что касается новой проблемы, вы можете выполнить обходной путь в this topi c, Это распространенная ошибка в сторонних модулях в Гэтсби, когда они пытаются достичь элемента DOM (обычно window
), который еще не определен при сборке приложения. Итак, вам нужно подождать, пока не определится window
. Вы можете достичь этого двумя способами:
1) Экземпляр вашего firebase с таким условием:
import firebase from '@firebase/app';
import '@firebase/auth';
import '@firebase/firestore';
import '@firebase/functions';
const config = {
... firebase config here
};
let instance;
export default function getFirebase() {
if (typeof window !== 'undefined') {
if (instance) return instance;
instance = firebase.initializeApp(config);
return instance;
}
return null;
}
Обратите внимание на оператор if (typeof window !== 'undefined')
2) Игнорируя модуль firebase в конфигурации вашего веб-пакета, вы увидите, как их документы . В вашем gatsby-node.js
:
exports.onCreateWebpackConfig = ({ stage, loaders, actions }) => {
if (stage === "build-html") {
actions.setWebpackConfig({
module: {
rules: [
{
test: /bad-module/,
use: loaders.null(),
},
],
},
})
}
}
Замените 'bad module' для firebase (или имя пакета)
Этот фрагмент заменяет ваш предыдущий, который, кажется, выбрасывает ошибка в функции concat()
.