如何从本地目录全局安装npm包并正确安装所有依赖
本地全局安装npm包缺失依赖的解决方法
问题说明
- 公共工具
csso-cli常规全局安装命令为npm install -g csso-cli,安装完成后可直接全局调用 - 为定制工具功能、将其依赖
csso升级到新版本使用最新特性,克隆项目源码仓库后,在项目根目录执行npm install -g ./尝试全局安装本地修改后的版本 - 执行后本地代码目录确实被复制到npm全局安装路径,但路径下不存在
node_modules子目录,所有必需依赖均未安装,工具无法正常运行 - 目标是实现和公共仓库安装完全一致的效果:从本地目录安装npm包时自动安装所有外部依赖,确认是否需要先生成特定包文件再执行安装
解决方案
按使用场景选择对应方法即可:
方法1:打包为tgz压缩包后安装(最接近官方安装效果)
该方式和从npm公共仓库安装的逻辑完全一致,不会出现行为差异:
- 在修改完成的项目根目录执行
npm pack,命令执行完成后会在当前目录生成名为<包名>-<版本号>.tgz的压缩包,和npm仓库分发的包格式完全相同 - 执行全局安装命令指向生成的压缩包,例如
npm install -g ./csso-cli-3.0.0.tgz(将文件名替换为本地实际生成的文件名)
执行后npm会自动解析包内的依赖声明,安装所有生产依赖,和远程安装的效果没有区别。
方法2:使用--install-links参数直接安装本地目录(适合npm 7+版本)
如果你的npm版本为7及以上,可以直接加参数跳过默认的软链接逻辑:
在项目根目录直接执行npm install -g ./ --install-links
该参数会告知npm不要为本地目录创建全局软链接,而是像处理远程包一样将文件复制到全局安装路径,同时自动安装所有声明的生产依赖。
方法3:本地安装依赖后创建全局链接(适合开发调试场景)
如果需要频繁修改代码测试,不需要每次修改后重新打包,可以用软链接方式:
- 在项目根目录执行
npm install --production,将所有生产依赖安装到本地项目的node_modules目录 - 执行
npm link,命令会在npm全局路径下创建指向当前本地项目的符号链接,同时注册全局可执行命令
该方式下修改本地代码后不需要重新安装,直接调用全局命令即可生效,注意不要删除本地项目目录,否则全局链接会失效。
注意:全局安装npm包时,默认只会安装
package.json中dependencies字段下声明的生产依赖,devDependencies下的开发依赖不会被安装,定制时请确认需要的依赖都写在dependencies字段中,否则依然会出现依赖缺失问题。
内容的提问来源于stack exchange,提问作者ygoe
相关产品推荐
相关产品推荐

