如何postinstall优雅地更改node_modules里的包

在前端开发中遇到node_modules包错误时,可以使用patch-package工具来保存和自动应用修改。安装patch-package和postinstall-postinstall,修改包内容后运行npx patch-package命令,将更改保存。将改动提交到git,其他开发者在安装依赖后也会应用这些修复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在前端项目开发中,我们经常会遇到node_modules里的包有问题,当自己手动更改成正确的后,自己没问题了,但是别人重新npm install时还会有同样的问题,那么如何将node_modules的更改保存到项目中呢,这样别人在生成依赖后能有一个正常的环境

通过:

patch-package​www.npmjs.com/package/patch-package正在上传…重新上传取消

这个包可以在npm install后按照项目里保存的更改自动修改node_modules,非常好用

使用步骤:

一.安装

可以使用npm

 npm i patch-package -D

或yarn(postinstall-postinstall 确保在yarn remove时依旧能保持更正代码)

 yarn add patch-package postinstall-postinstall

二.设置

安装完后需要给package.json设置postinstall,在安装完node_modules后会自动执行

"scripts": {   
  "postinstall": "patch-package" 
}

三.使用

  • 修改node_modules的内容
  • npx patch-package 修改的包名(执行完成后,会在项目目录生成一个文件夹,保存着此次修改的内容)
  • 通过git推到远程仓库,这样其他小伙伴也可以用了
gyp ERR! configure error gyp ERR! stack Error: EACCES: permission denied, mkdir '/root/vue/admin/node_modules/node-sass/.node-gyp' gyp ERR! System Linux 3.10.0-1160.119.1.el7.x86_64 gyp ERR! command "/root/node-v14.15.1-linux-x64/bin/node" "/root/vue/admin/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library=" gyp ERR! cwd /root/vue/admin/node_modules/node-sass gyp ERR! node -v v14.15.1 gyp ERR! node-gyp -v v8.4.1 gyp ERR! not ok Build failed with error code: 1 npm WARN notsup Unsupported engine for node-sass@9.0.0: wanted: {"node":">=16"} (current: {"node":"14.15.1","npm":"6.14.8"}) npm WARN notsup Not compatible with your version of node/npm: node-sass@9.0.0 npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@2.3.3 (node_modules/fsevents): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.3.3: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.13 (node_modules/webpack-dev-server/node_modules/fsevents): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.13 (node_modules/watchpack-chokidar2/node_modules/fsevents): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"}) npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! node-sass@9.0.0 postinstall: `node scripts/build.js` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the node-sass@9.0.0 postinstall script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! /root/.npm/_logs/2025-04-01T04_39_46_911Z-debug.log
最新发布
04-02
### 关于 `node-sass` 安装失败的原因分析 在 Linux 环境下,当尝试通过 `npm install node-sass` 命令安装依赖时,可能会遇到诸如 `gyp ERR! stack Error: EACCES: permission denied` 的错误。这通常是由以下几个原因引起的: 1. **权限不足**:如果当前用户没有足够的权限访问某些文件夹或执行特定操作,则会触发此错误[^1]。 2. **Node.js 版本不兼容**:`node-sass` 对应的二进制文件可能无法支持所使用的 Node.js 版本。这种情况下,即使解决了权限问题,仍然会出现编译失败的情况。 #### 权限问题解决方案 为了规避因权限不足引发的错误,可以采取以下措施之一来解决问题: - 使用 `--unsafe-perm=true` 参数重新运行命令以允许 npm 在 root 用户模式下安全地处理脚本: ```bash sudo npm install --unsafe-perm=true node-sass ``` - 或者更改全局配置路径到用户的本地目录从而避免使用超级管理员权限: ```bash npm config set prefix ~/.npm-global export PATH=~/.npm-global/bin:$PATH source ~/.profile ``` #### 节点版本适配调整策略 针对节点环境与库之间可能存在冲突的情形,推荐如下几种方式予以应对: - 利用 nvm 工具切换至官方文档建议范围内稳定版次号数接近但不超过最高限定值的 JavaScript 运行时引擎实例; ```bash nvm install 14 && nvm use 14 ``` - 替代方案考虑采用 dart-sass (纯 JS 实现),它无需额外构建过程即可无缝工作于任何现代 js 平台之上而不会遭遇上述困境影响项目进度效率等方面表现优异得多相对而言更加可靠长久维护下去也更简单方便快捷省心不少麻烦事儿呢!具体做法如下所示代码片段形式呈现出来供大家参考学习借鉴模仿实践应用起来吧朋友们😊: ```javascript const sass = require('dart-sass'); module.exports = function(grunt){ grunt.loadNpmTasks('grunt-sass'); // Project configuration. grunt.initConfig({ sass: { dist: { options: { implementation: sass }, files: {'css/main.css': 'scss/main.scss'} } } }); grunt.registerTask('default', ['sass']); }; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值