Yarn 2 PNP环境下如何运行依赖包中的bin脚本?
在Yarn 2 PnP环境中运行已安装依赖的Bin脚本
问题背景
我有一个自定义依赖,其package.json中注册了如下bin脚本:
// package.json 中的 bin 配置 "bin": { "test123": "./scripts/testtest.js" }
该脚本仅执行console.log输出。在依赖库内部,我可通过yarn run test123执行该脚本并得到输出。
现在我将这个依赖库引入项目,在package.json中注册了其最新版本。使用Yarn 2及Plug n Play(无node_modules目录),我想在项目终端中运行该脚本,但尝试yarn dlx @my/library test123时出现错误:Binary not found (library) for root-workspace-0b6124(其中错误中的“library”是@my/library中/后的部分),同时执行yarn info @my/library可见该二进制脚本已暴露。
解决方法
方法1:直接调用脚本名
依赖已安装到项目后,直接在终端执行:
yarn test123
Yarn 2的PnP机制会自动定位到已安装依赖中暴露的test123脚本并执行。
方法2:使用yarn exec明确执行
如果需要避免脚本名冲突,或者要指定依赖来源,可使用yarn exec:
yarn exec test123
也可以显式指定依赖包:
yarn exec --package @my/library test123
关于yarn dlx的误区
yarn dlx的作用是临时安装指定包并执行其命令,不适用于已安装到项目中的依赖场景。且其正确用法是直接调用包的bin命令,而非包名加命令,所以你之前的写法会导致Yarn错误地查找包内名为library的二进制文件,从而报错。
内容的提问来源于stack exchange,提问作者Materno
相关产品推荐
相关产品推荐

