改造 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 ...
随机推荐
- 【转】 C/C++程序员必须熟练应用的开源项目
作为一个经验丰富的C/C++程序员, 肯定亲手写过各种功能的代码, 比如封装过数据库访问的类, 封装过网络通信的类,封装过日志操作的类, 封装过文件访问的类, 封装过UI界面库等, 也在实际的项目中应 ...
- python3图像识别库安装与使用
pytesseract库的安装 因为用的win10,就直说windows上面的安装了.其实就是pip安装就完事了. $ pip install pytesseract 安装了这个还不算完,得安装Tes ...
- 【深度学习】L1正则化和L2正则化
在机器学习中,我们非常关心模型的预测能力,即模型在新数据上的表现,而不希望过拟合现象的的发生,我们通常使用正则化(regularization)技术来防止过拟合情况.正则化是机器学习中通过显式的控制模 ...
- 谨慎升级到HTTPS
我们的业务主要为两块,首先是h5商城,在商城里面会有很多很多的运营活动,点击进去是在后台配置的各种H5活动链接.而H5商城和运营活动是两个业务,两者的联系就是要在后台系统将运营活动的链接配置到商城中. ...
- [Swift]UIKit学习之警告框:UIAlertController和UIAlertView
Important: UIAlertView is deprecated in iOS 8. (Note that UIAlertViewDelegate is also deprecated.) T ...
- Jenkins代码管理
1.1 Jenkins安装与下载应用代码 应用部署 http://jenkins-ci.org http://wordpress.org/ http://core.svn.wordp ...
- markdown流程图画法小结
markdown流程图画法小结 markdown 画图 流程图 最简单的流程图为例 ```mermaid! graph TD A --> B //在没有(),[].{}等括号的情况之下,图标 ...
- bzoj 3622 已经没有什么好害怕的了 类似容斥,dp
3622: 已经没有什么好害怕的了 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1213 Solved: 576[Submit][Status][ ...
- Spring MVC中Session的正确用法之我见
Spring MVC是个非常优秀的框架,其优秀之处继承自Spring本身依赖注入(Dependency Injection)的强大的模块化和可配置性,其设计处处透露着易用性.可复用性与易集成性.优良的 ...
- Centos/linux下的JDK安装
1.连接到centos的远程主机上 #你的用户名 ssh root@xxxxx 2.输入密码登录 3.最好将镜像改为阿里云的镜像 http://mirrors.aliyun.com/help/cent ...