为什么放在node_modules中的自定义JS文件执行npm install后会丢失?
问题原因
node_modules是包管理器npm的专属托管目录,所有涉及依赖变更的npm命令(包括npm install、npm update、npm ci等)执行时,都会对照项目下的package.json、依赖锁文件的清单重整目录内容,所有没有被登记在依赖清单里的内容,都会被当做冗余文件直接清理。你手动放进去的自定义工具文件没有在依赖配置中登记,自然会在你执行新包安装操作时被删除,这类清理是直接删除不会进系统回收站的。- 按照Node.js项目的通用约定,
node_modules目录都会被加入.gitignore不被Git追踪,这个目录的设计定位就是“存放可通过包管理器完整复现的第三方依赖”,本身就不应该存放用户自己编写的业务/工具代码,所以文件被删后也无法通过版本记录找回。
解决方案
- 单项目使用场景:直接把自定义工具库移出
node_modules,在项目源码目录下新建专门的工具文件夹比如utils/存放这类自己写的公共方法,引入时用相对路径即可,示例:const tool = require('./utils/my-custom-lib')。自己写的项目源码和第三方依赖分开存放是最基础的项目结构规范,这部分代码会被Git正常追踪,也完全不会被npm的操作影响。 - 多项目复用场景:如果这个工具库需要在多个项目里用,可以把它做成独立的本地包,不需要发布到公共npm源:
- 先在你的工具库文件夹下执行
npm init,按提示完成包初始化; - 回到需要使用这个工具库的项目目录,执行
npm install 你的工具库所在的本地绝对路径,npm会自动把这个本地包登记到项目的依赖清单里,后续执行npm相关操作时就不会误删它,引入时和其他第三方依赖一样直接写包名即可。
- 先在你的工具库文件夹下执行
- 核心原则:永远不要手动往
node_modules里添加、修改任何内容,这个目录的所有内容都应该完全交给包管理器管理,任何手动改动在下次依赖变更操作时都有丢失的可能。
内容的提问来源于stack exchange,提问作者Olivinism
相关产品推荐
相关产品推荐

