【问题标题】:How can I execute a bin with yarn?如何使用纱线执行 bin?
【发布时间】:2021-07-21 15:37:43
【问题描述】:

我有以下 package.json,我想运行 bin“build”和“run”:

{
  "name":    "simple-site",
  "version": "0.0.5",
  "license": "MIT",
  "bin": {
    "build": "./bin/build.js",
    "dev":   "./bin/dev.js"
  }
}

我试过了:

yarn run build

我明白了

error Command "build" not found.

我也试过了:

yarn build

但同样的事情发生了:

error Command "build" not found.

这可能不是运行垃圾箱的正确方法。但话又说回来,用 yarn 运行 bin 的正确方法是什么?

【问题讨论】:

    标签: node.js yarnpkg


    【解决方案1】:

    你的包没有安装。

    当 Yarn(和 NPM)安装你的包时,它会在 node_modules/.bin/ 下添加命令,例如node_modules/.bin/build。运行yarn build 将(如果它在当前包中没有找到匹配的脚本)在这个.bin 中查找build,然后向上遍历文件系统,寻找其他node_modules/.bin/build

    如果您的构建脚本仅在开发该特定包时运行,请将其添加为脚本(参见示例here)。它或多或少看起来像这样:

    {
      "name":    "simple-site",
      "version": "0.0.5",
      "license": "MIT",
      "scripts": {
        "build": "node ./bin/build.js",
        "dev":   "node ./bin/dev.js"
      }
    }
    

    【讨论】:

    • 是的,我明白这一点。我需要 bin/build.js 和 bin/dev.js 在另一个应用程序中可用。我曾期望可以在某种程度上将 bin 文件作为 bin 文件运行。当然,我可以将它们作为脚本运行。但是,如果我的 bin 路径中有错字或名称错误怎么办。这是一个简单的例子,但在我的项目中,我最终可能会在 bin 目录中添加一些文件。
    • 应该有一种方法来调用 bin 目录中的文件,它们是由使用模块作为依赖项的应用程序调用的。我不必等到模块作为依赖项安装在另一个应用程序中时才发现我拼错了文件名,忘记了斜杠、破折号等等。我不确定,你明白我的意思。但我理解您的回答:除非将它们安装在另一个应用程序中,否则无法检查 bin 条目。
    • 您可以同时拥有scriptsbin。当在包中使用yarn build 时,Yarn 将使用脚本,而当包安装在另一个包中时,yarn build 将在那里使用bin 版本。小提示:builddev 是非常常见的脚本名称,原因很明显,所以要小心。
    【解决方案2】:

    不需要添加相对路径:

    {
        "name":    "simple-site",
        "version": "0.0.5",
        "license": "MIT",
        "scripts": {
          "build": "build.js",
          "dev":   "dev.js"
        }
    }
    

    hashbang 注释指定了您要用于执行脚本的特定 JavaScript 解释器的路径。

    例如 ./node_modules/.bin 中的 helloWorld.js:

    #!/usr/bin/env node
    
    console.log("Hello world");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-06
      • 1970-01-01
      • 2017-08-27
      • 2021-09-16
      • 2021-11-09
      相关资源
      最近更新 更多