create-react-app修改为多页面支持的方法


Posted in Javascript onMay 17, 2018

新公司前端就我一个,目前个人选型用react作技术栈开发前端h5页面。最近做一个需求是pc页面需要seo的,后端是Java开发,又不想自己用ssr做seo渲染,只好写html给java大神改成jsp了。然而这个又需要搞一套工作流太麻烦(太懒了),所以直接拿来create-react-app的工作流进行修改了。附上Git地址。

修改dev流程

在已经通过create-react-app生成项目的基础下yarn run eject

yarn add globby 用于查看html文件

修改config/paths.js

//遍历public下目录下的html文件生成arry
const globby = require('globby');
const htmlArray = globby.sync([path.join(resolveApp('public'), '/*.html')]);
//module.exports 里面增加
htmlArray

修改config/webpack.config.dev.js

<!--增加配置-->

// 遍历html
const entryObj = {};
const htmlPluginsAray = paths.htmlArray.map((v)=> {
 const fileParse = path.parse(v);
 
 entryObj[fileParse.name] = [
  require.resolve('./polyfills'),
  require.resolve('react-dev-utils/webpackHotDevClient'),
  `${paths.appSrc}/${fileParse.name}.js`,,
 ]
 return new HtmlWebpackPlugin({
  inject: true,
  chunks:[fileParse.name],
  template: `${paths.appPublic}/${fileParse.base}`,
  filename: fileParse.base
 })
});
<!--entry 替换为entryObj-->
entry:entryObj
<!--替换htmlplugin内容-->
// new HtmlWebpackPlugin({
//  inject: true,
//  chunks: ["index"],
//  template: paths.appPublic + '/index.html',
// }),
...htmlPluginsAray,

修改config/webpackDevServer.config.js

// 增加
const path = require('path');

const htmlPluginsAray = paths.htmlArray.map((v)=> {
 const fileParse = path.parse(v);
 return {
  from: new RegExp(`^\/${fileParse.base}`), to: `/build/${fileParse.base}`
 };
});
<!--historyApiFallback 增加 rewrites-->
rewrites: htmlPluginsAray

以上就是dev模式下的修改了,yarn start一下试试。

修改product流程

修改config/

//增加
// 遍历html
const entryObj = {};
const htmlPluginsAray = paths.htmlArray.map((v)=> {
 const fileParse = path.parse(v);
 
 entryObj[fileParse.name] = [
  require.resolve('./polyfills'),
  `${paths.appSrc}/${fileParse.name}.js`,
 ];
 console.log(v);
 return new HtmlWebpackPlugin({
  inject: true,
  chunks:[fileParse.name],
  template: `${paths.appPublic}/${fileParse.base}`,
  filename: fileParse.base
 })
});
<!--修改entry-->
 entry: entryObj,
<!--替换 new HtmlWebpackPlugin 这个值-->
...htmlPluginsAray,

增加复制模块(yarn add cpy

修改scripts/build.js

// function copyPublicFolder () 替换
// 原来的方法是复制public下所有的内容,因为增加了多html 所以不再直接复制过去(直接复制会覆盖html)
const copyPublicFolder = async() => {
 await cpy([`${paths.appPublic}/*.*`, `!${paths.appPublic}/*.html`], paths.appBuild);
 console.log('copy success!');
 // fs.copySync(paths.appPublic, paths.appBuild, {
 //  dereference: true,
 //  filter: file => file !== paths.appHtml,
 // });
}

以上修改后测试下yarn build

查看下html对应生成对不对,正常是OK的。

增加功能

sass支持(此参考create-react-app的文档,注意不要直接复制文档里面的"start": "react-scripts start", "build": "react-scripts build",因为我们前面已经yarn eject,所以这样用的话是有问题的可以自行体验一下)

// 增加模块
yarn add node-sass-chokidar npm-run-all
// package.json删除配置
"start": "node scripts/start.js",
"build": "node scripts/build.js",
// package.json里面增加scripts
"build-css": "node-sass-chokidar src/scss -o src/css",
"watch-css": "npm run build-css && node-sass-chokidar src/scss -o src/css --watch --recursive",
"start-js": "node scripts/start.js",
"start": "npm-run-all -p watch-css start-js",
"build-js": "node scripts/build.js",
"build": "npm-run-all build-css build-js",

html引入模块

yarn add html-loader
<!--index.html-->
<%= require('html-loader!./partials/header.html') %>

html里可以写img支持打包到build,如果不写的话是无法打包的,除非你在js里面require

<img src="<%= require('../src/imgs/phone.png') %>" alt="">

后面还要取消hash之类的配置,这个就不记录了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript运行时库属性一览表
Mar 14 Javascript
JavaScript设计模式之适配器模式介绍
Dec 28 Javascript
JS获取网页图片name属性的方法
Apr 01 Javascript
js如何实现点击标签文字,文字在文本框出现
Aug 05 Javascript
基于jquery实现百度新闻导航菜单滑动动画
Mar 15 Javascript
jQuery实现放大镜效果实例代码
Mar 17 Javascript
JS动态改变浏览器标题的方法
Apr 06 Javascript
Angular2实现自定义双向绑定属性
Mar 22 Javascript
jQuery鼠标滑过横向时间轴样式(代码详解)
Nov 01 jQuery
vue+elementUI组件table实现前端分页功能
Nov 15 Javascript
Vue中component标签解决项目组件化操作
Sep 04 Javascript
小程序实现筛子抽奖
May 26 Javascript
vue 不使用select实现下拉框功能(推荐)
May 17 #Javascript
微信小程序自定义多选事件的实现代码
May 17 #Javascript
vue 标签属性数据绑定和拼接的实现方法
May 17 #Javascript
JS实现的判断方法、变量是否存在功能示例
Mar 28 #Javascript
vue 路由嵌套高亮问题的解决方法
May 17 #Javascript
JS实现字符串中去除指定子字符串方法分析
May 17 #Javascript
结合Vue控制字符和字节的显示个数的示例
May 17 #Javascript
You might like
PHP设置一边执行一边输出结果的代码
2013/09/30 PHP
php实现批量上传数据到数据库(.csv格式)的案例
2017/06/18 PHP
javascript+xml技术实现分页浏览
2008/07/27 Javascript
JS操作图片(增,删,改) 例子
2013/04/17 Javascript
JavaScript原生对象之String对象的属性和方法详解
2015/03/13 Javascript
在JavaScript中处理字符串之link()方法的使用
2015/06/08 Javascript
JavaScript数组去重的3种方法和代码实例
2015/07/01 Javascript
AngularJs 指令详解及示例代码
2016/09/01 Javascript
使用BootStrapValidator完成前端输入验证
2016/09/28 Javascript
详解jquery validate实现表单验证 (正则表达式)
2017/01/18 Javascript
基于JavaScript实现复选框的全选和取消全选
2017/02/09 Javascript
微信小程序富文本渲染引擎的详解
2017/09/30 Javascript
vue实现密码显示与隐藏按钮的自定义组件功能
2019/04/23 Javascript
Element Dropdown下拉菜单的使用方法
2020/07/26 Javascript
详解 javascript对象创建模式
2020/10/30 Javascript
VUE实现吸底按钮
2021/03/04 Vue.js
[02:19]DOTA2女子战队FOX视频专访:希望更多美眉一起加入
2013/10/15 DOTA
解决Python中由于logging模块误用导致的内存泄露
2015/04/23 Python
python爬取51job中hr的邮箱
2016/05/14 Python
Python读取Json字典写入Excel表格的方法
2018/01/03 Python
用python制作游戏外挂
2018/01/04 Python
Python3中的json模块使用详解
2018/05/05 Python
python中id函数运行方式
2020/07/03 Python
Python基础教程(一)——Windows搭建开发Python开发环境
2020/07/20 Python
详解python中的lambda与sorted函数
2020/09/04 Python
如何在Anaconda中打开python自带idle
2020/09/21 Python
有影响力的品牌之家:Our Social Collective
2019/06/08 全球购物
大二自我鉴定范文
2013/10/05 职场文书
自荐书模板
2013/12/19 职场文书
户籍证明的格式
2014/01/13 职场文书
运动会口号16字
2014/06/07 职场文书
2015年个人自我剖析材料
2014/12/29 职场文书
财务人员岗位职责
2015/02/03 职场文书
应届毕业生求职简历自我评价
2015/03/02 职场文书
2015年医院护理部工作总结
2015/04/23 职场文书
纪委立案决定书
2015/06/24 职场文书