ねえ、みんな〜 tsconfig.json
にpaths
引数を割り当てると、次のようにデプロイできません。
{
"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で公開され
私の理解がうまくいくと、 baseUrl
とpaths
は、モジュールの型と場所を理解するためにコンパイラとリンターによってのみ使用されます。 これらの2つのプロパティは、これらのマップされたパスをコンパイルに_含める_か、コンパイル時に機能するようにimport
ステートメントを変更するようにコンパイラに指示しません。 コンパイルされたlib
ディレクトリを見て、 @custom-modules/*
import
ステートメントが変更されていないことを確認します。
とは言うものの、エラーは、デプロイメントプロセスで、CLIが関数コードを解釈して、デプロイする必要のある関数を理解するという事実に起因しています。 関数コードは知識のないモジュールを必要としているため(これはlib
フォルダーにあります、覚えておいてください)、そのメッセージを出力するエラーがスローされます。
import ... from "@custom-modules/...";
を実行して構造内の他の場所に再マッピングすることで入力を節約しようとしている場合は、相対インポートを実行することでこれを修正できます。これはおそらくとにかく推奨される方法です。 baseUrl
とpaths
があなたが探している答えだとは思いません。
こんにちは! 私も遭遇したので、この問題についてさらに情報を追加したいと思います。
私の他の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が私のために働いていることがわかりました。
新しいファイルを作成/src/fixTsPaths.ts
:
import * as ModuleAlias from 'module-alias'
ModuleAlias.addAliases({
helpers: __dirname + '/helpers',
})
/scr/index.ts
インポートします。
import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'
import './fixTsPaths'
最も参考になるコメント
こんにちは! 私も遭遇したので、この問題についてさらに情報を追加したいと思います。
私の他の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
引数を追加する方法があるのでしょうか。