加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

create-react-app配置多页应用

发布时间:2020-12-15 06:36:47 所属栏目:百科 来源:网络整理
导读:creat-react-app的多页脚手架的配置 背景:最近接手一个混合app项目,但是其中的页面都是用jquery写的,有点乱,所以决定用react重构一下,因为涉及到很多页面,所以create-react-app只能自己配置成多页的了。弄这个也弄了挺久的,主要是对webpack的各个配置

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

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

具体配置

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

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

  • 修改entry
//这里我已经写成对象格式了,有多少个页面就添加多少个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文件
  • 修改entry
//这里的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
  • 修改historyApiFallback
//这里的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的模板,里面也有例子和讲解,大家可以看一看。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读