Ошибка развертывания облачных функций: сбой функции при загрузке кода пользователя. Сообщение об ошибке: Код в файле lib / index. js не может быть загружен - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь добавить Angular SSR, и я создал следующую облачную функцию:

import * as functions from 'firebase-functions';
import * as path from 'path';

const universal = require(path.resolve(__dirname, '../../dist/server/main')).app;

export const ssr = functions.https.onRequest(universal);

package. json

{
  "engines": {
    "node": "8"
  },
  "main": "lib/index.js",
  "dependencies": {
    "@types/jsdom": "^11.0.4",
    "firebase-admin": "^8.10.0",
    "firebase-functions": "^3.6.0",
    "path": "^0.12.7",
  },
  "devDependencies": {
    "typescript": "^3.8.3",
    "firebase-functions-test": "^0.2.1"
  }
}

При сборке развернуть мою функцию я получаю сообщение об ошибке:

!  functions[ssr(us-central1)]: Deployment error.
Function failed on loading user code. Error message: Code in file lib/index.js can't be loaded.
Did you list all required modules in the package.json dependencies?
Detailed stack trace: Error: Cannot find module '/dist/server/main'
    at Function.Module._resolveFilename (module.js:548:15)
    at Function.Module._load (module.js:475:25)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/srv/lib/ssr.js:5:19)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)

Структура моей папки:

dist
 |-server
 |-browser
functions
 |-lib

Как я могу это исправить?

1 Ответ

1 голос
/ 21 апреля 2020

Я предполагаю, что ваш код пытается получить доступ к файлам вне папки «functions». То есть "../../dist/server/main" достигает и выходит за границы этой папки. Firebase CLI развертывает только содержимое папки функций. Все остальное за пределами этого не будет доступно функции после развертывания. Если вы хотите, чтобы этот контент был доступен, вам придется скопировать его туда. И да, это может означать, что вам придется дублировать этот файл, если вы используете его как во внешнем, так и во внутреннем интерфейсе.

...