【问题标题】:Defining defaul command run via npx定义通过 npm 运行的默认命令
【发布时间】:2021-12-16 03:04:10
【问题描述】:

我正在使用package.jsonbin 属性来定义要通过某个包启动的命令。

我有一个包,my-package,它的package.json 有这样的东西

{
  "name": "my-package",
  ....
  "main": "index.js",
  "bin": {
    "command_1": "./dist/lib/command_1.js"
  },
  ...
}

我发布了包,当我运行 npx my-package 时,我看到 command_1.js 按预期执行。

现在我添加第二个这样的命令

{
  "name": "my-package",
  ....
  "main": "index.js",
  "bin": {
    "command_1": "./dist/lib/command_1.js",
    "command_2": "./dist/lib/command_2.js",
  },
  ...
}

现在,如果我运行npx my-package,则执行的默认命令仍然是command_1.js,而如果我运行npx -p my-package command_2,我将执行command_2.js

现在我想要第三个命令command_0.js 成为要执行的默认命令。所以我尝试将command_0 定位为bin 属性中的第一个条目,如下所示

{
  "name": "my-package",
  ....
  "main": "index.js",
  "bin": {
    "command_0": "./dist/lib/command_0.js",
    "command_1": "./dist/lib/command_1.js",
    "command_2": "./dist/lib/command_2.js",
  },
  ...
}

但我看到的是默认命令仍然是command_1。所以我的问题是如何设置新的默认命令?

【问题讨论】:

  • 这只是一个猜测。 bin 是一个对象,使用 for...in 循环遍历一个对象并不能保证任何特定的顺序,也许这就是 npm 所做的。

标签: npm package.json npx


【解决方案1】:

仔细阅读the documentation,似乎设置默认命令的正确方法是在与包的无范围名称匹配的bin属性中的条目中使用。

因此,使用问题中提供的示例,package.json 应该如下所示

{
  "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",
  },
  ...
}

为了完成,文档声明“如果没有 bin 条目,或者它们都不匹配包的名称,则 npm exec 退出并出现错误”。就我而言,似乎即使 “它们(bin 条目)都不匹配包的名称” npx 没有引发错误,相反其中一个条目是没有明确的选择标准。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 2011-04-11
    • 2013-07-05
    • 2013-10-21
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    相关资源
    最近更新 更多