react-native

修改项目中 node_modules 源码

2019-12-12  本文已影响0人  Amfishers

平时项目会引用各种 npm 包,这些包能够使用,但偶尔需要更改其源码来 hotfix bug 或实现特殊需求。这时简单的方案有这几种:

第一种只是能够暂时实现,不是长远计划,就相当于后期这个包你都要去更新和维护
第二种要等待时间太久了,完全看作者的心情

其实 patch-package 就可以解决这个问题 npmjs 传送门

简单说下步骤(以 npm 为例)

  1. 安装 npm i patch-package --save-dev

  2. 在 node_modules 修改你的文件

  3. 修改完成之后,运行 npx patch-package package-name 为 node_modules 包的名字。 等待之后就会在根目录生成 patches 文件

    image.png
  4. 在 package.json 的 "scripts": { } 添加

"postinstall": "patch-package"

完成以上步骤之后,再次运行 npm i && npm run dev 项目跑通之后,修改的代码就已经被运行了

把 patches 提交到仓库之后,一般生成环境 ci 都会跑 npm install ,所以生产环境不用修改。

真的很方便!YES

事情没有那么简单

在测试环境部署的时候,以为美滋滋的完成。 随之部署失败的信息立马就发给我:
Npm install failed with “cannot run in wd”
感觉事情没有那么简单,一顿科学上网之后,总共有 3 个解决方法

一。

Run npm install with the --unsafe-perm flag:

npm install --unsafe-perm
二。

Add the unsafe-perm flag to your package.json:

"config": {
    "unsafe-perm":true
}
三。

在根目录添加一个 .npmrc 文件,内容为 unsafe-perm = true 实际上就是 它会注入环境变量,等效于你说有指令都加了 --unsafe-perm

关于这个 unsafe-perm 官方文档也给出一个 解释 ,实际上是为了避免 root 账号权限问题,而且之前还考虑安全性问题,但问了同事说构建机每一次都是新的实例,构建完就销毁掉了,所以应该是没有什么安全性问题

所以参考第三种方法。随之又有新的问题出现

Command not found: patch-package

明明 package.json 是有安装的,使用 npm i patch-package -D 安装
对于这个问题,作者也给出 解释

either:

It didn't occur to me that lots of people have not done that last option, so the instructions in the README won't work for them. I'll improve the README later, thanks.

因为服务器权限不知,只能用第二种方法,在 package.json 修改,并且将 patch-package 安装到 dependencies 。

经过几分钟的部署之后,终于大工告成!

参考文章:
Npm install failed with “cannot run in wd”
https://stackoverflow.com/questions/18136746/npm-install-failed-with-cannot-run-in-wd

上一篇下一篇

猜你喜欢

热点阅读