改造 vue-cli 脚手架
改造 vue-cli 脚手架
注意,这里使用的 vue-cli 的版本为 2.8.2,不同版本的 vue-cli 可能会有些许不一样。
一、配置多页面
项目开发目录:
需要注意一点,每个页面的文件夹命名、文件夹里面的入口 js 文件名及 hmtl 模板文件名应该一致,这样就可以使用一个函数来自动配置入口文件,而不必手动配置
project/
├──build/
├──config/
├──node_modules/
├──src/
│ ├──assets/
│ ├──components/
│ ├──html/
│ │ ├──pageOne/
│ │ │ ├──components/
│ │ │ ├──route/ // 如果有使用 vue-route
│ │ │ ├──store/ // 如果有使用 vueX
│ │ │ ├──style/
│ │ │ ├──APP.vue
│ │ │ ├──pageOne.html
│ │ │ ├──pageOne.js
│ │ ├──pageTwo/
│ │ │ ├──components/
│ │ │ ├──route/
│ │ │ ├──store/
│ │ │ ├──style/
│ │ │ ├──APP.vue
│ │ │ ├──pageTwo.html
│ │ │ ├──pageTwo.js
│ ├──utils/
├──static/
├──babelrcc
├──.editorconfig
├──.gitgnore
├──package.json
├──README.md
项目打包目录
dist
├──html/
│ ├──pageOne.html
│ ├──pageTwo.html
├──static/
│ ├──img/
│ ├──fonts/
│ ├──css/
│ │ ├──html/
│ │ │ ├──pageOne.css
│ │ │ ├──pageTwo.css
│ │ ├──other.css
│ ├──js/
│ │ ├──html/
│ │ │ ├──pageOne.js
│ │ │ ├──pageTwo.js
│ │ ├──manifest.js
│ │ ├──vendor.js
├──favicon.ico
1. 添加入口工具函数
// build/utils.js
var glob = require('glob');
exports.getEntries = function (globPath) {
var entries = {}
/**
* 读取src目录,并进行路径裁剪
*/
glob.sync(globPath).forEach(function (entry) {
/**
* path.basename 提取出用 ‘/' 隔开的path的最后一部分,除第一个参数外其余是需要过滤的字符串
* path.extname 获取文件后缀
*/
var basename = path.basename(entry, path.extname(entry)) // 过滤router.js
// ***************begin***************
// 当然, 你也可以加上模块名称, 即输出如下: { module/main: './src/module/index/main.js', module/test: './src/module/test/test.js' }
// 最终编译输出的文件也在module目录下, 访问路径需要时 localhost:8080/module/index.html
// slice 从已有的数组中返回选定的元素, -3 倒序选择,即选择最后三个
var tmp = entry.split('/').splice(-3)
if(basename!==tmp[1]) return; //过滤其他js文件
var pathname = tmp.splice(0, 1) + '/' + basename; // splice(0, 1)取tmp数组中第一个元素
entries[pathname] = ['babel-polyfill',entry]
});
return entries;
}
/* 变量值
entry: ../src/html/index/index.js
basename: index
tmp: [ 'html', 'index', 'index.js' ]
pathname: html/index
enteries: {
'html/index': '../src/html/index/index.js',
'html/first': '../src/html/first/first.js'
}
*/
2. 修改入口配置
// bulid/webpack.base.conf.js
module.exports = {
entry: utils.getEntries('./src/html/*/*.js'),
...
}
3. 修改 HtmlWebpackPlugin 配置
// bulid/webpack.dev.conf.js
# 1. 引入工具函数
var utils = require('./utils')
# 2. 注释掉原来的 HtmlWebpackPlugin 配置,大概在 29 行
# 3. 在文件末尾加入下面代码
var pages = utils.getEntries('./src/html/*/*.html');
for (var pathname in pages) {
// 配置生成的html文件,定义路径等
var conf = {
favicon: "favicon.ico",
filename: pathname + '.html',
template: pages[pathname][1], // 模板路径
inject: true, // js插入位置
excludeChunks: Object.keys(pages).filter(item => {
return (item != pathname)
})
};
module.exports.plugins.push(new HtmlWebpackPlugin(conf));
}
// bulid/webpack.prod.conf.js
// 1. 注释掉原来的 HtmlWebpackPlugin 配置,大概在 52 行
// 2. 在文件末尾加入下面代码
var pages = utils.getEntries('./src/html/**/*.html');
for (var pathname in pages) {
// 配置生成的html文件,定义路径等
var conf = {
favicon: "favicon.ico",
filename: pathname + '.html',
template: pages[pathname][1], // 模板路径
inject: true, // js插入位置
minify: {
removeComments: true,
collapseWhitespace: true,
removeAttributeQuotes: true
// more options:
// https://github.com/kangax/html-minifier#options-quick-reference
},
// necessary to consistently work with multiple chunks via CommonsChunkPlugin
chunksSortMode: 'dependency',
};
if (pathname in module.exports.entry) { //为页面导入所需的依赖
conf.chunks = ['vendor','manifest', pathname];
conf.hash = false;
}
module.exports.plugins.push(new HtmlWebpackPlugin(conf));
}
4. 修改默认打开路径
// bulid/dev-server.js
var uri = 'http://localhost:' + port + '/' + Object.getOwnPropertyNames(utils.getEntries('./src/html/*/*.html'))[0] + '.html'
5. 修改打包路径为相对路径
// config/index.js
bulid: {
assetsPublicPath: '../',
}
6. 修改打包后 css 文件中对 图片和字库文件引用路径出错的的问题
// build/utils
// 38行
if (options.extract) {
return ExtractTextPlugin.extract({
use: loaders,
publicPath: '../../../', // 修改这里
fallback: 'vue-style-loader'
})
} else {
return ['vue-style-loader'].concat(loaders)
}
7. 检测浏览器版本
<!-- 在模板 html 中引入 -->
<script>
if (!+"\v1") {
document.body.innerHTML = "<div style='background: #00a1d6; text-align: center; padding: 10px 0; color: #fff;'>为了保护你的账号安全,Anywork已不支持IE8及以下版本浏览器访问,建议你升级到IE最新版本浏览器,或使用Chrome等其他浏览器。</div>"
}
</script>
二、配置跨域代理
1. 定义接口工具函数,使用 axios 规定访问路径
// src/utils/interaction.js
import axios from 'axios'
export const IP = '/anywork/';
export const myAxios = axios.create({
baseURL: IP,
// withCredentials: true
})
2. 添加跨域配置
// config/index.js
module.exports = {
dev: {
proxyTable: {
'/anywork': {
target: 'http://10.21.48.11:8080',
changeOrigin: true,
pathRewrite: {
'^/anywork': '/anywork'
}
}
},
}
三、配置常用 loader 和 依赖项
1. 引入 less
npm 下载
$ cnpm install less less-loader --save-dev
webpack.base.conf.js 配置
// 在 rules 中引入 loader
{
test: /\.less$/,
include: [
path.resolve(__dirname, "not_exist_path")
],
loader: 'style-loader!css-loader!less-loader'
},
2. 引入 stylus
npm install stylus stylus-loader --save-dev
<style scoped lang="stylus">
</style>
3. 引入 babel-polyfill
使 IE9 能使用一些 ES6 的新特性
先引入垫片
npm install bable-ployfill --save
方式一:通过 import 引入
// 入口文件
import 'babel-polyfill'
方式二:通过webpack 入口引入
// webpack.conf.js
module.exports = {
entry: ['babel-polyfill', entry-file-URL]
}
4. 引入其他
npm install axios --save
npm install iview --save // UI库
npm install vuex --save
注意
转载、引用,但请标明作者和原文地址
改造 vue-cli 脚手架的更多相关文章
- 13. Vue CLI脚手架
一. Vue CLI 介绍 1. 什么是Vue CLI? Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.Vue CLI 致力于将 Vue 生态中的工具基础标准化.它确保了各种构建工 ...
- 使用Vue CLI脚手架搭建vue项目
本次是使用@vue/cli 3.11.0版本搭建的vue项目 1. 首先确保自己的电脑上的Node.js的版本是8.9版本或者以上 2. 全局安装vue/cli npm install @vue/cl ...
- 改造@vue/cli项目为服务端渲染-ServerSideRender
VUE SEO方案二 - SSR服务端渲染 在上一章中,我们分享了预渲染的方案来解决SEO问题,个人还是很中意此方案的,既简单又能解决大部分问题.但是也有着一定的缺陷,所以我们继续来看下一个方案--服 ...
- vue.cli脚手架初次使用图文教程
vue-cli作用 vue-cli作为vue的脚手架,可以帮助我们在实际开发中自动生成vue.js的模板工程. vue-cli使用 !!前提:需要vue和webpack 安装全局vue-cli npm ...
- vue cli脚手架使用
1.安装nodejs,npm https://www.cnblogs.com/xidianzxm/p/12036880.html 2.安装vue cli sudo npm install -g @vu ...
- node.js和vue cli脚手架下载安装配置方法
一.node.js安装以及环境配置 1.下载vue.js 下载地址: https://nodejs.org/en/ 2.安装node.js 下载完成后,双击安装包开始安装.安装地址最好换成自己指定的地 ...
- vue cli 脚手架上多页面开发 支持webpack2.x
A yuri demo for webpack2 vue multiple page.我看到有一些项目多页面项目是基于webapck1.0的,我这个是在webpack2.x上布置修改. 项目地址: ...
- 用 vue cli 脚手架搭建单页面 Vue 应用(进阶2)
1.配置 Node 环境. 自行百度吧. 安装好了之后,打开 cmd .运行 node -v .显示版本号,就是安装成功了. 注:不要安装8.0.0以上的版本,和 vue-cli 不兼容. 我使用的 ...
- vue.js---利用vue cli脚手架工具+webpack创建项目遇到的坑
1.Eslint js代码规范报错 WARNING Compiled with 2 warnings 10:43:26 ✘ http://eslint.org/docs/rules/quotes St ...
- vue cli脚手架项目利用webpack给生产环境和发布环境配置不同的接口地址或者不同的变量值。
废话不多说,直接进入正题,此文以配置不同的接口域名地址为例子 项目根目录下有一个config文件夹,基础项目的话里面至少包括三个文件, 1.dev.env.js 2.index.js 3.prod.e ...
随机推荐
- [2-SAT]【学习笔记】【未完】
这种一看就很2的东西.... 参考资料: 由对称性解2-sat问题 2-sat解法浅析 $SAT$理论: $2-SAT$ 两种形式: $x \in \hat B$ $x \lor y(x,\ y \i ...
- AJAX面试题都在这里
AJAX常见面试题 什么是AJAX,为什么要使用Ajax AJAX是"Asynchronous JavaScript and XML"的缩写.他是指一种创建交互式网页应用的网页开发 ...
- Maven下的SpringMVC MyBatis
从头开始采用Maven管理,Spring.MyBatis.Tomcat. 在配置过程中SQL Server的Jar老是加载不了,解决方案参考前一篇博文. eclipse中已经自带了Maven的插件所以 ...
- yii2 源码分析 model类分析 (五)
模型类是数据模型的基类.此类继承了组件类,实现了3个接口 先介绍一下模型类前面的大量注释说了什么: * 模型类是数据模型的基类.此类继承了组件类,实现了3个接口 * 实现了IteratorAggreg ...
- IDEA Default模式下的常用快捷键
功 能 快 捷 键 备 注 Back Up Ctr + Alt + Left Forword Ctr + Alt + Right Previous Tab Alt + Left Next Tab Al ...
- latex编辑器
\prod \left ( a b c \right ) http://latex.codecogs.com/eqneditor/editor.php
- 940B Our Tanya is Crying Out Loud
传送门 题目大意 给你n,k,A,B四个数,x=n,有两种操作: 1.将x-1,需支付A个金币 2.将x÷k,需支付B个金币,当且仅当k能整除x时可进行此操作 问将x修改为1至少要花几个金币 分析 模 ...
- python入门学习笔记(三)
10.函数 求绝对值的函数 abs(x) 也可以在交互式命令行通过 help(abs) 查看abs函数的帮助信息.调用 abs 函数:>>> abs(100)100>>& ...
- 读取Pdm文件内容(含源码)
Pdm文件,就是PowerDesigner软件生成的文件,用来设计数据库表结构非常适合.其实,它的文件存储格式就是Xml,网上有很多代码,可以读取pdm文件内容.代码可以使用,但一般只能读取简单的pd ...
- Linux下 开启防火墙端口
命令行输入: vi /etc/sysconfig/iptables 将 -A INPUT -m state --state NEW -m tcp -p tcp --dport 端口号 -j ACCEP ...