使用react框架创建项目时,使用react-router ,运行npm run dev 后,使用http://localhost:8080/home 即可访问首页。但真实情况下我们打包后放在后端的前端代码都会使用nginx配置,配置后访问的路径会带一个项目名称。如http://192.168.1.6/project/home。此时这样访问的时候就需要在react框架内的router路由配置basename,为每个路由添加和nginx配置的项目名一样的根目录。本例中即为/project。
npm install [email protected] --save
new webpack.DefinePlugin({
BASENAME: JSON.stringify('/project')
})
new webpack.DefinePlugin({
BASENAME: JSON.stringify('/')
})
import {Router,useRouterHistory,browserHistory} from 'react-router';
import {syncHistoryWithStore} from 'react-router-redux';
import {createHistory } from 'history';
...
//如果是开发环境就是用browserHistory,如果是build环境,则添加根目录BASENAME
let baseHistory = browserHistory;
if(BASENAME !== '/') {
baseHistory = useRouterHistory(createHistory)({
basename: BASENAME
});
}
const store = configureStore(initialState, baseHistory);
//同步历史路由和Store
const history = syncHistoryWithStore(baseHistory, store, {
selectLocationState: makeSelectLocationState(),
});
...
//引用history
//修改全局browserHistory,
//如果是开发环境就是用browserHistory,如果是build环境,则是用包装后的history
window.browserHistory = baseHistory;
其他页面跳转路由时调用:
window.browserHistory.push('/home'); //切换页面
总结:通过以上步骤即完成了路由根目录的配置,如在生产环境运行,则会自动跳转至:http://192.168.1.6/project/home 地址。
{
test: /\.(png|jpg)$/,
loader: 'url-loader?limit=8192&name=images/[hash:8].[name].[ext]',
exclude: [nodeModulesPath], //不解析node_modules目录的es6语法
}