Firebase-tools: Функции развертываются только с ошибкой, ссылаясь на папку node_modules родительского приложения.

Созданный на 19 апр. 2018  ·  21Комментарии  ·  Источник: firebase/firebase-tools

Информация о версии

база данных: 3.18.4
узел: 8.10.0
нпм: 5.6.0

Информация о платформе

Окна

Действия по воспроизведению

firebase deploy --only functions

Ожидаемое поведение

Облачные функции Firebase будут успешно развернуты.

Фактическое поведение

Получение ошибки, поскольку сборка облачных функций, похоже, ссылается на папку node_modules из корневого уровня приложения. @types/d3 и @types/googlemaps включены в файл package.json моих приложений, а не в файл package.json моих функций.

```PS [ПУТЬ НА ЛОКАЛЬНОЙ МАШИНЕ]> firebase deploy --only functions

=== Развертывание в "PROJECT_NAME"...

я развертываю функции
Запуск команды: npm --prefix "$RESOURCE_DIR" запустить lint

functions@ lint [ПУТЬ НА ЛОКАЛЬНОЙ МАШИНЕ]\функции
tslint --проект tsconfig.json

Запуск команды: npm --prefix "$RESOURCE_DIR" запустить сборку

functions@ build [ПУТЬ НА ЛОКАЛЬНОЙ МАШИНЕ]\функции
тск

../node_modules/@types/d3-axis/index.d.ts(50,36): ошибка TS2304: не удается найти имя «SVGSVGElement».
../node_modules/@types/d3-axis/index.d.ts(50,52): ошибка TS2304: не удается найти имя «SVGGElement».
../node_modules/@types/d3-brush/index.d.ts(32,23): ошибка TS2304: не удается найти имя «SVGGElement».
../node_modules/@types/d3-brush/index.d.ts(39,27): ошибка TS2304: не удается найти имя «SVGGElement».
../node_modules/@types/d3-brush/index.d.ts(50,27): ошибка TS2304: не удается найти имя «SVGGElement».
../node_modules/@types/d3-brush/index.d.ts(63,27): ошибка TS2304: не удается найти имя «SVGGElement».
../node_modules/@types/d3-brush/index.d.ts(63,77): ошибка TS2304: не удается найти имя «SVGGElement».
../node_modules/@types/d3-brush/index.d.ts(70,27): ошибка TS2304: не удается найти имя «SVGGElement».
../node_modules/@types/d3-brush/index.d.ts(81,32): ошибка TS2304: не удается найти имя «SVGGElement».
../node_modules/@types/d3-brush/index.d.ts(94,32): ошибка TS2304: не удается найти имя «SVGGElement».
../node_modules/@types/d3-brush/index.d.ts(94,72): ошибка TS2304: не удается найти имя «SVGGElement».
../node_modules/@types/d3-brush/index.d.ts(98,23): ошибка TS2304: не удается найти имя «SVGGElement».
../node_modules/@types/d3-brush/index.d.ts(121,28): ошибка TS2304: не удается найти имя «SVGGElement».
../node_modules/@types/d3-brush/index.d.ts(126,23): ошибка TS2304: не удается найти имя «SVGGElement».
../node_modules/@types/d3-brush/index.d.ts(138,30): ошибка TS2304: не удается найти имя «SVGGElement».
../node_modules/@types/d3-brush/index.d.ts(164,36): ошибка TS2304: не удается найти имя «SVGGElement».
../node_modules/@types/d3-brush/index.d.ts(191,45): ошибка TS2304: не удается найти имя «SVGGElement».
../node_modules/@types/d3-brush/index.d.ts(223,38): ошибка TS2304: не удается найти имя «SVGGElement».
../node_modules/@types/d3-chord/index.d.ts(360,16): ошибка TS2304: не удается найти имя «CanvasRenderingContext2D».
../node_modules/@types/d3-chord/index.d.ts(368,22): ошибка TS2304: не удается найти имя «CanvasRenderingContext2D».
../node_modules/@types/d3-dispatch/index.d.ts(8,37): ошибка TS2304: не удается найти имя «EventTarget».
../node_modules/@types/d3-dispatch/index.d.ts(18,36): ошибка TS2304: не удается найти имя «EventTarget».
../node_modules/@types/d3-drag/index.d.ts(19,38): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/d3-drag/index.d.ts(24,36): ошибка TS2304: не удается найти имя «HTMLElement».
../node_modules/@types/d3-drag/index.d.ts(24,50): ошибка TS2304: не удается найти имя «SVGSVGElement».
../node_modules/@types/d3-drag/index.d.ts(24,66): ошибка TS2304: не удается найти имя «SVGGElement».
../node_modules/@types/d3-drag/index.d.ts(390,37): ошибка TS2304: не удается найти имя «Окно».
../node_modules/@types/d3-drag/index.d.ts(402,36): ошибка TS2304: не удается найти имя «Окно».
../node_modules/@types/d3-fetch/index.d.ts(18,42): ошибка TS2304: не удается найти имя «RequestInit».
../node_modules/@types/d3-fetch/index.d.ts(18,64): ошибка TS2304: не удается найти имя «Blob».
../node_modules/@types/d3-fetch/index.d.ts(27,44): ошибка TS2304: не удается найти имя «RequestInit».
../node_modules/@types/d3-fetch/index.d.ts(41,12): ошибка TS2304: не удается найти имя «RequestInit».
../node_modules/@types/d3-fetch/index.d.ts(82,11): ошибка TS2304: не удается найти имя «RequestInit».
../node_modules/@types/d3-fetch/index.d.ts(100,12): ошибка TS2304: не удается найти имя «RequestInit».
../node_modules/@types/d3-fetch/index.d.ts(145,11): ошибка TS2304: не удается найти имя «RequestInit».
../node_modules/@types/d3-fetch/index.d.ts(157,42): ошибка TS2304: не удается найти имя «RequestInit».
../node_modules/@types/d3-fetch/index.d.ts(157,64): ошибка TS2304: не удается найти имя «Документ».
../node_modules/@types/d3-fetch/index.d.ts(167,74): ошибка TS2304: не удается найти имя «HTMLImageElement».
../node_modules/@types/d3-fetch/index.d.ts(179,72): ошибка TS2304: не удается найти имя «RequestInit».
../node_modules/@types/d3-fetch/index.d.ts(189,41): ошибка TS2304: не удается найти имя «RequestInit».
../node_modules/@types/d3-fetch/index.d.ts(189,63): ошибка TS2304: не удается найти имя «Документ».
../node_modules/@types/d3-fetch/index.d.ts(199,42): ошибка TS2304: не удается найти имя «RequestInit».
../node_modules/@types/d3-fetch/index.d.ts(212,12): ошибка TS2304: не удается найти имя «RequestInit».
../node_modules/@types/d3-fetch/index.d.ts(254,11): ошибка TS2304: не удается найти имя «RequestInit».
../node_modules/@types/d3-fetch/index.d.ts(266,41): ошибка TS2304: не удается найти имя «RequestInit».
../node_modules/@types/d3-fetch/index.d.ts(266,63): ошибка TS2304: не удается найти имя «XMLDocument».
../node_modules/@types/d3-selection/index.d.ts(17,24): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/d3-selection/index.d.ts(17,49): ошибка TS2304: не удается найти имя «Документ».
../node_modules/@types/d3-selection/index.d.ts(17,60): ошибка TS2304: не удается найти имя «Окно».
../node_modules/@types/d3-selection/index.d.ts(34,20): ошибка TS2304: не удается найти имя «Документ».
../node_modules/@types/d3-selection/index.d.ts(36,27): ошибка TS2304: не удается найти имя «Узел».
../node_modules/@types/d3-selection/index.d.ts(36,34): ошибка TS2304: не удается найти имя «Узел».
../node_modules/@types/d3-selection/index.d.ts(37,28): ошибка TS2304: не удается найти имя «Узел».
../node_modules/@types/d3-selection/index.d.ts(37,44): ошибка TS2304: не удается найти имя «Узел».
../node_modules/@types/d3-selection/index.d.ts(37,51): ошибка TS2304: не удается найти имя «Узел».
../node_modules/@types/d3-selection/index.d.ts(38,39): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/d3-selection/index.d.ts(39,42): ошибка TS2304: не удается найти имя «NodeListOf».
../node_modules/@types/d3-selection/index.d.ts(39,53): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/d3-selection/index.d.ts(45,32): ошибка TS2304: не удается найти имя «HTMLElement».
../node_modules/@types/d3-selection/index.d.ts(45,46): ошибка TS2304: не удается найти имя «SVGSVGElement».
../node_modules/@types/d3-selection/index.d.ts(45,62): ошибка TS2304: не удается найти имя «SVGGElement».
../node_modules/@types/d3-selection/index.d.ts(110,110): ошибка TS2304: не удается найти имя «HTMLElement».
../node_modules/@types/d3-selection/index.d.ts(142,113): ошибка TS2304: не удается найти имя «HTMLElement».
../node_modules/@types/d3-selection/index.d.ts(873,43): ошибка TS2304: не удается найти имя «HTMLElement».
../node_modules/@types/d3-selection/index.d.ts(977,61): ошибка TS2304: не удается найти имя «TouchList».
../node_modules/@types/d3-selection/index.d.ts(989,64): ошибка TS2304: не удается найти имя «TouchList».
../node_modules/@types/d3-selection/index.d.ts(1013,29): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/d3-selection/index.d.ts(1025,15): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/d3-selection/index.d.ts(1033,18): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/d3-selection/index.d.ts(1040,15): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/d3-selection/index.d.ts(1040,35): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/d3-selection/index.d.ts(1108,33): ошибка TS2304: не удается найти имя «Окно».
../node_modules/@types/d3-selection/index.d.ts(1108,42): ошибка TS2304: не удается найти имя «Документ».
../node_modules/@types/d3-selection/index.d.ts(1108,53): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/d3-selection/index.d.ts(1108,63): ошибка TS2304: не удается найти имя «Окно».
../node_modules/@types/d3-selection/index.d.ts(1122,44): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/d3-selection/index.d.ts(1133,45): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/d3-selection/index.d.ts(1154,46): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/d3-selection/index.d.ts(1163,49): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/d3-selection/index.d.ts(1163,97): ошибка TS2304: не удается найти имя «NodeListOf».
../node_modules/@types/d3-shape/index.d.ts(304,16): ошибка TS2304: не удается найти имя «CanvasRenderingContext2D».
../node_modules/@types/d3-shape/index.d.ts(312,22): ошибка TS2304: не удается найти имя «CanvasRenderingContext2D».
../node_modules/@types/d3-shape/index.d.ts(757,16): ошибка TS2304: не удается найти имя «CanvasRenderingContext2D».
../node_modules/@types/d3-shape/index.d.ts(765,22): ошибка TS2304: не удается найти имя «CanvasRenderingContext2D».
../node_modules/@types/d3-shape/index.d.ts(935,16): ошибка TS2304: не удается найти имя «CanvasRenderingContext2D».
../node_modules/@types/d3-shape/index.d.ts(943,22): ошибка TS2304: не удается найти имя «CanvasRenderingContext2D».
../node_modules/@types/d3-shape/index.d.ts(1230,16): ошибка TS2304: не удается найти имя «CanvasRenderingContext2D».
../node_modules/@types/d3-shape/index.d.ts(1238,22): ошибка TS2304: не удается найти имя «CanvasRenderingContext2D».
../node_modules/@types/d3-shape/index.d.ts(1536,16): ошибка TS2304: не удается найти имя «CanvasRenderingContext2D».
../node_modules/@types/d3-shape/index.d.ts(1544,22): ошибка TS2304: не удается найти имя «CanvasRenderingContext2D».
../node_modules/@types/d3-shape/index.d.ts(1650,15): ошибка TS2304: не удается найти имя «CanvasRenderingContext2D».
../node_modules/@types/d3-shape/index.d.ts(1686,15): ошибка TS2304: не удается найти имя «CanvasRenderingContext2D».
../node_modules/@types/d3-shape/index.d.ts(2016,16): ошибка TS2304: не удается найти имя «CanvasRenderingContext2D».
../node_modules/@types/d3-shape/index.d.ts(2024,22): ошибка TS2304: не удается найти имя «CanvasRenderingContext2D».
../node_modules/@types/d3-shape/index.d.ts(2196,16): ошибка TS2304: не удается найти имя «CanvasRenderingContext2D».
../node_modules/@types/d3-shape/index.d.ts(2204,22): ошибка TS2304: не удается найти имя «CanvasRenderingContext2D».
../node_modules/@types/d3-shape/index.d.ts(2273,19): ошибка TS2304: не удается найти имя «CanvasPathMethods».
../node_modules/@types/d3-shape/index.d.ts(2358,16): ошибка TS2304: не удается найти имя «CanvasRenderingContext2D».
../node_modules/@types/d3-shape/index.d.ts(2366,22): ошибка TS2304: не удается найти имя «CanvasRenderingContext2D».
../node_modules/@types/d3-transition/index.d.ts(572,65): ошибка TS2304: не удается найти имя «HTMLElement».
../node_modules/@types/d3-transition/index.d.ts(583,104): ошибка TS2304: не удается найти имя «HTMLElement».
../node_modules/@types/d3-zoom/index.d.ts(20,37): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/googlemaps/index.d.ts(33,29): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/googlemaps/index.d.ts(37,19): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/googlemaps/index.d.ts(54,28): ошибка TS2304: не удается найти имя «Узел».
../node_modules/@types/googlemaps/index.d.ts(788,30): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/googlemaps/index.d.ts(799,36): ошибка TS2304: не удается найти имя «Узел».
../node_modules/@types/googlemaps/index.d.ts(812,26): ошибка TS2304: не удается найти имя «Узел».
../node_modules/@types/googlemaps/index.d.ts(1136,20): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/googlemaps/index.d.ts(1137,22): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/googlemaps/index.d.ts(1138,18): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/googlemaps/index.d.ts(1139,22): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/googlemaps/index.d.ts(1140,23): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/googlemaps/index.d.ts(1141,23): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/googlemaps/index.d.ts(1142,29): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/googlemaps/index.d.ts(1143,24): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/googlemaps/index.d.ts(1220,21): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/googlemaps/index.d.ts(1225,25): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/googlemaps/index.d.ts(1236,17): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/googlemaps/index.d.ts(1653,32): ошибка TS2304: не удается найти имя «Узел».
../node_modules/@types/googlemaps/index.d.ts(1668,64): ошибка TS2304: не удается найти имя «Документ».
../node_modules/@types/googlemaps/index.d.ts(1668,75): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/googlemaps/index.d.ts(1669,27): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/googlemaps/index.d.ts(1692,64): ошибка TS2304: не удается найти имя «Документ».
../node_modules/@types/googlemaps/index.d.ts(1692,75): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/googlemaps/index.d.ts(1693,27): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/googlemaps/index.d.ts(1709,64): ошибка TS2304: не удается найти имя «Документ».
../node_modules/@types/googlemaps/index.d.ts(1709,75): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/googlemaps/index.d.ts(1710,27): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/googlemaps/index.d.ts(1941,32): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/googlemaps/index.d.ts(1942,28): ошибка TS2304: не удается найти имя «Узел».
../node_modules/@types/googlemaps/index.d.ts(2394,36): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/googlemaps/index.d.ts(2398,29): ошибка TS2304: не удается найти имя «Элемент».
../node_modules/@types/googlemaps/index.d.ts(2455,37): ошибка TS2304: не удается найти имя «HTMLInputElement».
../node_modules/@types/googlemaps/index.d.ts(2616,40): ошибка TS2304: не удается найти имя «HTMLDivElement».
../node_modules/@types/googlemaps/index.d.ts(2663,37): ошибка TS2304: не удается найти имя «HTMLInputElement».
нпм ОШИБКА! код ELIFECYCLE
нпм ОШИБКА! ошибка 2
нпм ОШИБКА! функции@ сборка: tsc
нпм ОШИБКА! Выход из состояния 2
нпм ОШИБКА!
нпм ОШИБКА! Ошибка в сценарии сборки functions@.
нпм ОШИБКА! Вероятно, это не проблема с npm. Вероятно, выше приведен дополнительный вывод журнала.

нпм ОШИБКА! Полный журнал этого запуска можно найти в:
нпм ОШИБКА! [ПУТЬ НА ЛОКАЛЬНОЙ МАШИНЕ]\AppData\Roaming\npm-cache_logs\2018-04-19T16_10_21_812Z-debug.log

Ошибка: ошибка предварительного развертывания функций: команда завершена с ненулевым кодом выхода2```

Самый полезный комментарий

@laurenzlong Еще раз спасибо! Это помогло мне отследить, что мне нужно сделать, чтобы решить мою проблему.

Для всех, кто столкнулся с этой проблемой: я смог успешно построить функции, изменив скрипт сборки функций, чтобы использовать tsc --skipLibCheck вместо tsc изнутри functions/package.json . Это говорит компилятору машинописного текста пропустить проверку типов всех файлов объявлений.

Все 21 Комментарий

Если вы запустили npm run build в папке функций, получилось ли это?

Если вы запустили npm run build внутри папки функций, получилось ли это?

Это не. Та же ошибка.

Тогда это как-то связано с настройкой вашего TypeScript или с тем, как вы импортируете модули в свой код. Это не ошибка с firebase-tools.

@laurenzlong Хорошо, спасибо, что упрощенную демонстрацию ошибки, которую я получаю. Облачные функции строятся нормально, пока я не включу некоторые определения типов, такие как @types/googlemaps . Я думаю, что облачные функции должны создаваться независимо от любых пакетов определения типов, которые я включаю в корневой уровень этой демонстрации.

«npm run build» использует обычный «tsc» для сборки ваших файлов. Это не имеет ничего общего с Firebase или Cloud Functions.

@laurenzlong Еще раз спасибо! Это помогло мне отследить, что мне нужно сделать, чтобы решить мою проблему.

Для всех, кто столкнулся с этой проблемой: я смог успешно построить функции, изменив скрипт сборки функций, чтобы использовать tsc --skipLibCheck вместо tsc изнутри functions/package.json . Это говорит компилятору машинописного текста пропустить проверку типов всех файлов объявлений.

@dylanjmcdonald или поместите его в файл tsconfig.json:

    // "isolatedModules": true,               /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */

    "skipLibCheck": true,
    /* Strict Type-Checking Options */
    "strict": true,

Спасибо за наводку, кстати 👍

Но что, если вы не хотите пропускать проверку декларации? В одной из моих облачных функций я использую Objects.entries(), которая имеет значение es2017. Я установил его в tsconfig.json, но поскольку он пропускает его, он выдает ошибку при выполнении функции. Есть ли другой способ обойти это?

Я исправил ту же проблему, добавив:
"типРутс": [
"./функции/узловые_модули/@типы"
]
в tsconfig.json в папке функций

Это происходит со стандартным автоматически сгенерированным машинописным текстом, когда функции инициализируются для меня.

Только автоматически сгенерированный код и импорт, точно такие же, как в примерах.

Похоже, это потому, что tsc будет искать типы в вашем дереве процессов и пытается проверить тип всего в файлах @types, но больше ничего, так что все пойдет к черту?

Я думаю, что самое правильное решение — сделать так, как предложил Гонгеванген. добавьте «node_modules/@types» в typeRoots, чтобы алгоритм разрешения модулей не сошел с ума по дереву.

У меня такой же иссус благодаря @dylanjmcdonald. Я решил его с помощью tsc --skipLibCheck

@dylanjmcdonald tsc --skipLibCheck в ./functions/package.json у меня сработало, спасибо!

Я исправил, добавив "dom" к compilerOptions.lib в ./functions/tsconfig.json .

{
  "compilerOptions": {
    "lib": ["es6", "dom"],
    "module": "commonjs",
    "noImplicitReturns": true,
    "outDir": "lib",
    "sourceMap": true,
    "target": "es6"
  },
  "compileOnSave": true,
  "include": [
    "src"
  ]
}

Это тоже должно работать. Я использовал решение @yamitzky и работал над развертыванием функции. Приведенное ниже можно использовать в соответствии с кодом разработчика Google, который я просмотрел.
{ "compilerOptions": { "lib": ["es6"], "module": "commonjs", "noImplicitReturns": true, "outDir": "lib", "sourceMap": true, "target": "es6", "skipLibCheck": true, "typeRoots": ["./functions/node_modules/@types"] }, "compileOnSave": true, "include": [ "src" ] }

Замечательно, что для этого есть обходные пути, но одно из этих решений действительно должно быть в .tsconfig сгенерированном firebase init . Кто-нибудь знает, как мы можем снова открыть этот вопрос?

Вы можете снова открыть этот вопрос, но я могу сказать вам, что мы, вероятно, не будем добавлять dom к свойству lib шаблона tsconfig.json . Это как минимум предназначено для того, чтобы сдвинуть разработчика с мертвой точки, и для этого по умолчанию не требуется dom . Если вы считаете иначе, пожалуйста, не стесняйтесь открыть запрос на вытягивание в этом репо, изменяя шаблоны, но я не думаю, что это изменение, которое мы бы сделали.

Спасибо, сэр

Убедитесь, что ваш файл .ts имеет то же имя, что и .js в lib, а также включите его в package.json.

Просто чтобы уточнить, что решение "typeRoots" внутри "compilerOptions" :

{
  "compilerOptions": {
    "module": "commonjs",
    "noImplicitReturns": true,
    "noUnusedLocals": true,
    "outDir": "lib",
    "sourceMap": true,
    "strict": true,
    "target": "es2017",
    "typeRoots": [
      "./functions/node_modules/@types"
    ],
  },
  "compileOnSave": true,
  "include": [
    "src"
  ],
}

Немного смущен тем, почему это не будет включено в шаблон ... или даже упомянуто где-либо в любой из статей Firebase.

Я согласен с @evanb2 - это стоило мне всего часа! Конечно, стоило бы хотя бы упомянуть об этом здесь: https://firebase.google.com/docs/functions/typescript, если не включать его в инициализацию firebase?

Да благословит тебя Бог Evanb2! :)

Была ли эта страница полезной?
0 / 5 - 0 рейтинги