Yarn 2:如何从 `node_modules/.bin` 目录运行脚本?

Posted

技术标签:

【中文标题】Yarn 2:如何从 `node_modules/.bin` 目录运行脚本?【英文标题】:Yarn 2 : how to run a script from the `node_modules/.bin` directory? 【发布时间】:2021-12-03 17:50:54 【问题描述】:

如何使用 Yarn 2 从 node_modules/.bin 目录运行脚本?

示例

假设我需要运行位于该目录中的“eslint”脚本

node_modules
├── .bin
│   ├── eslint

使用 NPM,我可以运行 npx eslint 来运行可执行文件。如何使用 Yarn 2 实现这一目标?

【问题讨论】:

【参考方案1】:

和以前的经典 Yarn 一样,运行这个:

yarn eslint

参考:https://yarnpkg.com/cli/run#details

此命令将运行一个工具。将执行的确切工具将取决于您工作区的当前状态:

如果本地 package.json 中的 scripts 字段包含匹配的脚本名称,则会执行其定义。

否则,如果本地工作区的依赖项之一公开了具有匹配名称的二进制文件,则该二进制文件将被执行。

否则,如果指定的名称包含冒号字符,并且项目中的工作区之一恰好包含一个具有匹配名称的脚本,则该脚本将被执行。

如果您想忽略任何用户定义的脚本而只检查二进制文件,您可以传递-B option。


还有yarn exec

yarn exec eslint

【讨论】:

此命令不适用。 package.json 中的脚本将在名称冲突的情况下优先。第二个列表项中提到的二进制文件不是位于 node_modules/.bin 中的二进制文件 @Backslash36 那么yarn exec eslint 呢?顺便说一句,在yarn run 中,您可以通过-B忽略任何用户定义的脚本并只检查二进制文件 yarn exec 成功了!我希望文档更清楚地说明可以使用此命令全局访问 node_modules 二进制文件。

以上是关于Yarn 2:如何从 `node_modules/.bin` 目录运行脚本?的主要内容,如果未能解决你的问题,请参考以下文章

你好 Yarn 2,再见 node_modules

我如何直接将“node_modules”与“yarn berry”一起使用

Yarn Workspace,如何排除 node_modules 中的包文件?

升级Yarn 2,大规模瘦身node_modules

错误 npm failed with exit code 2 错误:命令失败:node_modules/.bin/vsce package --no-yarn

npm,yarn和pnpm