You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遵循DRY原则实现npm脚本的工作目录切换

解决方案

方案1:抽离公共路径到package.json config字段(推荐,改动最小)

npm会自动将package.json内的字段注入为脚本执行时的环境变量,你可以把公共路径单独定义在config块,全局只需要维护这一处路径:

{
  "name": "your-project",
  "config": {
    "workDir": "src/path/to/my/work/dir/"
  },
  "scripts": {
    "task:1": "cd $npm_package_config_workDir && command1",
    "task:2": "cd $npm_package_config_workDir && command2"
  }
}
  • 类Unix系统(macOS/Linux/WSL):直接用$npm_package_config_workDir调用变量即可
  • Windows cmd环境:将变量写法替换为%npm_package_config_workDir%
  • 跨平台兼容需求:安装轻量工具cross-var,脚本写法改为cross-var cd $npm_package_config_workDir && command1即可兼容所有系统

方案2:封装统一执行入口(零重复,适合多任务场景)

如果你的任务数量很多,不想给每个任务加cd前缀,可以封装一个公共的执行脚本,利用npm内置的$INIT_CWD变量定位项目根目录的package.json:

{
  "scripts": {
    "exec": "cd src/path/to/my/work/dir/ && npm run --prefix $INIT_CWD",
    "task:1": "command1",
    "task:2": "command2"
  }
}

执行任务时用npm run exec -- task:1的格式调用即可,路径修改只需要调整exec脚本里的cd路径,所有任务本身完全不用改动。

补充说明

你最开始的方案失效是因为每执行一次npm run都会启动独立的shell子进程,子进程的工作目录修改不会传递到其他进程,所以分开写的cd脚本无法对后续任务生效。

内容的提问来源于stack exchange,提问作者Sven

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 23:36:02