2016-08-22 4 views
3

私は自分のカスタムWebpackビルドを使用してreact router tutorialを処理していますが、「予期しないトークン<」というエラーが発生しています。これは、通常、バベルtranspiler being incorrectly specifiedが原因です。ただし、ここでは該当しません。私のtranspilerは、devビルド中に指定されたとおりに動作しますが、実動ビルドと同じセットアップでは失敗します。なぜ私は考えていない。予期しないトークンに反応します<

マイ.babelrcファイルは、右のプリセットがあります

... 
"presets": ["es2015", "stage-0", "react"] 
... 

私webpack.config.jsはdevに関するtranspileするためにこれを使用しています。

loaders: [{ 
     test: /\.js$/, 
     loaders: ['react-hot', 'babel?cacheDirectory=' + PATHS.cache], 
     exclude: PATHS.node_modules 
    }... 

私webpack.config.jsがtranspileにこれを使用しています

loaders: [{ 
     test: /\.js$/, 
     loader: 'babel', 
     exclude: PATHS.node_modules, 
    }... 

と私のpackage.jsonが持っているすべての権利のライブラリ:

0 PRODについて
... 
"devDependencies": { 
    "babel-core": "^6.0.20", 
    "babel-eslint": "^4.1.3", 
    "babel-loader": "^6.2.5", 
    "babel-plugin-transform-runtime": "^6.12.0", 
    "babel-preset-es2015": "^6.0.15", 
    "babel-preset-react": "^6.0.15", 
    "babel-preset-react-hmre": "^1.1.1", 
    "babel-preset-stage-0": "^6.0.15", 
... 
"dependencies": { 
    "react": "^0.14.6", 
    "react-d3-wrap": "^2.1.2", 
    "react-dom": "^0.14.6", 
    "react-redux": "^4.4.5", 
    "react-router": "^2.7.0", 
... 

不思議なことに、Chromeはindex.htmlをからHTMLを実際にメイン.jsファイルを置き換えていることを報告しています。したがって、エラー。あなたがビルドhere

何ができるか任意のアイデアのレポを見つけることができます

enter image description here

enter image description here

はしかし、直接ファイルを検査すると、これがそうでないことが明らかになりましたここにいる?

EDIT:私のサーバがバンドルを要求すると、htmlに戻ります。

var express = require('express'); 
var path = require('path'); 
var compression = require('compression'); 

var app = express(); 

app.use(express.static(path.join(__dirname, 'dist'))); 

app.get('*', function (req, res) { 
    res.sendFile(path.join(__dirname, 'dist', 'index.html')) 
}); 

var PORT = process.env.PORT || 8080; 
app.listen(PORT, function() { 
    console.log("Production express server running at localhost: " + PORT) 
}); 

EDIT2::だから、おそらくPROD-サーバーに何か問題があり何かが、私はここに要求を解決していますどのように問題があります。削除した場合:

app.get('*', function (req, res) { 
    res.sendFile(path.join(__dirname, 'dist', 'index.html')); 
}); 

私は、バンドルにリクエストを送信してバンドルを取り戻すことができます。この行があると、バンドルを取得する要求を送信すると、index.htmlが返されます。

+0

ブラウザがブラウザにバンドルを要求したときに、サーバは何を返しますか? –

+0

@DavinTryon、質問を更新しました。 – Logister

+0

あなたはおそらくブラウザから離れている.jsというリクエストをしているようです。あなたは.htmlとして要求するか、または明示的な側から正しいcontent-typeを返すようにする必要があります。 – agmcleod

答えて

1

agmcleodが提案したように、私はエクスプレスルータが要求を処理する方法を変更する必要がありました。get('*', ...get('/', ...に切り替える必要がありました。さらに、path.join(__dirname, 'dist')の代わりに、Webpackパブリックパスを'/'に変更する必要がありました。 Webpackはsrc属性の中に完全修飾ディレクトリを置いていましたが、エクスプレスサーバの静的パスに相対的なものではありませんでした。

参照先リポジトリには他にも問題がありますが、投稿された質問とは無関係だと思います。

私を正しい軌道に乗せるための@DavidTyronと@agmcleodのおかげです。

関連する問題