web-dev-qa-db-ja.com

クラウド機能でプライベートNPMパッケージを使用するにはどうすればよいですか?

アプリケーションをFirebaseに切り替えて、バックエンドをFirebase CloudFunctionsに転送しようとしています。

このアプリケーションは、依存関係としてプライベートパッケージ(@org/name)を使用しています。

私は別の解決策を試しましたが、どれもうまくいかないようです:

  • NPM_TOKEN envを渡す:Firebaseは小文字の設定に制限されているため、できません
  • npm install関数ディレクトリ内のモジュール
  • YARNとNPMの両方の認証トークンを使用してfunctionsディレクトリに.npmrcファイルを作成します

次の場合、常に展開を拒否します。

Deploy Error: Build failed: Module @org/name not found in npm registry

プライベートパッケージはFirebaseでサポートされていますか?

17
Samy Pessé

Npmで公開されていないパッケージを含める場合は、自分でパッケージ化して、functionsフォルダーに含める必要があります。デプロイすると関数フォルダー全体がアップロードされるため、ローカルの場合と同じようにフォルダーから必要なものを要求できるはずです。

2
Doug Stevenson

Google CloudFunctionsがプライベートNPMパッケージをサポートするようになりました。

プライベートnpmモジュールを使用するには、関数のディレクトリにある.npmrcファイルでnpmレジストリの資格情報(認証トークン)を提供する必要があります。 npm loginコマンドを使用してnpmにログインしたときに、ホームディレクトリに作成された.npmrcファイルをコピーするだけです。

プライベートリポジトリを使用していない場合は、.npmrcファイルを含めないでください。関数の展開時間が長くなる可能性があります。

出典: https://cloud.google.com/functions/docs/writing/dependencies#using_private_modules

12
Mike Nikles

現在、それを行う便利な方法はありません。

GCFはnpmクライアントを使用してnpmレジストリからフェッチせず、代わりに直接フェッチしているように見えます。これにより、標準の.npmrcファイルやnpmクライアントが認識している他の方法を使用できなくなります。

パッケージをローカルにパックしてインストールし、ソースコードにコミットする必要があります。

$ npm pack @org/name
$ npm install --save tarball-output.tgz

これにより、ローカルtarballがpackage.jsonに追加され、Google CloudFunctionsはそれを使用することを認識します。

プロジェクトのルートパスから.npmrcを読み取るか、あるいは環境変数としてトークンを渡すことができれば幸いです。

それについては未解決の問題があります: https://issuetracker.google.com/issues/36665861

8
Michael

Firebaseは、.npmrcファイルを含むプライベートnpmモジュールをサポートするようになりました。チェックアウト this リンク。

3
DevShadow

Google Issue Tracker を参照して、これは修正されました。詳細については、 Google Cloud Platform のドキュメントを確認してください。

プライベートモジュールの使用

プライベートnpmモジュールを使用するには、関数のディレクトリにある.npmrcファイルでnpmレジストリの資格情報(認証トークン)を提供する必要があります。 npm loginコマンドを使用してnpmにログインしたときに、ホームディレクトリに作成された.npmrcファイルをコピーするだけです。

プライベートリポジトリを使用していない場合は、.npmrcファイルを含めないでください。関数のデプロイ時間が長くなる可能性があります。

問題が解決しない場合は、 Google Issue Tracker で報告してください。再度開いて調査します。

2
Prags