Firebase-tools: 関数はエラーをデプロイするだけで、親アプリケーションのnode_modulesフォルダーを参照します

作成日 2018年04月19日  ·  21コメント  ·  ソース: firebase/firebase-tools

バージョン情報

Firebase:3.18.4
ノード:8.10.0
npm:5.6.0

プラットフォーム情報

ウィンドウズ

再現する手順

firebase deploy --only functions

予想される行動

Firebaseクラウド機能は正常にデプロイされます。

実際の動作

クラウド関数のビルドが原因でエラーが発生した場合は、アプリケーションのルートレベルからnode_modulesフォルダーを参照しているようです。 @types/d3@types/googlemapsは、関数のpackage.jsonファイルではなく、アプリケーションのpackage.jsonファイルに含まれています。

`` `PS [ローカルマシンのパス]> firebase deploy--only関数

=== 'PROJECT_NAME'にデプロイしています...

機能を展開する
実行中のコマンド:npm --prefix "$ RESOURCE_DIR" run lint

features @ lint [ローカルマシンのパス] \ Functions
tslint --project tsconfig.json

実行中のコマンド:npm --prefix "$ RESOURCE_DIR" run build

関数@ビルド[ローカルマシンのパス] \関数
tsc

../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'が見つかりません。
npm ERR! コードELIFECYCLE
npm ERR! errno 2
npm ERR! 関数@ビルド: tsc
npm ERR! 終了ステータス2
npm ERR!
npm ERR! 関数@ビルドスクリプトで失敗しました。
npm ERR! これはおそらくnpmの問題ではありません。 上記の追加のログ出力がある可能性があります。

npm ERR! この実行の完全なログは、次の場所にあります。
npm ERR! [ローカルマシンのパス] \ AppData \ Roaming \ npm-cache_logs \ 2018-04-19T16_10_21_812Z-debug.log

エラー:関数の事前デプロイエラー:コマンドがゼロ以外の終了コードで終了しました2```

最も参考になるコメント

@laurenzlongありがとうございました! それは私が私の問題を解決するために何をする必要があるかを追跡するのに役立ちました。

この問題に遭遇した他の人にとっては、 functions/package.json内からtsc代わりにtsc --skipLibCheckを使用するように関数ビルドスクリプトを変更することで、関数を正常にビルドすることができました。 これは、typescriptコンパイラにすべての宣言ファイルの型チェックをスキップするように指示します。

全てのコメント21件

関数フォルダー内でnpm run buildを実行した場合、成功しますか?

関数フォルダー内でnpmrun buildを実行した場合、成功しますか?

そうではありません。 同じエラー。

次に、TypeScriptの設定、またはコード内にモジュールをインポートする方法と関係があります。 これはfirebase-toolsのバグではありません。

@laurenzlongわかりました、これについて私を助けるために時間を割いてくれてありがとう。 Firebaseクラウドの機能が、アプリケーションにどのパッケージを含めるかを気にするのはなぜだろうと思います。 受け取ったエラーに関する簡単なデモンストレーションを作成しました。 @types/googlemapsなどの型定義を含めるまで、クラウド関数は正常に構築されます。 このデモンストレーションのルートレベルに含まれているタイプ定義パッケージに関係なく、クラウド関数をビルドする必要があると思います。

「npmrunbuild」は、通常の「tsc」を使用してファイルをビルドします。 これは、FirebaseやCloudFunctionsとは何の関係もありません。

@laurenzlongありがとうございました! それは私が私の問題を解決するために何をする必要があるかを追跡するのに役立ちました。

この問題に遭遇した他の人にとっては、 functions/package.json内からtsc代わりにtsc --skipLibCheckを使用するように関数ビルドスクリプトを変更することで、関数を正常にビルドすることができました。 これは、typescriptコンパイラにすべての宣言ファイルの型チェックをスキップするように指示します。

@dylanjmcdonaldまたはtsconfig.jsonファイルに入れます:

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

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

頭を上げてくれてありがとう、ところで👍

しかし、宣言のチェックをスキップしたくない場合はどうでしょうか。 クラウド関数の1つで、es2017であるObjects.entries()を使用します。 tsconfig.jsonで設定しましたが、スキップしているため、関数実行時にエラーが発生します。 これを回避する他の方法はありますか?

私は追加することで同じ問題を修正しました:
"typeRoots":[
"./functions/node_modules/@types"
]
関数フォルダーのtsconfig.jsonに

これは、関数が初期化されたときに、ストックの自動生成されたタイプスクリプトで発生します。

自動生成されたコードと、例にあるものとまったく同じインポート。

これは、tscがプロセスツリーのタイプを検索し、 @ typesファイル内のすべてをタイプチェックしようとするためと思われますが、他には何もありません。

これに対する最も正しい解決策は、Gongevangenが提案したようにすることだと思います。 「node_modules / @ types」をtypeRootsに追加して、モジュール解決アルゴリズムがツリーを混乱させないようにします。

@dylanjmcdonaldのおかげで同じ問題が発生しましたtsc --

@dylanjmcdonald tsc --skipLibCheck./functions/package.json私のために働いた、ありがとう!

"dom" compilerOptions.lib./functions/tsconfig.json "dom"を追加して修正しました。

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

これも機能するはずです。 @yamitzkyソリューションを使用し、関数のデプロイに取り組みました。 以下は私が見たグーグル開発者のコ​​ードに従って使用可能です。
{ "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 。 この問題を再開する方法を知っている人はいますか?

この問題を再度開くことはできますが、テンプレートtsconfig.jsonlibプロパティにdomを追加することはおそらくないでしょう。 これは、開発者を軌道に乗せるための最低限のことであり、そのデフォルトはdom必要としません。 それ以外のことを強く感じている場合は、テンプレートを変更するこのリポジトリでプルリクエストを開いてください。ただし、これは私たちが行う変更ではないと思います。

ありがとうございます

.tsファイルがlibの.jsと同じ名前であることを確認し、package.jsonにも含めてください

@gongevangenのソリューションが機能することを明確にするためだけに、 "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?

神はあなたにEvanb2を祝福します! :)

このページは役に立ちましたか?
0 / 5 - 0 評価