0

雖然transpiling以下index.js文件,我得到這個錯誤:不變違規:無效標籤:'use strict';

Invariant Violation: Invalid tag: 'use strict';

我使用babel-corereactreact-dom

我index.js文件:

import React from 'react' 
import { render } from 'react-dom' 
import { Router, Route, browserHistory, IndexRoute } from 'react-router' 
import App from './components/App' 
import Home from './components/Home' 
import FundDetail from './components/FundDetail' 

render((
    <Router history={browserHistory}> 
    <Route path="/" component={App}> 
     <IndexRoute component={Home}/> 
     <Route path="/fund/:id" component={FundDetail}/> 
    </Route> 
    </Router> 
), document.getElementById('content')) 

.babaelrc文件:

{ 
    "presets": ["es2015"], 
    "plugins": ["transform-strict-mode", "transform-react-jsx"] 
} 

服務器代碼:

var React = require("react"); 
    var ReactDom = require("react-dom/server"); 
    var babel = require('babel-core'); 
    var Component; 
    babel.transformFile("./assets/js/index.js", {}, function (err, result) { 
     if(err) { 
     sails.log.error(err) 
     } else { 
     Component = React.createFactory(result.code); 
     var comp = Component(); 
     res.send(ReactDom.renderToString(comp)); 
     } 
    }); 

我應該怎麼辦?

+0

嘗試移除''transform-strict-mode',','es2015'應該已經處理了,所以您可能會添加兩次。 – loganfsmyth

回答

1

我猜transform-react-jsx是不是你需要的唯一的東西,爲什麼不使用預設?你可以see有比改造更:

npm i babel-preset-react --save 

,並將其添加到.babelrc:

"presets": ["es2015", "react"] 

,並刪除變換。

也嘗試babel-core/register在服務器上。我也不確定你在做什麼babel.transformFile?通常情況下,你只是這樣做:

server.get('*', require('./router')); 

所在的文件導出function它採用反應路由器的比賽。我還沒有看到這種方法需要一個index.js文件(這不是導出任何東西),但做了反應渲染?

+0

謝謝,但問題仍然存在。 – myusuf

+0

我試圖在服務器上收到「GET /」請求時呈現「index.js」。我沒有使用REDX。相同的「index.js」是客戶端應用程序的入口點。 – myusuf

+1

好吧,同樣適用沒有redux - 雖然 - 通常你會傳遞一個匹配函數作爲中間件,如果路由匹配你將通過反應路由器傳遞一個組件,並對其執行'renderToStaticMarkup' - 例如https://github.com/DominicTobias/universal-react/blob/master/app/Router.js#L24 –