create-react-app配置多页应用

盐析枚举
• 阅读 11609

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'),
            require.resolve('react-dev-utils/webpackHotDevClient'),
            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
        ],
        admin:[
            require.resolve('./polyfills'),
            paths.appSrc+'/admin.js'
        ]
    }
  • 修改plugins中的HtmlWebpackPlugin
    //和开发环境下一样,多少个html就new多少个 HtmllWebpackPlugin,每个都需要指定chunks,并且指定filename,在minify中配置是否压缩js、css等,这是生产环境下的配置
    new HtmlWebpackPlugin({
      inject: true,
      chunks:["index"],
      template: paths.appHtml,
      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,
      chunks:["admin"],
      template: paths.appHtml,
      filename:'admin.html',
      minify: {
        removeComments: true,
        collapseWhitespace: true,
        removeRedundantAttributes: true,
        useShortDoctype: true,
        removeEmptyAttributes: true,
        removeStyleLinkTypeAttributes: true,
        keepClosingSlash: true,
        minifyJS: true,
        minifyCSS: true,
        minifyURLs: true,
      },
    }),
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的模板,里面也有例子和讲解,大家可以看一看。

点赞
收藏
评论区
推荐文章
徐小夕 徐小夕
4年前
记一次老项目中的跨页面通信问题和前端实现文件下载功能
由于笔者之前维护了几个比较老的项目是用jquery全家桶开发的,其中有些需求是需要跨页面交互和父子页面通信,故借此总结一下。另一块是前端实现文件下载功能,虽然方法很多,为了不用重复造轮子,在此还是总结一波,毕竟多页面下的应用场景还是很多的。(https://imghelloworld.osscnbeijing.aliyuncs.com/im
LeeFJ LeeFJ
2年前
Foxnic-Web 代码生成 (8) —— 配置列表页
列表页面主要包含了顶部的搜索区域和表格区域,搜索区域有点类似表单,配置上可能存在相似之处。本篇我们就来了解一下,在代码生成时的列表页呈现方面,我们可以做点啥。
顺心 顺心
4年前
Flutter 玩转微信——闪屏页妙用
概述众所周知,一个健全的App,通常都会有一个SplashPage页面,且该页面一般用于应用(APP)启动时,当然其存在的主要目的是承载:启动页、引导页、广告页、等待页等业务场景。笔者认为,与其说是闪屏页,倒不如叫中转页,怎么个中转法,还请听笔者一一到来...这里笔者借助以Flutter实现微信App登录的逻辑,以点带面来讲讲Sp
Jacquelyn38 Jacquelyn38
4年前
自己实现一个自定义React项目脚手架「ReactCli」
前言首先为什么想到自己实现一个React脚手架呢?是因为之前刚接触createreactapp时,觉得不太灵活。虽然文件目录很清晰,但是还是觉得不如VueCLI的可以自定义配置更加灵活。当然React官方提供了可以暴露配置的命令npmruneject,说再多不如自己实现一个。脚手架一览文档ProjectoperationInstallnpm ins
Easter79 Easter79
3年前
springMVC实现登陆
页面打开跳转到登陆页面登陆成功跳转到成功页面登陆失败再次返回登录页面,并增加提示信息1、首页跳转到登陆页面  Tomcat服务器启动时默认加载WEBINF下的index.jsp,可以通过修改xml配置的方式来改变Tomcat这一默认行为。这里使用springMVC来实现这个功能。  第一种实现
徐小夕 徐小夕
4年前
用 webpack 4.0 撸单页/多页脚手架 (jquery, react, vue, typescript)
1.导语        首先来简单介绍一下webpack:现代JavaScr
Wesley13 Wesley13
3年前
KO
KOKO是一个基于Webpack开发的快速开始Web开发的脚手架工具,具有以下特性:可以当做一个Webpack配置种子来使用,无需二次配置、开箱即用自动支持多页应用(可选)Vue单文件组件的开发方式资源分块加载,内联和异步加载方式管理,低成本实现首屏优化支
Wesley13 Wesley13
3年前
LEADTOOLS如何检测,读取和写入条形码
工作场所中存在许多多页的文件。能够加载、拆分和提取是许多应用程序的重要需求。一些最常见的多页文件类型是:PDF,TIFF和MicrosoftOffice格式,例如Docx,Doc,Xls和Xlsx。LEADTOOLS支持所有这些格式以及30多种其他多页格式。由于存在多种不同类型的多页格式,因此尝试支持常见的格式可能会让人头疼,而试图支持所有这些格式的也像一
Stella981 Stella981
3年前
JFinal项目里如何全局配置登录页全屏背景图
需求描述:JBolt开发平台商业项目里有几个客户提出了可以任意切换登录页面背景图的功能,应对不同时期的需要,例如端午节、中秋节、集团员工登录集团系统的时候还能收到集团领导深深的祝福。。。在登录页面全屏大图背景上体现一下。基本思路:好吧,我认真思考了一下领导的需求,大概只要在后台配置中增加一个全局配置,可以动态切换针对登录页全屏背
Stella981 Stella981
3年前
SpringBoot日记——错误页处理的配置篇
 在我们访问页面的时候经常会遇到各种问题,比如404,400,500,502等等,可返回的错误页对用户来讲,并不太亲民,所以要定制一下自己的错误页。 我们先访问一个错误页面,看下效果:(虽然给我们提供了错误时间、类型、状态码、错误信息,但是好丑,而且用户也不知道这是什么意思)!(https://oscimg.oschina.net/oscnet
Easter79 Easter79
3年前
SpringBoot日记——错误页处理的配置篇
 在我们访问页面的时候经常会遇到各种问题,比如404,400,500,502等等,可返回的错误页对用户来讲,并不太亲民,所以要定制一下自己的错误页。 我们先访问一个错误页面,看下效果:(虽然给我们提供了错误时间、类型、状态码、错误信息,但是好丑,而且用户也不知道这是什么意思)!(https://oscimg.oschina.net/oscnet
盐析枚举
盐析枚举
Lv1
殊方日落玄猿哭,旧国霜前白雁来。
文章
5
粉丝
0
获赞
0