基于vue-cli的改造的多页面开发脚手架
项目的GitHub地址:https://github.com/hellobajie/vue-cli-multipage
该脚手架同时支持vux,scss,less
目录结构
- vue-cli-multipage
- |---build
- |---config
- |---src
- |---assets 图片
- |---comm 公共的css及js
- |---components 组件
- |---vux.vue vux的dome页面
- |---App.vue
- |---pages html模板文件
- |---abc.html
- |---main.html
- |---abc.js 根据该js进行页面的打包及调试
- |---main.js
修改配置文件
构建多页面应用的关键在于向配置对象的plugins子项添加多个HtmlWebpackPlugin。
怎样根据页面的多少动态的添加多个HtmlWebpackPlugin呢,我们需要使用glob插件;
npm install --save-dev glob 安装glob插件
通过glob插件会将特定目录下的文件名存储为一个数组,遍历该数据,生成多个HtmlWebpackPlugin,并插入plugins中;
- //webpack.prod.conf.js
var fileList = glob.sync('./src/*.js');- var fileNameList = [];
- fileList.forEach(function (item, index) {
- var name = item.match(/(\/)(\w+)(\.)/g)[0].substring(1, item.match(/(\/)(\w+)(\.)/g)[0].length - 1);
- fileNameList.push(name);
- })
- var obj = {};
- fileList.forEach(function (item, index) {
- var filename = fileNameList[index];
- configObj.entry[filename] = item;
- configObj.plugins.push(new HtmlWebpackPlugin({
- template: './src/pages/' +filename + '.html',
- filename: filename + '.html',
- inject: true,
- minify: {
- removeComments: true,
- collapseWhitespace: true,
- removeAttributeQuotes: true
- },
- chunksSortMode: 'dependency',
- chunks: ['manifest', 'vendor', filename]
- }))
- })
- //webpack.dev.conf.js
var fileList = glob.sync('./src/*.js');- var fileNameList = [];
- fileList.forEach(function (item, index) {
- var name = item.match(/(\/)(\w+)(\.)/g)[0].substring(1, item.match(/(\/)(\w+)(\.)/g)[0].length - 1);
- fileNameList.push(name);
- })
- var obj = {};
- fileList.forEach(function (item, index) {
- var filename = fileNameList[index];
- configObj.entry[filename] = item;
- configObj.plugins.push(new HtmlWebpackPlugin({
- template: './src/pages/' + filename + '.html',
- filename: filename + '.html',
- inject: true,
- chunks: [filename]
- }))
- })
vue-cli问题优化
1.遇到问题:项目打包后,无法直接在本地直接打开。
解决办法:在./config/index.js文件中,build下找到assetsPublicPath,将其值改为'./',即打包后,会在相对目录下查找对应的资源;
2.遇到问题:直接打开打包后的文件,报错webpackJsonp is not defined。
解决办法:在webpack.prod.conf.js文件中,每个遍历生成的HtmlWebpackPlugin,配置选项中,chunks对应的数组添加'manifest','vendor'。添加这两项的目的是将公用的资源进行单独打包,浏览器缓存后,后面打开的页面就可以直接从缓存中读取。
3.遇到问题:多次打包后,未被覆盖的文件会被保留下来。
解决办法:安装clean-webpack-plugin插件,在webpack.prod.conf.js文件的plugins中添加如下代码
- new CleanWebpackPlugin(['dist'], {
- root: path.resolve(__dirname, '../'),
- }),
基于vue-cli的改造的多页面开发脚手架的更多相关文章
- atitit.基于 Commons CLI 的命令行原理与 开发
atitit.基于 Commons CLI 的命令行原理与 开发 1. 命令行支持的格式有以下几种: 1 2. json化,map化的命令行参数内部表示 1 3. Ati cli 2 4. CLI库 ...
- 基于Vue、web3的以太坊项目开发及交易内幕初探 错误解决总结
基于Vue.web3的以太坊项目开发及交易内幕初探 本文通过宏观和微观两个层面窥探以太坊底层执行逻辑. 宏观层面描述创建并运行一个小型带钱包的发币APP的过程,微观层面是顺藤摸瓜从http api深入 ...
- 基于@vue/cli 的构建项目(3.0)
1.检测node的版本号 注意:1.Vue CLI需要Node.js的版本 8.9+(推荐8.11.0+) 所以在安装Vue CLI之前先看下node的版本 node -v 2.安装@vue/cli ...
- 基于vue cli 3.0创建前端项目并安装cube-ui
前提条件: 安装node.js. 国内的开发者最好先配置淘宝镜像. 之后用cnpm来代替npm命令. 项目创建过程: 打开cmd,输入命令进入目标工作空间,以本机项目为例: cd /d d: cd D ...
- 基于Vue cli生成的Vue项目的webpack4升级
前面的话 本文将详细介绍从webpack3到webpack4的升级过程 概述 相比于webpack3,webpack4可以零配置运行,打包速度比之前提高了90%,可以直接到ES6的代码进行无用代码剔除 ...
- 使用基于Vue.js和Hbuilder的混合模式移动开发打造属于自己的移动app
近几年,混合模式移动应用的概念甚嚣尘上,受到了一些中小型企业的青睐,究其原因,混合模式开发可以比传统移动开发节约大量的开发成本和人力成本. Hybrid App(混合模式移动应用)是指介于web-ap ...
- 基于 vue+vue-router+vuex+axios+koa+koa-router 本地开发全栈项目
因为毕业设计要做基于Node服务器的项目,所以我就想着用刚学的vue作为前端开发框架,vue作为Vue.js应用程序的状态管理模式+库,axios基于promise用于浏览器和node.js的http ...
- 基于vue现有项目的服务器端渲染SSR改造
前面的话 不论是官网教程,还是官方DEMO,都是从0开始的服务端渲染配置.对于现有项目的服务器端渲染SSR改造,特别是基于vue cli生成的项目,没有特别提及.本文就小火柴的前端小站这个前台项目进行 ...
- 基于laravel5.4 vue 和vue-element搭建的单页面后台CMS
介绍 该项目后台是基于vue和laravel搭建的单页面CMS系统,包含了文章管理,权限管理,用户管理等基本模块. 前台使用了传统web技术,laravel渲染搭建了个博客系统 github地址:ht ...
随机推荐
- [BUAA_SE_2017]第零次博客
结缘计算机 你为什么选择计算机专业?你认为条件如何? 计算机是你喜欢的领域吗?是你擅长的领域吗? 说来也巧,高考选择专业时并不知道自己会这般喜欢计算机这个专业,却将其填在了北航的第一志愿. 第一次接触 ...
- realm vs. domain
从wiki的角度:https://wikidiff.com/domain/realm domain是物理的,realm是抽象的,都是领域. domain是一个人或组织拥有或控制的地理区域,而realm ...
- Mysql8 连接提示 Client does not support authentication protocol requested by server; consider upgrading MySQL client 解决方法
USE mysql;ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';FLUSH PR ...
- js數字
js數字只有一種類型:不是類型語言. js的數字可以使用科學計數法或者不使用科學計數法: js都是64位的, 如果是整數,(不使用科學計數法或者是小數點)最大15位的: 如果是浮點數,最大17位的,浮 ...
- POJ2492-A Bug's Life-并查集扩展应用
维护一个relation数组,保留着此元素和根元素之间的性别关系.之后就可以判断gay了. #include <cstdio> #include <algorithm> #in ...
- String的实例化与static final修饰符
String两种实例化方式 一种是通过双引号直接赋值的方式,另外一种是使用标准的new调用构造方法完成实例化.如下: String str = "abcd"; String str ...
- 在Java Web程序中使用监听器可以通过以下两种方法
之前学习了很多涉及servlet的内容,本小结我们说一下监听器,说起监听器,编过桌面程序和手机App的都不陌生,常见的套路都是拖一个控件,然后给它绑定一个监听器,即可以对该对象的事件进行监听以便发生响 ...
- 【BZOJ2671】Calc(莫比乌斯反演)
[BZOJ2671]Calc 题面 BZOJ 给出N,统计满足下面条件的数对(a,b)的个数: 1.\(1\le a\lt b\le N\) 2.\(a+b\)整除\(a*b\) 我竟然粘了题面!!! ...
- Shell基础知识(三)
Shell中变量的作用域: 在当前Shell会话中使用,全局变量. 在函数内部使用,局部变量. 可以在其他Shell会话中使用,环境变量. 局部变量: 默认情况下函数内的变量也是全局变量 #!/bin ...
- 【AGC016E】Poor Turkeys
Description 有\(n\)(\(1 \le n \le 400\))只鸡,接下来按顺序进行\(m\)(\(1 \le m \le 10^5\))次操作.每次操作涉及两只鸡,如果都存在则随意拿 ...