create-react-app配置多页应用

creat-react-app的多页脚手架的配置

背景:最近接手一个混合app项目,但是其中的页面都是用jquery写的,有点乱,所以决定用react重构一下,因为涉及到很多页面,所以create-react-app只能自己配置成多页的了。弄这个也弄了挺久的,主要是对webpack的各个配置项不够了解。也走了很多弯路,所以在这就写下来,算作对自己的一个总结。

具体配置

1.使用create-react-app 创建一个单页应用,并且创建成功之后运行 npm run eject 暴露配置

2.在config修改webpack.config.dev.js文件

//这里我已经写成对象格式了,有多少个页面添加多少个key:value对,这里我已经添加一个admin,数组中的paths.appSrc+'/admin.js'就是这个html页面的入口文件
    entry: { 
        index:[
            require.resolve('./polyfills'),require.resolve('react-dev-utils/webpackHotDevClient'),paths.appIndexJs,],admin:[
            require.resolve('./polyfills'),paths.appSrc + '/admin.js',]
    }
  • 修改plugins中的HtmlWebpackPlugin
//多少个页面就new 多少个 HtmlWebpackPlugin 并且在每一个里面的chunks都需要和上面的entry中的key匹配,例如上面entry中有index和admin这两个。这里的chunks也需要是index和admin
    new HtmlWebpackPlugin({
        inject: true,chunks:["index"],template: paths.appHtml,}),new HtmlWebpackPlugin({
        inject: true,chunks:["admin"],template:paths.appHtml,filename:'admin.html'
    }),
3.修改config下的webpack.config.prod.js文件
//这里的paths.appIndexJs和paths.appSrc+'/admin.js'依然是每个html的入口文件
    entry:{
        index:[
            require.resolve('./polyfills'),paths.appIndexJs
        ],paths.appSrc+'/admin.js'
        ]
    }
  • 修改plugins中的HtmlWebpackPlugin
//和开发环境下一样,多少个html就new多少个 HtmllWebpackPlugin,每个都需要指定chunks,并且指定filename,在minify中配置是否压缩js、css等,这是生产环境下的配置
    new HtmlWebpackPlugin({
      inject: true,minify: {
        removeComments: true,collapseWhitespace: true,removeRedundantAttributes: true,useShortDoctype: true,removeEmptyAttributes: true,removeStyleLinkTypeAttributes: true,keepClosingSlash: true,minifyJS: true,minifyCSS: true,minifyURLs: true,},new HtmlWebpackPlugin({
      inject: true,filename:'admin.html',
3.在开发环境中如果想通过地址访问不同的页面,需要修改webpackDevServer.config.js
//这里的rewrites:[ {from: /^\/admin.html/,to: '/build/admin.html' }] 数组里面是一个个对象,对象中前面的值是在开发时候访问的路径,例如 npm run start之后会监听 localhost:3000 ,此时在后面加上 /admin.html就会访问admin.html中的内容认是访问index.html;数组中的第二个值是生产环境下的文件的路径。如果有很多页面,就在rewrites中添加更多对象
    historyApiFallback: {
      disableDotRule: true,rewrites: [
        { from: /^\/admin.html/,to: '/build/admin.html' },]
    },

在我的github上我已经创建了一个基于create-react-app的模板,里面也有例子和讲解,大家可以看一看。

相关文章

一、前言 在组件方面react和Vue一样的,核心思想玩的就是组件...
前言: 前段时间学习完react后,刚好就接到公司一个react项目...
前言: 最近收到组长通知我们项目组后面新开的项目准备统一技...
react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom...