node包有多个bin的时候,npx执行的是哪个bin呢?
我们以 npx test-cli 为例,
一、执行node_modules/.bin/xxx
首先,它会去当前开发目录的node_modules/.bin下去找test-cli的同名可执行文件。项目依赖包里含有bin配置,则会在node_modules/.bin创建可执行文件。
二、执行$PATH/xxx
如果1找不到,则去全局安装的环境变量$PATH里去找同名的可执行文件,全局安装的npm包的bin配置,会在$PATH里创建可执行文件。
执行npm包的主bin
如果都找不到同名的可执行文件,则执行npm包的主bin
什么是npm包的主bin
当 package.json 中 bin字段对象中有多条 key:value 时,key值 和 name字段的 value值 相同时, 命令 key 为 主bin;
{
"name": "test-cli",
"bin": {
"test-cli": "./cli.js",
"test1": "./cli1.js"
}
}
// 主bin 为 test-pkg 指向的js文件
当 package.json 中 bin字段对象中只有一条 key:value 时, 此时这一条命令 key 为 主bin;
{
"name": "test-cli",
"bin": {
"test1": "./cli1.js"
}
}
// 主bin 为 test1 指向的js文件
当 package.json 中 bin字段 的 value值为一个指向执行文件的路径字符串时,bin即为 主bin;
{
"name": "test-cli",
"bin": "./cli.js"
}
// 主bin 为 bin 指向的js文件
当 bin 字段对象中有多个 key:value, 并且没有 key值 等于 package.json 中的 name 字段值时,会按照位置排名选出 主bin 命令;
{
"name": "test-cli",
"bin":
{
"b": "./b.js",
"a": "./a.js",
}
}
// 主bin 为 b 指向的js文件