npm install与npm install --save的区别及--save含义解析
npm install vs npm install --save:区别与--save的含义
嘿,这个问题绝对是前端新手入门npm时的高频疑问,我来给你讲得明明白白~
核心区别(分版本看)
其实两者的差异主要和npm的版本有关:
- npm 5.0.0之前:
npm install 包名:仅将包下载到项目的node_modules目录中,但不会把这个包的信息写入package.json的dependencies字段。这意味着如果别人拿到你的项目(没有node_modules),运行npm install时不会自动安装这个包,因为package.json里没记录。npm install --save 包名:在下载包到node_modules的同时,会把该包的名称和版本号添加到package.json的dependencies里。这样项目的依赖就被“存档”了,其他人或部署环境能通过package.json还原所有依赖。
- npm 5.0.0及之后:
官方直接把--save设为默认行为!也就是说现在你敲npm install 包名,效果和原来的npm install --save 包名完全一样——既下载包,又自动写入package.json的dependencies。这时候两者没有任何区别了。
--save参数的具体含义
--save的核心作用就是标记包为项目的「生产依赖」:
- 生产依赖指的是项目在上线运行阶段必须依赖的包,比如React、Vue这类框架,或者axios、lodash这类业务代码里直接用到的工具库。没有这些包,项目根本跑不起来。
- 把依赖写入
package.json后,相当于给项目做了一份“依赖清单”:- 团队协作时,同事拿到项目只需要执行
npm install,就能一键安装所有清单里的包,不用一个个手动装; - 部署到服务器时,也不需要上传体积庞大的
node_modules,只传package.json和package-lock.json,服务器执行npm install就能快速搭建相同的依赖环境。
- 团队协作时,同事拿到项目只需要执行
补充:别搞混--save和--save-dev
顺便提一句,和--save对应的还有--save-dev(简写-D),它是用来安装开发依赖的——也就是只在开发阶段用到的工具,比如webpack、eslint、babel这些,项目上线后就不需要它们了。这类依赖会被写入package.json的devDependencies字段,和生产依赖区分开,能让依赖结构更清晰。
内容的提问来源于stack exchange,提问作者HamzaAhmed




