Подтвердить что ты не робот

Изменить рабочий каталог для npm-скриптов

Q: Можно ли изменить контекст, в котором npm запускает скрипты?

Я хочу, чтобы следующее:

"scripts": {
   "test": "gulp mocha",
   "pre-install": "./deps/2.7/cpython/configure --prefix=$(pwd)/build --exec-prefix=$(pwd)/build && make -C deps/2.7/cpython && make -C deps/2.7/cpython install",
   "install": "node-gyp rebuild"
},

Очевидно, что cd deps/2.7/cpython/ && ./configure будет работать на UNIX-подобных системах, но не на окнах.

Почему: Корень проблемы состоит в том, что команда configure репо python выводит файлы в каталог, в котором он вызывается. Файлы, однако, имеют значение для make и make install, которые ищут файлы в каталоге репо.

В этом случае я не могу изменить Makefile, поскольку процесс сборки Python, по-видимому, сложный.

Альтернатива: Альтернативой является, возможно, написать install.js и использовать node независимый от ОС API и некоторые child_process.exec(), которые я, вероятно, собираюсь сделать. Однако, не оставляя npm, было бы очень приятно.

4b9b3361

Ответ 1

npm позволяет выполнять только cd dir && command -args, который также будет работать в Windows.

Изменения в использовании функции node spawn были сделаны в PR https://github.com/npm/npm/pull/10958, но были отклонены из-за вышеупомянутого решения.

Ответ 2

Как отмечено выше:

npm, вероятно, использует

var spawn = require('child_process').spawn

который позволит вам установить такие параметры, как:

    {cwd: pwd + 'somepath'}

но не подвергает его воздействию.

Я решил его с довольно большим install.js, который делает примерно это, и он вызывается из package.json, как описано выше. API child_process не так прост в обращении, поскольку он вызывает множество жестких ошибок отладки. Принял меня некоторое время, но теперь я счастлив.