2015-06-16 10 views
10

Ich habe einen einfachen Knoten Server:Fehler mit babel-Knoten

//server.js

import express from 'express'; 
import React from 'react'; 
... 

Wenn ich versuche, dies mit Forever auszuführen:

forever start -c "babel-node --experimental" server.js , es Fehler aufgrund der Verwendung von import

/Applications/MAMP/htdocs/React/ReactBoilerplates/koba04/app/server.js:1 
(function (exports, require, module, __filename, __dirname) { import express 
                   ^^^^^^ 
SyntaxError: Unexpected reserved word 
    at Module._compile (module.js:439:25) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Function.Module.runMain (module.js:497:10) 
    at startup (node.js:119:16) 
    at node.js:902:3 
error: Forever detected script exited with code: 8 

Ich habe auch versucht pm2 und nodemon, ich bekomme denselben Fehler dort auch. Für pm2 folgte ich dieses Problem https://github.com/Unitech/PM2/issues/1167, aber es hat auch nicht funktioniert. Was mache ich hier falsch?

+1

Mit PM2 nur tun: '' 'PM2 app.js --interpreter Start/node_modules/.bin/babel-node''' – Unitech

Antwort

1

Ich schlage vor, Ihre es6 Skripte in es5 Skripte vorzukompilieren und die App mit einem forever start server.js Befehl ausführen, wo server.js ein Ergebnis der Vorübersetzung ist.

Wenn Sie react.js für eine isomorphe App verwenden, werden Sie auch benötigt, um Ihre Skripte für Browser entweder vorkompilieren (über browserify, webpack und so weiter).

So sehe ich keinen Gewinn mit es6 Skripte über On-Demand-Kompilierung im Gegensatz zu Precompilation mit gulp oder einem anderen js Gebäude-System zu arbeiten.

+0

Meinen Sie "Compilation" anstelle von "compilcation" zu sagen, überall.? –

+0

Der Gewinn ist offensichtlich: Sie müssen nicht vorkompilieren. – oskarth

7

on-the-fly transpilation für mich Dies funktioniert für: forever start -c node_modules/.bin/babel-node server.js

Eine andere Lösung wird mit dem Require Hook dies wie:

// server-wrapper.js 
require('babel/register'); 

require('./server.js'); 

Dann forever start server-wrapper.js laufen.

6
forever start -c "node -r babel-register" ./src/index.js 

Funktioniert auch.