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 相关文章推荐
与jquery serializeArray()一起使用的函数,主要来方便提交表单
Jan 31 Javascript
jquery动态添加删除一行数据示例
Jun 12 Javascript
node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用
Nov 04 Javascript
jQuery获取标签文本内容和html内容的方法
Mar 27 Javascript
JQuery实现图片轮播效果
Sep 15 Javascript
JavaScript学习笔记之创建对象
Mar 25 Javascript
js检测离开或刷新页面时表单数据是否更改的方法
Aug 02 Javascript
详解微信小程序入门五: wxml文件引用、模版、生命周期
Jan 20 Javascript
javascript判断回文数详解及实现代码
Feb 03 Javascript
angular.JS实现网页禁用调试、复制和剪切
Mar 31 Javascript
vue柱状进度条图像的完美实现方案
Aug 26 Javascript
vue实现可拖拽的dialog弹框
May 13 Vue.js
如何通过非数字与字符的方式实现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
PHPMailer安装方法及简单实例
2008/11/25 PHP
php一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
PHP会话处理的10个函数
2015/08/11 PHP
PHP示例演示发送邮件给某个邮箱
2019/04/03 PHP
PHP Cli 模式设置进程名称的方法
2019/06/12 PHP
form表单action提交的js部分与html部分
2014/01/07 Javascript
javascript如何实现暂停功能
2015/11/06 Javascript
学习JavaScript设计模式之观察者模式
2020/04/22 Javascript
jQuery子元素过滤选择器用法示例
2016/09/09 Javascript
AngularJS中$watch和$timeout的使用示例
2016/09/20 Javascript
概述VUE2.0不可忽视的很多变化
2016/09/25 Javascript
利用yarn实现一个webpack+react种子
2016/10/25 Javascript
ES6新特性之Object的变化分析
2017/03/31 Javascript
Vue-component全局注册实例
2018/09/06 Javascript
js实现轮播图特效
2020/05/28 Javascript
[04:03]DOTA2肉山黑名单梦之声 风暴之灵中文配音鉴赏
2013/07/03 DOTA
python实现提取百度搜索结果的方法
2015/05/19 Python
Python编程中字符串和列表的基本知识讲解
2015/10/14 Python
Python 常用 PEP8 编码规范详解
2017/01/22 Python
python 与GO中操作slice,list的方式实例代码
2017/03/20 Python
简述:我为什么选择Python而不是Matlab和R语言
2017/11/14 Python
利用python库在局域网内传输文件的方法
2018/06/04 Python
python3 实现的对象与json相互转换操作示例
2019/08/17 Python
Pytorch 多块GPU的使用详解
2019/12/31 Python
pytorch模型预测结果与ndarray互转方式
2020/01/15 Python
浅谈keras 的抽象后端(from keras import backend as K)
2020/06/16 Python
python中pdb模块实例用法
2021/01/15 Python
Homestay中文官网:全球寄宿家庭
2018/10/18 全球购物
ghd法国官方网站:英国最受欢迎的美发工具品牌
2019/04/18 全球购物
文明餐桌活动方案
2014/02/11 职场文书
医学专业自荐信
2014/06/14 职场文书
劳动仲裁撤诉申请书
2015/05/18 职场文书
springboot应用服务启动事件的监听实现
2022/04/06 Java/Android
Java 轮询锁使用时遇到问题
2022/05/11 Java/Android
使用compose函数优化代码提高可读性及扩展性
2022/06/16 Javascript
React自定义hook的方法
2022/06/25 Javascript