react-router打包後沒法經過路由進入到頁面,是由於當咱們使用react-router-dom裏的BrowserRouter as Router時,是用瀏覽器history對象的方法去請求服務器,react
若是服務器沒有相對於的路由去指向對應的頁面路由會找不到資源。webpack
BrowserRouter會變成相似這樣的路徑 http://111.230.139.105:3001/detail/9459469,這樣的路徑在訪問服務器時,服務器會認爲是請求查找某個接口數據web
This request URL /detail/9459469 was not found on this server.
因此這時候必須使用HashRouter,這時候訪問具體頁面時就是http://111.230.139.105:3001/#/detail/9459469瀏覽器
import { HashRouter as Router, Route } from 'react-router-dom' import createHistory from 'history/createHashHistory' const history = createHistory() <Router history={history}> <Route render={({ location }) => { return( <div> <Route location={location} exact path="/" component={Home} /> <Route location={location} path="/detail/:id" component={Detail} /> <Route location={location} path="/comment/:id" component={Comment} /> </div> )}}/> </Router>
webpack打包時要添加NODE_ENV,而且將devtool:'eval-source-map',去除,否則build出來的js特別大,source map是爲了代碼出錯後採用source-map的形式直接顯示你出錯代碼的位置服務器
打包生產包時去除,加上這兩個後大部分簡單單頁面應用會在100k到200kreact-router
new webpack.DefinePlugin({ "process.env": { NODE_ENV: JSON.stringify("production") } }),
// devtool:'eval-source-map',