база данных: 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```
Если вы запустили 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! :)
Самый полезный комментарий
@laurenzlong Еще раз спасибо! Это помогло мне отследить, что мне нужно сделать, чтобы решить мою проблему.
Для всех, кто столкнулся с этой проблемой: я смог успешно построить функции, изменив скрипт сборки функций, чтобы использовать
tsc --skipLibCheck
вместоtsc
изнутриfunctions/package.json
. Это говорит компилятору машинописного текста пропустить проверку типов всех файлов объявлений.