2014-11-08 14 views
6

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

+0

* 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. –

Odpowiedz

5

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.

+1

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. –

+0

@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

4

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 
+0

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 –

+0

to nie działa w systemie Windows, ale prawdopodobnie działa na Mac/Unix –

+0

To powinna być zaakceptowana odpowiedź. – jmiraglia

1

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" 
},