2016-08-22 117 views
3

我正在通过react router tutorial使用我自己的自定义webpack构建,并且出现“意外令牌<”错误。这通常是由于babel transpiler being incorrectly specified。但是,这不是这种情况。我的编译器在开发过程中按照指定的工作方式工作,但在生产版本的相同设置下失败。我不知道为什么。React意外令牌<

我.babelrc文件具有正确的预设:

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

我webpack.config.js使用它来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拥有所有正确的库:

... 
"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文件。因此错误。

enter image description here

但是,直接检查这些文件表明,这个情况并非如此:

enter image description here

你可以找到构建here

任何想法可能是什么的回购去这里?

编辑:当我的服务器请求捆绑软件时,它返回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:有些事情错了,我怎么会在这里解决的要求。如果我删除:

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

然后我可以发送请求到捆绑并返回捆绑。通过这一行,发送一个请求来获取包返回index.html。

+0

当浏览器请求包时,服务器返回什么? –

+0

@DavinTryon,更新了问题。 – Logister

+0

它看起来像你正在做请求.js,这可能会抛出浏览器。您需要将其作为.html请求,或者确保您从快速方面返回正确的内容类型。 – agmcleod

回答

1

由于agmcleod建议,我需要改变我的快递路由器处理请求的方式:get('*', ...需要切换到get('/', ...。此外,我需要将我的webpack公共路径更改为'/'而不是path.join(__dirname, 'dist')。 Webpack将完全限定的目录放在我的src属性中,并没有使它们与我的express服务器中的静态路径相关。

在引用的回购中还有其他问题,但我相信它们与发布的问题无关。

感谢@DavidTyron和@agmcleod让我走上正轨。