Firebase-tools: TypeScriptを使用してデプロイすると、モジュール '@ custom-modules / moduleName'が見つかりません

作成日 2018年11月01日  ·  3コメント  ·  ソース: firebase/firebase-tools

ねえ、みんな〜 tsconfig.jsonpaths引数を割り当てると、次のようにデプロイできません。

{
  "compilerOptions": {
    "lib": ["es6"],
    "module": "commonjs",
    "outDir": "lib",
    "rootDir": "src",
    "target": "es6",
    "sourceMap": true,
    "noImplicitReturns": true,
    "baseUrl": ".",
    // here, I assign a paths arguments
    "paths": {
      "@custom-modules/*": ["src/modules/*"],
    }
  },
  "compileOnSave": true,
  "include": ["src"]
}

paths引数は通常TypeScriptを使用し、完全に機能します。 しかし、firebasedeployはそのエラーをスローします:

Error: Error parsing triggers: Cannot find module '@custom-modules/moduleName'

この質問は、Firebase Cloud Functions方法の前にStackOverFlowで公開され

question

最も参考になるコメント

こんにちは! 私も遭遇したので、この問題についてさらに情報を追加したいと思います。
私の他のNode.js + TypeScriptプロジェクトでは、問題が発生していました。これは、上で説明したように、Typescriptは出力JSのrequireパスを変更しないためです。 私が見つけた唯一の実用的な解決策はhttps://github.com/dividab/tsconfig-paths#with-nodeで、これはtsconfig.jsonファイルに基づいてNode.jsパスの処理方法を変更します。 これは、ノードに渡された-r tsconfig-paths/register引数のおかげで機能し、実行時に(index.tsの最上部でも) registerを実行すると、Firebase関数では機能しないようです。

フロントエンドコードでも使用されるcommonフォルダーがあるため、相対パスがあると非常に不便に思えます。このフォルダーへの相対パス../../../common 、index.tsでは

では、ローカル環境と本番環境の両方を含む、Firebase関数にこの-r tsconfig-paths/register引数を追加する方法があるのでしょうか。

全てのコメント3件

私の理解がうまくいくと、 baseUrlpathsは、モジュールの型と場所を理解するためにコンパイラとリンターによってのみ使用されます。 これらの2つのプロパティは、これらのマップされたパスをコンパイルに_含める_か、コンパイル時に機能するようにimportステートメントを変更するようにコンパイラに指示しません。 コンパイルされたlibディレクトリを見て、 @custom-modules/* importステートメントが変更されていないことを確認します。

とは言うものの、エラーは、デプロイメントプロセスで、CLIが関数コードを解釈して、デプロイする必要のある関数を理解するという事実に起因しています。 関数コードは知識のないモジュールを必要としているため(これはlibフォルダーにあります、覚えておいてください)、そのメッセージを出力するエラーがスローされます。

import ... from "@custom-modules/...";を実行して構造内の他の場所に再マッピングすることで入力を節約しようとしている場合は、相対インポートを実行することでこれを修正できます。これはおそらくとにかく推奨される方法です。 baseUrlpathsがあなたが探している答えだとは思いません。

こんにちは! 私も遭遇したので、この問題についてさらに情報を追加したいと思います。
私の他のNode.js + TypeScriptプロジェクトでは、問題が発生していました。これは、上で説明したように、Typescriptは出力JSのrequireパスを変更しないためです。 私が見つけた唯一の実用的な解決策はhttps://github.com/dividab/tsconfig-paths#with-nodeで、これはtsconfig.jsonファイルに基づいてNode.jsパスの処理方法を変更します。 これは、ノードに渡された-r tsconfig-paths/register引数のおかげで機能し、実行時に(index.tsの最上部でも) registerを実行すると、Firebase関数では機能しないようです。

フロントエンドコードでも使用されるcommonフォルダーがあるため、相対パスがあると非常に不便に思えます。このフォルダーへの相対パス../../../common 、index.tsでは

では、ローカル環境と本番環境の両方を含む、Firebase関数にこの-r tsconfig-paths/register引数を追加する方法があるのでしょうか。

https://www.npmjs.com/package/module-aliasが私のために働いていることがわかりました。

  1. 新しいファイルを作成/src/fixTsPaths.ts

    import * as ModuleAlias from 'module-alias'
    
    ModuleAlias.addAliases({
      helpers: __dirname + '/helpers',
    })
    
  2. /scr/index.tsインポートします。

    import * as functions from 'firebase-functions'
    import * as admin from 'firebase-admin'
    import './fixTsPaths'
    
このページは役に立ちましたか?
0 / 5 - 0 評価