如何从根目录执行子目录package.json中的yarn/npm脚本?
解决方案
方法1:正确使用yarn的--cwd参数
你之前用--cwd没达到预期是因为缺少run命令,正确用法是在根目录的package.json里定义一个通用入口脚本:
{ "scripts": { "website": "yarn --cwd website run" } }
之后执行网站的任意脚本时,只需要在命令后追加对应指令即可:
- 启动开发服务器:
yarn website start - 构建生产版本:
yarn website build - 部署站点:
yarn website deploy
这种方式不需要重复定义每个子脚本,一个入口就能覆盖所有需求。
方法2:用Shell位置参数简化调用
如果不想依赖yarn的--cwd参数,也可以通过Shell位置参数传递命令:
{ "scripts": { "website": "cd website && yarn $1" } }
执行逻辑和方法1完全一致,比如yarn website start就能触发网站目录下的start脚本,这种写法对npm等其他包管理器兼容性更好,只需把yarn替换成对应命令即可。
方法3:将website纳入monorepo workspace(可选)
如果允许把website目录加入monorepo的workspace管理范围,可以修改根目录package.json的workspaces配置:
{ "workspaces": [ "packages/*", "website" ] }
之后就能直接用yarn的workspace命令调用网站脚本:
yarn workspace website startyarn workspace website build
这种方式的优势是可以统一管理所有包的依赖,但需要确认website的依赖不会和monorepo内其他包产生冲突。
内容的提问来源于stack exchange,提问作者Jake Boone
相关产品推荐
相关产品推荐

