最初にローカルパッケージをインストールするようにpackage.jsonを構成してから、レジストリまたはリポジトリからインストールする方法を教えてください。

artanik

最初にローカルソースから新しいパッケージをインストールしてみて、それがない場合は別の場所からインストールしてみるようにnpm installプロセスを構成する方法はありpackage.jsonますか?

ええ、これがバージョンの構文であることは知っていますが、次のようなものが必要です。

"dependencies": {
    "ui-elements": "file:path/to/ui-elements || git+https://[email protected]/user/ui-elements.git"
}

さまざまなReactアプリケーションで使用されるいくつかのUI要素を含むパッケージがあるため、このような動作が必要な理由。これらのUI要素は活発に開発されているため、ローカルコピーが必要です。最後に、これらのアプリケーションはAWSクラウドにデプロイされ、Dockerは依存関係をインストールしようとします。このパッケージがローカルに存在しない場合、1つの構成ファイルでリポジトリから依存関係をインストールできると便利です。

またnpm linkについても知っていますが、このコマンドを多数のディレクトリで手動で実行npm linkし、新しい環境またはローカルマシンで特定の方法で毎回実行するのは面倒です。これは移植性についてではありません。:)

ありがとう。

artanik

私は自分のニーズに完全に対応するソリューションを見つけました。postinstallすべてのパッケージがインストールされた直後にフックを使用してカスタムスクリプトを実行することにしました次に、でカスタムプロパティを宣言しlocalDependenciesましたpackage.json

それはそれがどのように見えるかですpackage.json

"scripts": {
  "postinstall": "node install.js"
},
"localDependencies": {
  "ui-elements": "file:path/to/ui-elements"
},
"dependencies": {
  "ui-elements": "git+https://[email protected]/user/ui-elements.git"
}

ファイルに関してはinstall.js、私はそれを成し遂げるためにいくつかの解決策を試しました。まずnpm.commands.install(dependencies)npmパッケージから使用てみましたこのinstall()方法で作業罰金、しかしここでの問題は、この方法はまた、私の上書き依存関係から依存関係使用してリストをlocalDependenciesではpackage.jsonメソッドに--no-saveパラメーターを渡す方法を見つけようとしましたが、installまったく機能しませんでした。そして全体として、このAPIはどこにも文書化されていません(または私はそれを見つけることができませんでした)。そのため、exec関数fromを使用して、コマンドを直接child_process実行npmすることにしました。

install.js

const { exec } = require('child_process');

const packageJson = require('./package.json');

if (process.env.NODE_ENV !== 'production' && packageJson.localDependencies) {
  Object.values(packageJson.localDependencies).forEach((path) => {
    exec(`npm install ${path} --no-save`).stderr.pipe(process.stderr);
  });
}

さて、私たちは最終的に何を持っていますか?

本番export NODE_ENV='production'環境では、グローバル変数を使用する必要があります。その後install.jsは無視され、すべてが通常どおり機能します。

ローカル開発の場合、のパッケージへの有効なパスのみが必要ですlocalDependenciesnpm installスクリプトのpostinstallローカルストレージから新しいパッケージを再インストールするだけです。

欠点は1つだけで、postinstall既存のダウンロード済みパッケージを書き換えます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ