Я использую функции Firebase с приложением React. У меня есть некоторый нетривиальный код, который я не хочу дублировать, поэтому я хочу поделиться им между развернутыми функциями и моим клиентом React. У меня это работает локально в моем клиенте React (хотя я не пробовал развертывать) - но я не могу развернуть свои функции.
Первым делом я попробовал ссылку npm. Это работало локально, но функции не развертываются (что имеет смысл, поскольку это не оставляет зависимости в вашем package.json). Затем я попытался установить npm ../shared/ - это выглядело многообещающе, потому что оно оставило зависимость в package.json с префиксом file: - но Firebase все равно не будет развертываться с этим (ошибка ниже).
Структура каталогов моего проекта выглядит следующим образом:
/ProjectDir
firebase.json
package.json (for the react app)
/src
* (react source files)
/functions
package.json (for firebase functions)
index.js
/shared
package.json (for the shared module)
index.js
Мой общий модуль package.json (лишние детали опущены):
{
"name": "myshared",
"scripts": {
},
"dependencies": {
},
"devDependencies": {
},
"engines": {
"node": "8"
},
"private": true,
"version": "0.0.1"
}
Мои функции firebase package.json (лишние детали опущены):
{
"name": "functions",
"scripts": {
},
"dependencies": {
"myshared": "file:../shared",
},
"devDependencies": {
},
"engines": {
"node": "8"
},
"private": true
}
Когда я пытаюсь выполнить развертывание с помощью:
firebase deploy --only functions
Он говорит, что не может загрузить модуль:
Function failed on loading user code. Error message: Code in file index.js can't be loaded.
Did you list all required modules in the package.json dependencies?
И я не думаю, что проблема в том, как я экспортирую / импортирую свой код, но на всякий случай:
Экспорт:
exports.myFunc = () => { some code };
Импорт (functions / index.js)
const myFunc = require('myshared');
И в моем коде реакции:
import { myFunc } from 'myshared';
Пока что поиск, который я провел, не дал ничего, что работает. Кто-то упоминал о введении пути общего модуля в firebase.json, но я не смог найти какие-либо подробности (в том числе и в документации по firebase), которые показывают, как это будет выглядеть. Спасибо за любые советы, чтобы получить это.