如何在其中的包中指定的纱线工作区中安装可执行文件?
Posted
技术标签:
【中文标题】如何在其中的包中指定的纱线工作区中安装可执行文件?【英文标题】:How to install an executable in yarn workspace that is specified in a package inside of it? 【发布时间】:2021-10-09 01:53:21 【问题描述】:给出以下文件夹结构和文件:
.
├── 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
设置,其中在工作区包中指定了一个可执行文件(scripts/package.json
中的"bin"
)。
执行./hello-world.js
工作得很好(之前的chmod +x hello-world.js
)。
问题
是否可以在工作区本身中安装此可执行文件?
(分解:我想从工作区的任何地方执行脚本,例如使用npx hello-world
)
【问题讨论】:
如果您将 package.json 中带有bin
键的脚本添加到工作区文件夹中,您将能够通过 yarn hello-world
或 npm run hello-world
使用它
但是在这种情况下你的哈希爆炸应该是#!/usr/bin/env node
【参考方案1】:
就像我在 cmets 中所说的,你在这里得到的几乎是完整的。 您的文件名中确实有错字,但我认为这是您将其复制到 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")
在根文件夹中运行 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 脚本,但您也可以通过在项目中的任何位置运行 yarn hello-world
来执行 bin。
【讨论】:
哇,乍一看这不起作用,因为我需要先删除node_modules
并运行 yarn install
。似乎yarn install
没有获取在package.json
的bin
部分中指定的文件更改。有没有办法告诉yarn
也检查bin
文件是否已更改?此外,我实际上在我的脚本中使用了#!/usr/bin/env -S npx esr
或#!/usr/bin/env -S npx ts-node
。真的没有办法用npx
执行脚本吗?这里还有其他选择吗?我想让所有开发人员的这个过程变得非常简单,而不需要任何令人生畏的额外步骤。
我对 npx 了解不够,但据我了解,它是用来获取未安装的东西的。运行 npm 脚本比运行 npx 脚本差多少?此外,如果我对hello-world.js
文件进行更改,我可以在运行yarn hello
或yarn hello-world
时立即看到这些更改。
问题不在于npx
与npm script
,而是需要全局安装cli(此处为node
或esr
或ts-cnode
)。 npx
先在当前项目中查找可执行文件,然后再全局查找。您实际上可以使用以下 hash-bang 来完成这项工作:#!npx esr
。这需要您在本地安装软件包,例如yarn add esbuild-runner esbuild
。我还注意到代码的更改会立即生效,但更改 hash-bang 需要您先删除 node_modules
然后运行 yarn install
以上是关于如何在其中的包中指定的纱线工作区中安装可执行文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 .vbs 文件保存具有在电子表格中指定的名称的文件