Zmień katalog roboczy dla skryptów npm



Pytanie:

Czy można zmienić kontekst, w którym npm uruchamia skrypty?
Chcę tego:
<pre class="lang-js prettyprint-override">
"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"
},

Oczywiście
cd deps/2.7/cpython/& amp; & amp; ./configure
będzie działać w systemach typu UNIX, ale nie w systemie Windows.

Dlaczego:

głównym problemem jest to, że polecenie
configure
repo python wyświetla pliki do katalogu, w którym jest wywoływane. Jednak pliki są związane z kompilacją dla
make
i
make install
, które szukają plików w katalogu repo.
W tym przypadku nie mogę zmienić
Makefile
, ponieważ proces budowania Pythona jest zrozumiałe.

Alternatywny:

alternatywą jest prawdopodobnie napisanie jakiegoś
install.js
i użycie niezależnego od systemu operacyjnego API węzła i trochę
child_process.exec ()
, co prawdopodobnie zrobię. Jednak nie wychodź

npm

byłoby bardzo miło.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

npm
zezwala tylko na
cd dir & amp; & amp; polecenie -args
, które będzie działać również w systemie Windows.
Zmiana na użycie funkcji spawn
node
została wprowadzona w PR

https://github.com/npm/npm/pull/10958
https://github.com/npm/npm/pull/10958
ale został odrzucony z powodu powyższego rozwiązania.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jak wspomniano wyżej:

npm prawdopodobnie używa

var spawn = require('child_process').spawn
co pozwoli Ci ustawić takie opcje jak:

{cwd: pwd + 'somepath'}
ale to nie jest objawienie.
Rozwiązałem to za pomocą dość dużego
install.js
, który robi mniej więcej to samo i jest wywoływany z
package.json
jak powyżej. Jednak interfejs API z
child_process
nie jest łatwy w obsłudze, ponieważ generuje wiele trudnych do debugowania błędów. Zajęło mi to chwilę, ale teraz jestem szczęśliwy.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się