如何使用 npm 本地包的可执行文件
npm 本地安装包的可执行文件位于 node_modules/.bin/ 目录。调用方式:npx <命令>(推荐)、./node_modules/.bin/<命令>,或在 package.json 的 scripts 中直接使用(npm 自动把 .bin 加入 PATH)。
本地安装(不带 -g)的 npm 包如果提供命令行工具,可执行文件会链接到 node_modules/.bin/ 目录。 三种调用方式:① npx eslint .(最推荐,自动查找 .bin);② 在 npm scripts 里直接写命令名(npm 运行时自动把 .bin 加进 PATH);③ 显式路径 ./node_modules/.bin/eslint .。
三种方式详解
npm install --save-dev eslint # 本地安装
npx eslint . # 方式一:npx 自动定位
./node_modules/.bin/eslint . # 方式二:显式路径
{
"scripts": {
"lint": "eslint .",
"test": "mocha"
}
}
方式三最常用——scripts 里的 eslint 会被解析到 .bin/eslint,npm run lint 就能跑。
为什么不全局安装
- 版本可复现:每个项目锁死自己的工具版本,换机器
npm install即用; - 避免全局污染:不同项目可以用同一工具的不同版本;
- CI 友好:流水线里
npm ci && npm test无需额外全局安装步骤。
npx 的高级用法
npx eslint@8 . # 指定版本运行
npx create-react-app x # 不安装直接跑一次性脚手架(下载到缓存执行)
npx 的查找顺序:本地 .bin → $PATH → 临时下载。所以同名工具本地版本永远优先。
常见问题(FAQ)
Q:怎么查看一个包提供了哪些可执行文件?
看包的 package.json 里的 bin 字段,或直接 ls node_modules/.bin/。一个包可以提供多个命令(如 mocha 提供 mocha 和 _mocha)。
Q:.bin 目录里是什么?
符号链接(Windows 是 .cmd shim),指向包的实际入口脚本。删除 node_modules 后它们随之消失,npm install 时按 bin 字段重建。
Q:monorepo 里 .bin 在哪?
npm/pnpm workspaces 会把依赖提升到根 node_modules,可执行文件统一在根的 .bin/。在子包目录运行 npx 也会向上查找,通常无需特殊处理。