`npm build` nie uruchamia skryptu o nazwie„ build ”w pliku package.json


138

W przypadku nowego modułu próbuję użyć npm buildbez gulp / Grunt / innych specjalistycznych narzędzi do kompilacji.

"scripts": {
  "build": "node build.js"
},

Mój plik build.js jest prosty

console.log('Hello')

Jednak bieganie

npm build

Po prostu wychodzi bez drukowania, ze stanem 0.

Bieganie:

npm install

Robi również wszystkie normalne rzeczy, ale nie uruchamia też build.js.

Jak mogę zmusić npm do uruchomienia skryptu kompilacji?

Edycja: nawet proste polecenia bash wydają się nie działać, np

"scripts": {
    "build": "touch TESTFILE"
},

Nie tworzy pliku o tej nazwie.


Obejście: użyj installzamiast tego.
Zaz

Jest to w zasadzie ogromna i nieintuicyjna irytacja NPM i jest to jeden z powodów, dla których nadal używam Yarn. Za pomocą przędzy mogę uruchomić dowolny niestandardowy skrypt jako parametr, tj. Książka o przędzy uruchomi skrypt z książką. W NPM muszę zrobić npm run storybook, a na dodatek, jeśli chcę przekazać jakieś parametry przez npm, to wymaga - przed tym, więc przy porównaniu yarn storybook --ci do npm run storybook - --ci, to dla mnie oczywiste.
Emobe

Odpowiedzi:


243

Niestety npm buildjest to już wewnętrzne polecenie, jak opisano w dokumentacji :

To jest polecenie hydrauliczne wywoływane przez npm link i npm install. Generalnie nie należy go wywoływać bezpośrednio.

Ponieważ to polecenie już istnieje, zawsze rzuca cień na twoje "build": "node build.js".

W pełni kwalifikowanym sposobem uruchomienia własnego skryptu jest run-scriptużycie aliasu lub jego aliasurun :

$ npm run build

npm starta inne są metodą short hand, ale są one opcją tylko wtedy, gdy istniejące polecenie npm nie przesłania go, tak jak npm buildrobi.


Dla potomnych (jak wspominali inni) npm buildjest używany przez npm do tworzenia natywnych dodatków C / C ++ Node przy użyciu node-gyp . Nie jest to dobrze udokumentowane, ponieważ zwykle dzieje się to automatycznie, ale jeśli jesteś zainteresowany, kod źródłowy jest tutaj .


15
Więc co robi npm build ? O ile widzę, wszystkie pliki są całkowicie niezmienione ...
qntm

2
Niektóre pakiety wymagają procesu kompilacji. Kiedy uruchamiasz npm installi npm znajduje pakiet, który ma powiązania C / C ++ lub ogólnie coś, co wymaga do uruchomienia node-gyp, to się uruchamia npm build. Możesz odbudować te pakiety, po prostu uruchamiając je npm buildsamodzielnie.
Jakub Miziołek

4
wewnętrzne polecenie powinno zostać przemianowane na _buildi npm buildpowinno być skrótem jak npm startinpm test
Paweł

1
Rozumiem, że npm buildto nie wywoła mojego skryptu i że jest używany do budowania skompilowanych składników pakietu. Nadal nie jestem pewien, jak to się robi: jakich plików szuka itp.?
aaaidan

1
Gdybym miał sam napisać paczkę, nadal byłoby miło wiedzieć, co zrobić, aby npm build
nadać

20

Skrypt o nazwie „wbudowany” package.jsonw żaden sposób nie jest specjalny. Jedynym sposobem na uruchomienie go jest zadzwonienie:

npm run-script build

Jest kilka nazw, które są wywoływane automatycznie przez npm , ale "build" nie jest jedną z nich. Pełna lista to:

  • prepublish, publish,postpublish
  • preinstall, install,postinstall
  • preuninstall, uninstall,postuninstall
  • preversion, version,postversion
  • pretest, test,posttest
  • prestop, stop,poststop
  • prestart, start,poststart
  • prerestart, restart,postrestart
  • preCUSTOMi postCUSTOMdla niestandardowych nazw skryptów.


3

Miałem problem z npm run buildnie wydrukowaniem niczego. skończyło się na użyciu, npm run build --verboseaby uzyskać potrzebne dane wyjściowe.


2

NPM budować oczekuje

Folder zawierający plik package.json w swoim katalogu głównym

Spróbuj użyć skryptów npm w pliku package.json, na przykład klasycznego startu npm


Oznacza to, że npm build .powinno działać, aw moim przypadku npm wykonuje skrypt „build” w moim „package.json”, tak jak się spodziewałem.
Erhhung
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.