如何让npm将Node.js模块安装到本地应用目录而非用户主目录?
解决npm将模块安装到用户主目录而非本地项目目录的问题
这个问题确实是npm版本更新带来的默认行为变化导致的,我来帮你梳理清楚解决办法:
核心原因
在较新的npm版本中,如果你的项目目录里没有package.json文件,执行npm install <package>时,npm会默认把包安装到用户主目录($HOME/node_modules),而不是当前项目目录。这和你课程里的旧版本npm行为不同——旧版本可能在没有package.json时也会强制在当前目录创建node_modules。
实现按应用隔离依赖的步骤
要让npm把模块装到本地项目目录,确保每个应用使用独立的依赖版本,只需要简单两步:
初始化项目的
package.json文件
进入你的express项目目录,执行:npm init -y-y参数会跳过所有初始化问答,直接生成默认的package.json文件。如果需要自定义项目名称、描述等信息,可以去掉-y,按提示逐步填写。安装express到本地项目目录
现在再执行安装命令:npm install express这时候你会看到项目目录里生成了
node_modules文件夹,同时package.json的dependencies字段会自动添加express的版本信息,完全实现按应用隔离依赖。
额外补充
- 如果你的
basic2项目也需要独立的express版本,只需要对它重复上面的两步操作即可,两个项目的node_modules会完全独立,不会共用同一版本依赖。 - 如果你只是临时安装某个包、不想写入
package.json,可以用npm install express --no-save,但依然会在当前项目目录创建node_modules(前提是已经有package.json,或者你手动创建了node_modules目录)。
内容的提问来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

