СУХОЙ способ изменить рабочий каталог для сценариев npm

#npm #npm-scripts

Вопрос:

Я просто пробую NPM в качестве системы сборки для небольшого проекта, и я хотел бы спросить, есть ли простой и простой в обслуживании способ изменить рабочий каталог для сценариев сборки. Моей первой мыслью было что-то вроде

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

Но тогда швы command* выполняются в другом процессе npm run cd:workdir , так что это не работает.

Единственный рабочий способ, который я нашел до сих пор, — это:

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

Но должен быть лучший способ сделать это, чтобы сохранить его СУХИМ и более удобным в обслуживании. Спасибо!

Ответ №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)
});
 

и выполните этот файл javascript с помощью узла в сценарии npm: "task:1": "node task.js"

Комментарии:

1. Да, это работает, но это не совсем то, на что я надеялся. Мне понадобится файл javascript для каждой команды, или я мог бы написать полный сценарий сборки на javascript, который сделал бы сценарии npm устаревшими. Я предполагаю, что огромным недостатком использования сценариев npm является ограничение, вызванное файлом конфигурации json.