Ubuntu环境下NPM全局安装仍在当前目录生成node_modules的问题
行为原因
当执行不带具体包名的npm install -g命令时,npm会优先识别当前工作目录下的package.json文件,将当前目录的项目作为一个全局包安装到全局前缀路径,同时npm为了完成依赖树校验、生命周期脚本执行等内部流程,会默认在当前工作目录生成node_modules存放临时解析的依赖资源,这是npm的原生设计逻辑,和是否添加-g参数没有直接关系。而指定具体包名执行npm install -g <package>时,npm不需要处理本地项目配置,因此只会操作全局路径下的文件,不会生成本地node_modules。
解决方案
以下任意一种方案都可以避免/code目录下生成node_modules:
- 切换到无项目配置的目录执行安装
先进入/tmp这类不存在package.json的目录,再执行npm install -g /code,npm会自动读取/code/package.json的依赖列表安装到全局路径,不会在/code下生成任何文件。 - 显式指定全局前缀执行安装
直接在/code目录执行如下命令,强制所有安装操作都落到全局路径,跳过本地目录的资源生成:npm install -g --prefix $(npm prefix -g) - 全局配置npm安装规则(一劳永逸)
在用户目录的.npmrc文件中添加如下配置,后续执行不带包名的全局安装命令时,都会直接操作全局路径,不会在当前目录生成node_modules:install.prefix = /usr
内容的提问来源于stack exchange,提问作者tau
相关产品推荐
相关产品推荐

