无需全局安装npm包即可使用其配置的bin命令的实现方案
解决方案
完全不需要拆分包,你当前的package.json bin字段配置本身是符合规范的,本地安装后无法直接调用只是因为终端默认的PATH环境变量没有包含项目本地的node_modules/.bin目录而已,可通过以下几种方式直接调用:
- 使用
npx调用:直接在项目根目录执行npx mycommand <someargs>即可,npx会自动检索当前项目node_modules/.bin下的可执行文件,无需额外配置。 - 配置项目npm脚本调用:在上层项目的
package.json的scripts字段中直接写命令即可,示例配置如下:
配置完成后执行{ "scripts": { "exec-mycmd": "mycommand <someargs>" } }npm run exec-mycmd就能正常调用,npm执行脚本时会自动将本地node_modules/.bin加入临时PATH,所以可以识别到你配置的bin命令。 - 临时添加PATH实现终端直接调用:如果想在当前终端会话中直接输入
mycommand就调用本地版本,可执行命令临时修改PATH:- macOS/Linux终端:
export PATH=./node_modules/.bin:$PATH - Windows PowerShell:
$env:Path = "./node_modules/.bin;" + $env:Path
- macOS/Linux终端:
目前市面上大量成熟npm包(比如eslint、prettier等)都采用了同个包同时暴露可导入API和CLI命令的模式,完全不需要拆分为多个独立包。
内容的提问来源于stack exchange,提问作者Konrad Koschel
相关产品推荐
相关产品推荐

