最初にローカルソースから新しいパッケージをインストールしてみて、それがない場合は別の場所からインストールしてみるように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
し、新しい環境またはローカルマシンで特定の方法で毎回実行するのは面倒です。これは移植性についてではありません。:)
ありがとう。
私は自分のニーズに完全に対応するソリューションを見つけました。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
は無視され、すべてが通常どおり機能します。
ローカル開発の場合、のパッケージへの有効なパスのみが必要ですlocalDependencies
。npm install
スクリプトの後、postinstall
ローカルストレージから新しいパッケージを再インストールするだけです。
欠点は1つだけで、postinstall
既存のダウンロード済みパッケージを書き換えます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加