Chciałbym użyć $>npm start
i używać go "nodemon" do programowania i "węzła" do produkcji. Nie mogę umieścić logiki warunkowej w pliku package.json, więc jak najlepiej to osiągnąć?Node.js - nodemon vs node - development a production
Odpowiedz
nodemon faktycznie odczytuje wartość package.start
, więc jeśli tylko ustawić właściwość start
do tego, co” d w produkcji, np. node app.js
, a następnie uruchom nodemon bez żadnych argumentów, uruchomi się z package.start
i uruchomi ponownie, gdy będziesz " d oczekiwać w rozwoju.
Chociaż jest to użyteczne, gdy używasz globalnie nodemon, myślę, że nie pomoże to w przypadku, gdy chcesz wpisać 'npm start' i uruchomić go nodemon, jeśli znajdujesz się w środowisku' dev' i węźle w 'produkcji '. Poniższa odpowiedź z warunkową instrukcją if wydaje się być jedyną drogą do osiągnięcia tego. –
@AdamReis: Somtimes pytanie, jak zrobić coś złego. Jest to znane jako problem XY i jest ono nie tylko akceptowalne, ale również zalecane dla SO, aby odpowiedzieć prawidłowym sposobem osiągnięcia Y bez wykonywania X. W tym przypadku OP może nie wiedzieć, jak nodemon faktycznie działa, i dlatego prosi o coś, co to nie jest konieczne. Więc nie jest konieczne, aby dosięgnąć dosłowne pytanie, czy istnieje lepszy sposób robienia rzeczy. – slebetman
Powinieneś być w stanie użyć startu NPM jako zwykłego skryptu powłoki.
"scripts": {
"start": "if [$NODE_ENV == 'production']; then node app.js; else nodemon app.js; fi"
}
teraz, aby rozpocząć swój serwer do produkcji
$ NODE_ENV='production' npm start
lub rozwoju
$ NODE_ENV='development' npm start
fajnie - kiedy wypróbowałem tylko skrypt powłoki osadzony w pliku package.json, dostałem błąd, ale wygląda na to, że komendy po tym pomogą. używam heroku, więc uważam, że muszę ustawić zmienną env na heroku –
to nie działa w systemie Windows, ale prawdopodobnie działa na Mac/Unix –
To powinna być zaakceptowana odpowiedź. – jmiraglia
lubiłem rozwiązanie Daniela, ale pomyślałem, że byłoby jeszcze czystsze, aby umieścić go w osobnym pliku startup.sh
:
#!/bin/sh
if [ $NODE_ENV = "production" ]; then
node src/index.js;
else
nodemon src/index.js;
fi
Następnie wystarczy zmienić package.json czytać:
"scripts": {
"start": ". ./startup.sh"
},
* dołek Oczywiście możesz umieścić logikę warunkową w liniach skryptów package.json. Te wartości łańcuchów skryptów są proste interpretowane przez bash. –