如何设置npx运行npm包时触发的默认执行命令
如何修改npm包bin字段的默认执行命令
问题原因
调整bin对象内的键顺序无法生效,是因为npx的默认命令匹配逻辑不会参考bin对象的键排序,你之前多命令场景下仍默认执行command_1属于单命令配置遗留的缓存匹配逻辑,不是npm的标准行为。
解决方法
npm明确规定,当你需要npx <包名>可以直接执行指定默认命令时,只需在bin对象中添加一个和包名完全同名的key,指向你要作为默认入口的文件即可。
针对你的场景,修改package.json的bin字段如下即可:
{ "name": "my-package", .... "main": "index.js", "bin": { "my-package": "./dist/lib/command_0.js", "command_0": "./dist/lib/command_0.js", "command_1": "./dist/lib/command_1.js", "command_2": "./dist/lib/command_2.js" }, ... }
配置完成后对应的执行逻辑为:
- 运行
npx my-package默认执行command_0.js - 运行
npx -p my-package command_0、npx -p my-package command_1、npx -p my-package command_2仍然可以单独调用对应命令
注意事项
- 配置更新后需要重新发布npm包,才会对新安装的用户生效
- 本地测试时如果发现配置不生效,可以执行
npx --clear清除npx本地缓存后再重试 - 所有bin指向的JS文件头部需要添加
#!/usr/bin/env node声明,否则执行时可能出现权限或解析错误
内容的提问来源于stack exchange,提问作者Picci
相关产品推荐
相关产品推荐

