修改node_modules中的NPM包代码不生效该如何解决?
问题原因
绝大多数NPM包发布前会将src目录的源码编译压缩为可直接执行的dist产物,包根目录的package.json中main/module字段会明确指向dist目录的入口文件,Webpack(Laravel Mix底层)加载依赖时只会读取入口字段指定的文件,和src目录完全无关,所以修改src不会生效。
快速解决方法
不需要Fork整个仓库,有更轻量化的方案可选:
- 临时测试方案:直接修改
node_modules/对应包/dist目录下的对应代码,修改完成后重新执行Laravel Mix构建,改动即可生效。该方法的问题是重新执行yarn install后改动会被覆盖。 - 自行编译包源码方案:如果已经修改了
src目录的代码,可以进入node_modules/对应包目录,执行以下操作:- 执行
npm install安装该包自身的开发依赖 - 查看该包
package.json的scripts字段找到构建命令,一般为npm run build,执行后即可将src的改动编译到dist目录
- 执行
- 持久化补丁方案(推荐):使用
patch-package工具固化你的改动,避免每次重装依赖重复修改:- 执行命令安装工具:
yarn add patch-package postinstall-postinstall --dev - 完成对
node_modules内对应包的修改(直接改dist或者自行编译完dist均可) - 执行
yarn patch-package <你修改的包名>,会自动在项目根目录生成patches文件夹存储补丁文件 - 在你项目的
package.json的scripts字段中添加配置:"postinstall": "patch-package",后续每次执行yarn install都会自动打上你的自定义补丁
- 执行命令安装工具:
备选方案
如果改动量较大,可以将该NPM包的完整代码拷贝到你项目的src目录下,将项目中所有引入该包的路径修改为本地拷贝的路径,后续直接修改本地拷贝的代码即可,不需要额外工具。
内容的提问来源于stack exchange,提问作者Joey Carlisle
相关产品推荐
相关产品推荐

