【问题标题】:DRY way to change working directory for npm scripts更改 npm 脚本工作目录的 DRY 方法
【发布时间】:2021-11-24 04:03:19
【问题描述】:

我只是在尝试将 NPM 作为我的一个小项目的构建系统,我想问一下是否有一种干净且易于维护的方法来更改构建脚本的工作目录。我的第一个想法是这样的

"scripts": {
    "cd:workdir": "cd src/path/to/my/work/dir/",
    "task:1": "npm run cd:workdir && command1",
    "task:2": "npm run cd:workdir && command2",
    [...]
  }

但它接缝command* 是在与npm run cd:workdir 不同的进程中执行的,所以这不起作用。

到目前为止我发现的唯一工作方式是:

"scripts": {
    "task:1": "cd src/path/to/my/work/dir/ && command1",
    "task:2": "cd src/path/to/my/work/dir/ && command2",
    [...]
  }

但是必须有更好的方法来做到这一点,以保持干燥和更好的可维护性。谢谢!

【问题讨论】:

    标签: npm npm-scripts


    【解决方案1】:

    我认为您可以使用child_process.exec 从 javascript 文件中执行一些命令:

    // task.js
    const { exec } = require('child_process');
    
    exec('command', {
      cwd: 'src/path/to/my/work/dir/'
    }, (error, stdout, stderr) => {
      // handle error, stderr...
    
      console.log(stdout)
    });
    

    并使用 npm 脚本中的节点执行该 javascript 文件:"task:1": "node task.js"

    【讨论】:

    • 是的,这行得通,但这并不是我所希望的。我需要为每个命令创建一个 javascript 文件,或者我可以用 javascript 编写完整的构建脚本,这会使 npm 脚本过时。我想使用 npm 脚本的巨大缺点是 json 配置文件造成的限制。