У меня есть небольшой проект NodeJS, который я хочу развернуть в Cloud Functions. Поскольку в этом проекте используется Pubsub, я использовал эмулятор на своем локальном компьютере для имитации Pubsub, поэтому я могу протестировать его локально без предварительного развертывания. Я следовал инструкциям по Functions Framework и эмулятору Pubsub из здесь и здесь .
Вот как структурирована моя папка:
project-folder/
+|index.js
|package.json
|lib/
+|mod_1.js
|mod_2.js
...
|mod_n.js
|node_modules/
Где файлы js
в папке lib
- это мои служебные функции. Я импортирую эти модули в файл точки входа программы index.js
(так как я не слишком знаком со "стандартным" NodeJS управлением зависимостями) в локальном разработчике следующим образом:
const mod_1 = require('./lib/mod_1');
const { mod_2a, mod_2b } = require('./lib/mod_2');
...
The package.json
выглядит так:
"scripts": {
"start": "functions-framework --port=3000 --target=app",
И я запускаю свое приложение, используя npm start
, что в значительной степени работает.
Однако, когда я пытаюсь развернуть облачные функции с помощью команды gcloud functions deploy...
в моя оболочка, развертывание не удается, поскольку она не может найти мои частные модули. Итак, читая документацию об указании зависимостей в Cloud Functions здесь , я обновил зависимости в моем package.json
, чтобы включить свои модули в lib
:
"dependencies": {
"@google-cloud/functions-framework": "^1.5.1",
"@google-cloud/pubsub": "^2.1.0",
"express": "^4.17.1",
...
"mod_1": "file:./lib/mod_1",
"mod_2": "file:./lib/mod_2",
...
},
, но все равно не удается развернуть из-за той же проблемы, а теперь с добавленной проблемой, что у меня возникает ошибка при локальном запуске программы, так как она не может обнаружить модули. Я пробовал различные комбинации в index.js
и package.json
, например, удаление префикса lib
в require
, добавление .js
, и т.д. c, но, похоже, ни одна из них не работает.
Мой вопрос: :
(1) Существует ли единый универсальный стандарт (именование папок, импорт библиотек и т. Д. c) для зависимостей в NodeJS? Мне кажется, что разные фреймворки имеют разные стили.
(2) Как сделать так, чтобы зависимость работала как в моей локальной среде разработки, так и при развертывании в Cloud Functions?
My NodeJS среда выполнения - версия 10 (по крайней мере, для облачных функций).