vue.js学习之vue-cli定制脚手架详解


Posted in Javascript onJuly 02, 2017

前言

年初的时候公司的老后台系统实在难以维护和继续在其上开发了,因为这个系统被很多人写过页面,有前端有后端,编写前端代码时都非常随意,加之没有模块化,复用性和可维护性都极低,便下定决定,重新搞一套。

经过一段时间的调研选择了vue全家桶+elementUI来开发后台系统,让交互体验更好,让开发体验更好,让生产效率提高。

从零搭建其实考虑的事情还挺多的,比如:

  • 如何管理代码仓库
  • 开发环境,测试环境搭建
  • 如何接入公司的打包上线流程
  • 如何目录划分
  • 如何划分模块
  • 登录和权限如何做

这篇文章来记录下和脚手架相关的改造,首先其实就是上了vue-cli来做,可是呢?由于预计项目会有很多页面,这些页面其实是分模块的,不同模块的页面之前其实关系不大。所以我觉得一个用户其实大部分时候只会用到其中一个模块的页面,如果把所有页面做成一个单页应用很多资源加载就不是很必要了,所以第一个改造就是:做成多入口打包,也就是做成多个单页应用,每个模块一个入口。

/build/utils

exports.getEntries = function (globPath) { 
 var entries = {}
 glob.sync(globPath).forEach(function (entry) {
 var basename = path.basename(entry, path.extname(entry))
 entries[basename] = entry
 })
 return entries
}

/build/webpack.base.conf

module.exports = { 
 entry: utils.getEntries('./src/modules/*/*.js'),

/build/webpack.dev.conf

/build/weback.prod.conf

var modules = utils.getEntries('./src/modules/*/*.html') 
Object.keys(modules).forEach(function (moduleName) { 
 var config = {
 filename: moduleName + '/index.html',
 template: modules[moduleName],
 inject: true,
 excludeChunks: Object.keys(modules).filter(function (name) {
  return name != moduleName
 })
 }
 module.exports.plugins.push(new HtmlWebpackPlugin(config))
})

这样就完成了多页面的入口配置,其核心就是两点:1. 入口配置成数组。2. plugins里面添加多个HtmlWebpackPlugin分别对应每一个页面,完成js打包后路径的自动注入功能。

这里还有个地方需要注意,就是抽取公用的js和css代码出来,这里做了一下改造,就是echarts指定提取出来,而不是按引用次数那种自动提取, 这里还踩了个坑,详细见注释。

在webpack.prod.conf的plugins里面加入:

entry: { 
 vendor: ['vue', 'vue-router', 'vuex', 'element-ui'],
 echarts: ['vue-echarts']
 },

// 这个地方天坑啊~~~死人了。。。:(
 // vendor是echarts的父模块,顺序不能反:https://github.com/webpack/webpack/issues/1943
 // 包括声明CommonsChunkPlugin的顺序也是有关系的,不是随意的,后声明的是顶级模块,先声明的是依赖顶级模块的模块
 // HtmlWebpackPlugin注入模块链接的时候的顺序也是由此保证的
 new webpack.optimize.CommonsChunkPlugin({
  names: ['echarts', 'vendor'],
  minChunks: function (module, count) { // 抽取公用vendor.css
  // console.log(module.resource)
  return (
   module.resource &&
   /\.css$/.test(module.resource) &&
   module.resource.indexOf(
   path.join(__dirname, '../node_modules')
   ) === 0
  )
  } 
 }),

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
vs2003 js文件编码问题的解决方法
Mar 20 Javascript
浅析JavaScript中的typeof运算符
Nov 30 Javascript
IE6下拉框图层问题探讨及解决
Jan 03 Javascript
JavaScript定义类和对象的方法
Nov 26 Javascript
jQuery复制节点用法示例(clone方法)
Sep 08 Javascript
JS如何设置iOS中微信浏览器的title
Nov 22 Javascript
vue中post请求以a=a&b=b 的格式写遇到的问题
Apr 27 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
Jul 16 Javascript
用POSTMAN发送JSON格式的POST请求示例
Sep 04 Javascript
Vue开发Html5微信公众号的步骤
Apr 11 Javascript
jQuery中DOM常见操作实例小结
Aug 01 jQuery
Angular进行简单单元测试的实现方法实例
Aug 16 Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
Jul 02 #Javascript
关于使用axios的一些心得技巧分享
Jul 02 #Javascript
React服务端渲染(总结)
Jul 01 #Javascript
Express + Node.js实现登录拦截器的实例代码
Jul 01 #Javascript
详解node-ccap模块生成captcha验证码
Jul 01 #Javascript
vue元素实现动画过渡效果
Jul 01 #Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
Jun 30 #Javascript
You might like
使用WordPress发送电子邮件的相关PHP函数用法解析
2015/12/15 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
2016/03/03 PHP
微信公众平台开发教程②微信端分享功能图文详解
2019/04/10 PHP
laravel框架中间件 except 和 only 的用法示例
2019/07/12 PHP
无语,javascript居然支持中文(unicode)编程!
2007/04/12 Javascript
javascript getElementsByName()的用法说明
2009/07/31 Javascript
js里怎么取select标签里的值并修改
2012/12/10 Javascript
JavaScript避免内存泄露及内存管理技巧
2014/09/05 Javascript
JS实现的RGB网页颜色在线取色器完整实例
2016/12/21 Javascript
详解Node.js开发中的express-session
2017/05/19 Javascript
Javascript实现找不同色块的游戏
2017/07/17 Javascript
vue-cli+iview项目打包上线之后图标不显示问题及解决方法
2019/10/16 Javascript
javascript实现蒙版与禁止页面滚动
2020/01/11 Javascript
javascript设计模式 ? 中介者模式原理与用法实例分析
2020/04/20 Javascript
Ant Design的可编辑Tree的实现操作
2020/10/31 Javascript
[42:22]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第一局
2016/02/27 DOTA
python自定义解析简单xml格式文件的方法
2015/05/11 Python
Python打包文件夹的方法小结(zip,tar,tar.gz等)
2016/09/18 Python
Python PyQt5标准对话框用法示例
2017/08/23 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
2018/02/07 Python
Python多线程原理与用法详解
2018/08/20 Python
Python面向对象类编写细节分析【类,方法,继承,超类,接口等】
2019/01/05 Python
Python交互式图形编程的实现
2019/07/25 Python
python 浅谈serial与stm32通信的编码问题
2019/12/18 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
2020/09/26 Python
让IE6支持css3,让 IE7、IE8 都支持CSS3
2011/10/09 HTML / CSS
解决canvas转base64/jpeg时透明区域变成黑色背景的方法
2016/10/23 HTML / CSS
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
面向中国市场的在线海淘美妆零售网站:Beauty House美丽屋
2021/03/02 全球购物
自考毕业自我鉴定范文
2013/10/27 职场文书
网吧收银员岗位职责
2013/12/14 职场文书
自主实习接收函
2014/01/13 职场文书
2014年机关植树节活动方案
2014/02/27 职场文书
员工自我评价范文
2015/03/11 职场文书
2015年档案室工作总结
2015/05/23 职场文书
Windows 11要来了?微软文档揭示Win11太阳谷 / Win10有两个不同版本
2021/11/21 数码科技