2015-02-09 19 views
8

mogę skompilować i uruchomić mój app JSX z jednego polecenia:Jak używać nodemon z JSX?

jsx app.jsx | node 

Ale chcę mój serwer został uruchomiony automatycznie za każdym razem modyfikować app.jsx. Mogę to zrobić z nodemon, ale nie mogę się dowiedzieć, jak uzyskać nodemon do uruchomienia mojego skryptu przez kompilator JSX wcześniej.

Mam plik nodemon.json skonfigurować tak:

{ 
    "execMap": { 
     "js": "node", 
     "jsx": "jsx {{filename}} | node" 
    }, 
    "ext": "js jsx", 
    "ignore": [ 
     ".hg", 
     "node_modules", 
     ".idea" 
    ], 
    "verbose": true 
} 

Ale kiedy biegnę nodemon mówi mi:

8 Feb 21:58:48 - [nodemon] starting `jsx app.jsx | node` 
8 Feb 21:58:48 - [nodemon] child pid: 10976 
'\"jsx app.jsx | node\"' is not recognized as an internal or external command, 
operable program or batch file. 

Co jest dziwne, bo to komenda działa verbatim kiedy wklej go bezpośrednio do mojego terminalu.

Czy jest jakiś sposób, aby uzyskać nodemon do uruchamiania moich plików JSX?

+0

to działa dla Ciebie? https://github.com/remy/nodemon#specifying-extension-watch-list –

+0

@limelights Nie. Po prostu informuje nodemon, które rozszerzenia mają oglądać, a nie jak je obsługiwać. Wierzę, że ma wbudowaną obsługę coffeescript, ale nie jsx. – mpen

Odpowiedz

4

Wygląda na to, że nodemon próbuje uruchomić program o podanej nazwie, zamiast wykonywać powłokę.

Utwórz plik jsx.sh z tej treści:

#!/bin/sh 
jsx "$1" | node 

Następnie chmod +x jsx.sh i umieścić to w swoim nodemon.json:

{ 
    "execMap": { 
     "js": "node", 
     "jsx": "./jsx.sh" 
    }, 
    "ext": "js jsx", 
    "ignore": [ 
     ".hg", 
     "node_modules", 
     ".idea" 
    ], 
    "verbose": true 
} 

* nie testowany

+0

Musiałem zamiast tego użyć pliku '.bat', ponieważ jestem w systemie Windows, ale pomysł jest taki sam. Dzięki! – mpen

1

If jesteś w systemie Windows (jak ja) możesz utworzyć .bat zamiast .sh, jak FakeRainBrigand suggests

@echo off 
jsx %1 | node 

Ten plik musi być w tym samym katalogu co nodemon.json i package.json - ścieżki nie wydają się działać w execMap z jakiegokolwiek powodu.


Również jeszcze łatwiejsze rozwiązanie jest po prostu nie użyć dowolnego JSX w głównym skrypcie/serwer, a następnie zainstalować node-jsxrequire plików JSX ile potrzeba.

2

albo po prostu znajdź polecenie JSX w katalogu ./node_modules/.bin i uruchomić go, że zamiast:

{ 
     script: "client.js", 
     options: { 
      execMap: { 
       "js": "node", 
       "jsx": "./node_modules/.bin/jsx \"$1\" | node" 
      }, 
      ext: "js jsx", 
      callback: function (nodemon) { 
       nodemon.on("log", function (event) { 
        console.log(event.colour); 
       }); 
      }, 
      ignore: [ 
       "node_modules/**/*.js", 
       "public/js/**", 
       "lib/api/**", 
      ] 
     } 
    }