使用 postinstall 和 git 覆盖子模块
“npm 方式”需要特定的提交(或版本/标签)才能从 git 存储库 more info on npm install 安装包。我通常会创建一个自定义分支并推送它,因此我希望能够克隆一个自定义分支以测试特定功能或仅保留 master。
要覆盖一个包,我使用了 npm 的 postinstall hook 钩子。
我在package.json中添加了一个脚本到postinstall:
"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
如果我在 custom_modules\mypackage 的本地 git 存储库上进行一些本地更改,我会再次调用 yarn 以重新覆盖 pacakge。
如果我更换机器并且我已经获得了自定义包的本地版本,那么调用 yarn 将从存储库中提取并覆盖 pacakge。
PS。 npm install 也可以,但yarn 快一点。
用于测试目的的多个环境
这是一个不同的想法,但有时我用它来测试不同的配置。也许人们会发现它很有用,或者如果有人知道这样做的工具或东西,请告诉我。
我在本地为node_modules 创建了两个不同的文件夹,如下所示:
首先是原始模块:
yarn --modules-folder=original-modules
标志:
-
--modules-folder <path> 不是将模块安装到相对于 cwd 的 node_modules 文件夹中,而是在此处输出。
然后对于自定义的,我可以简单地复制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。