postinstall と git を使用してサブモジュールをオーバーライドする
「npm の方法」では、git リポジトリからパッケージをインストールするために特定のコミット (またはバージョン/タグ) が必要です。 npm install に関する詳細情報。私は通常、カスタム ブランチを作成してそれをプッシュするので、特定の機能をテストするため、または master をそのままにしておくために、カスタム ブランチを複製できるようにしたいと考えました。
パッケージをオーバーライドするには、npmのpostinstall フックフックを使用します。
にスクリプトを追加しpostinstall
ますpackage.json
。
"scripts": {
"postinstall": "./postinstall.sh",
"start": "node index.js"
},
postinstall.sh
次に、パッケージを削除して github から複製するために bash スクリプト ( ) を使用します。
#!/bin/sh
function override_pkg {
USER=$1
REPO=$2
DEST=$3
rm -rf node_modules/$DEST
echo "Overriding $DEST..."
if [ -d custom_modules/$DEST ]; then
cd custom_modules/$DEST
git pull
cd ../../
else
case $REPO in
*:*)
REPOBR=(${REPO//:/ })
git clone -b ${REPOBR[1]} https://github.com/$USER/${REPOBR[0]}.git custom_modules/$DEST
;;
*)
git clone https://github.com/$USER/$REPO.git custom_modules/$DEST
;;
esac
fi
npm install custom_modules/$DEST
}
# func user repo branch dest
override_pkg johndoe myrepo:branch mynpmpackage
スクリプトは、custom_modules
フォルダー内のパッケージを複製しnpm
、ローカル パッケージを にインストールするために使用しますnode_modules
。後のブランチ名:
はオプションです。
OPの場合、次のようになります。
override_pkg johndoe jasminewd:jasminewd2 jasminewd2
次に糸:
yarn
ローカルの git リポジトリでローカルな変更を行う場合は、パッケージの再オーバーライドを再度custom_modules\mypackage
呼び出します。yarn
マシンを変更し、カスタム パッケージのローカル バージョンを既に取得している場合、呼び出しyarn
によってリポジトリから取得され、パッケージが上書きされます。
PS。npm install
も動作しますyarn
が、少し高速です。
テスト用の複数の環境
これは別のアイデアですが、さまざまな構成をテストするために使用することもありました。誰かがこれを行うためのツールや何かを知っている場合は、私に教えてください。
node_modules
ローカルで、次のような2 つの異なるフォルダーを作成します。
最初に元のモジュール:
yarn --modules-folder=original-modules
フラグ:
--modules-folder <path>
node_modules
cwd に関連するフォルダーにモジュールをインストールするのではなく、ここに出力します。
次に、カスタムのものoriginal-modules
については、クローンをコピーするだけです。
cp -r original-modules custom-modules
または、yarn を使用してカスタム モジュールを追加することもできます。
yarn add <modulename> --no-lockfile --modules-folder=custom-modules
フラグ:
--no-lockfile
ロックファイルを読み取ったり生成したりしないでください
フォルダーに満足したら、NODE_PATHcustom-modules
を使用して次のような環境を切り替えることができます。
通常の環境の場合:
NODE_PATH=original-modules npm start
カスタム環境:
NODE_PATH=custom-modules npm start
node_modules
フォルダーが存在しないか、オーバーライドが機能しないことが重要です。ローカルnode_modules
フォルダーの優先度は よりも高くなりますNODE_PATH
。