fork方式
流程
- github上fork此代码
- 修正问题
- 提交pull request (可省略,但是有必要)
- npm i git+https://github.com/项目地址.git#分支名称
问题
- 多个包依赖被fork的包有几率安装的不是你的包
- github国内访问很慢
- 效率有点慢
优点
- 修改包的话,本地代码不用调整,项目很干净
postinstall原生方式
流程
- 手动把修改完的文件复制到一个目录比如postinstall
- postinstall/index.js写入覆盖文件脚本
const shell = require('shelljs');
const baseDir = __dirname;
shell.cp('-f', baseDir + '/pomelo/starter.js', baseDir + '/../node_modules/pomelo/lib/master/');
- package.json加入执行脚本
"scripts": {
"postinstall": "node postinstall"
},
- 代码检查目录比如.eslintignore加入
**/postinstall/*
问题
- 如果修改文件多的话,本地会保存一堆js文件,项目工程变大比较快
优点
- 简单粗暴,方便魔改代码
开源包patch-package
流程
- 安装 npm i patch-package
- 在 node_modules 修改你的文件
- 运行 npx patch-package package-name为node_modules包的名字。等待之后就会在根目录生成 patches 文件
- git关联上传即可
- package.json加入执行脚本
"scripts": {
"postinstall": "npx patch-package"
},
- 在根目录添加一个
.npmrc
文件,内容为unsafe-perm = true
注入环境变量,等效于所有指令都加了--unsafe-perm
关于unsafe-perm 官方文档解释 ,
问题
- 代码跟踪起来比较麻烦
优点
- 相对postinstall原生方式项目大小变更较慢
- 快速方便,工业化
补充
cannot run in wd同root账号postinstall不能执行问题
- package.json
"config": {
"unsafe-perm": true
},
- 方式一:写脚本npm-install.sh代替无脑npm i,统一sh npm-install.sh
npm install --unsafe-perm
2.方式二:在根目录添加一个 .npmrc
文件,内容为 unsafe-perm = true
注入环境变量,等效于所有指令都加了--unsafe-perm
关于unsafe-perm 官方文档解释 ,
patch-package: command not found问题
"postinstall": "npx patch-package"
后续
- 一切都有局限性,一旦你要更新的package需要更新package.json很无解