如何在其中的包中指定的 yarn 工作区中安装可执行文件?

How to install an executable in yarn workspace that is specified in a package inside of it?

给出了以下文件夹结构和文件:

.
├── package.json
└── scripts
    ├── hello-word.js
    └── package.json
// package.json
{
  "name": "yarn-bin",
  "version": "1.0.0",
  "private": true,
  "license": "ISC",
  "workspaces": [
    "scripts"
  ]
}
// scripts/package.json
{
  "name": "@yarn-bin/scripts",
  "version": "1.0.0",
  "license": "ISC",
  "bin": {
    "hello-world": "./hello-world.js"
  }
}
// scripts/hello-world.js
#!/usr/bin/env -S npx node

console.log("Hello World")

这是一个非常简单的 yarn workspace 设置,其中在工作区包中指定可执行文件("bin" in scripts/package.json)。 执行 ./hello-world.js 工作正常(在 chmod +x hello-world.js 之前)。

问题

是否可以在工作区本身中安装此可执行文件?

(分解:我想从工作区的任何地方执行脚本,例如 npx hello-world

就像我在评论中所说的,你在这里得到的几乎完成了。 您的文件名中确实有错字,但我认为这是您将其复制到 SO 时发生的错字。 我确实更改了 hash bang 以确保您 运行 通过节点。

您不能通过 npx 运行 因为 npx 将联机并查看注册表。

.
├── package.json
└── scripts
    ├── hello-world.js # not "hello-word.js"
    └── package.json

根目录 package.json:

{
  "name": "yarn-bin",
  "version": "1.0.0",
  "private": true,
  "license": "ISC",
  "scripts": {
    "hello": "yarn hello-world"
  },
  "workspaces": [
    "scripts"
  ]
}

scripts/package.json

{
  "name": "@yarn-bin/scripts",
  "version": "1.0.0",
  "license": "ISC",
  "bin": {
    "hello-world": "./hello-world.js"
  }
}

script/hello-world.js

#!/usr/bin/env node

console.log("Hello World")

使用该设置 运行ning yarn hello 在根文件夹中将产生:

$ yarn hello
yarn run v1.22.10
$ yarn hello-world
$ /path/to/folder/node_modules/.bin/hello-world
Hello World
✨  Done in 0.25s.

虽然我在根 package.json 中添加了一个 npm 脚本,但您也可以通过 运行ning yarn hello-world 在项目中的任何位置执行 bins。