咨询:已知npm与npx差异,何时应选用npx --no-install而非npm
npx --no-install 而非 npm npx --no-install 的核心特性是:强制仅查找本地已安装的包,找不到就直接报错,完全不会触发自动安装。以下是适合用它替代npm的场景:
锁定团队工具版本,避免不一致
团队项目里通常会在package.json中指定依赖工具的固定版本(比如eslint@8.50.0)。如果直接用npx eslint,它可能会自动安装最新版eslint,导致和项目配置冲突。而npx --no-install eslint会只找本地node_modules里的版本,找不到就报错,提醒你先执行npm install安装项目约定的版本,保证所有人用的工具版本一致。防止误装未知/恶意包
有些包名可能和你常用的本地工具重名,或者你不确定某个包的安全性。用npx --no-install <包名>的话,只有本地已经安装过的包才会被运行,不会去npm仓库拉取任何新包,从根源避免误装恶意包或者不兼容的陌生包。测试本地开发的npm包
如果你自己开发了一个npm包,已经通过npm link关联到本地项目或者全局,用npx --no-install my-local-package可以确保运行的是你本地正在开发的版本,而不会去npm仓库拉取同名的线上包,方便你快速测试本地代码的效果。离线环境下直接调用本地工具
当处于无网络环境时,npm无法安装新包,但如果本地node_modules里已经有需要的工具,npx --no-install <工具名>可以直接运行该工具的二进制文件,无需依赖npm run(后者需要在package.json的scripts里预先配置命令),更灵活。无需配置scripts,直接调用本地工具
如果你只是偶尔需要调用某个本地依赖的工具(比如webpack-cli),不想在package.json的scripts里新增一条命令,用npx --no-install webpack-cli就能直接运行,比npm run更轻量化,也不用维护额外的脚本配置。
内容的提问来源于stack exchange,提问作者kako

