使用 postinstall 和 git 覆盖子模块
“ npm 方式”需要特定的提交(或版本/标签)才能从 git 存储库安装包,有关 npm install 的更多信息。我通常会创建一个自定义分支并推送它,所以我希望能够克隆一个自定义分支来测试特定功能或只留下 master 分支。
为了覆盖一个包,我使用了npm 的postinstall 钩子。
postinstall
我在 in 中添加了一个脚本package.json
:
"scripts": {
"postinstall": "./postinstall.sh",
"start": "node index.js"
},
然后我使用 bash 脚本 ( postinstall.sh
) 删除包并从 github 克隆它们:
#!/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
会再次调用以重新覆盖 pacakge。
如果我更换机器并且我已经获得了自定义包的本地版本,那么调用yarn
将从存储库中提取并覆盖 pacakge。
PS。npm install
也可以,但yarn
速度要快一些。
用于测试目的的多个环境
这是一个不同的想法,但有时我用它来测试不同的配置。也许人们会发现它很有用,或者如果有人知道这样做的工具或东西,请告诉我。
在本地,我为此创建了两个不同的文件夹node_modules
:
首先是原始模块:
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
标志:
当我对custom-modules
文件夹感到满意时,我可以使用NODE_PATH在这样的环境之间切换:
对于普通环境:
NODE_PATH=original-modules npm start
自定义环境:
NODE_PATH=custom-modules npm start
重要的是该node_modules
文件夹不存在或覆盖将不起作用,本地node_modules
文件夹的优先级高于NODE_PATH
.