Указание частных зависимостей для NodeJS в облачных функциях - PullRequest
0 голосов
/ 20 июня 2020

У меня есть небольшой проект 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 (по крайней мере, для облачных функций).

1 Ответ

2 голосов
/ 21 июня 2020

Node.js зависимости - это другие модули, установленные через NPM, ваши служебные функции не являются зависимостями модулей. Вам не нужно добавлять их в пакет. json. Когда вы развертываете свою функцию, весь исходный код будет упакован в zip-файл и загружен. Вот ссылка на правильное руководство, на которое вам следует обратить внимание: https://cloud.google.com/functions/docs/deploying/filesystem

Поэтому удалите строки mod_1 и mod_2 из вашего пакета. json и любые другие ссылки, которые вы можете это указывает прямо на ваш собственный исходный код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...