Webcourse/11-Vue基础/00-Vue的介绍和vue-cli.md

345 lines
8.5 KiB
JavaScript
Raw Normal View History

2018-03-04 18:18:19 +08:00
2018-03-13 23:12:27 +08:00
## MVVM模式
2018-10-02 22:10:26 +08:00
![](http://img.smyhvae.com/20180420_2150.png)
2018-04-20 23:44:34 +08:00
2018-03-13 23:12:27 +08:00
- Model负责数据存储
- View负责页面展示
- View Model负责业务逻辑处理比如Ajax请求等对数据进行加工后交给视图展示
2018-05-07 00:11:35 +08:00
## 关于框架
### 为什么要学习流行框架
**1企业为了提高开发效率**在企业中时间就是效率效率就是金钱企业中使用框架能够提高开发的效率
**提高开发效率的发展历程**
2019-06-24 20:38:41 +08:00
原生JS -> Jquery之类的类库 -> 前端模板引擎 -> Angular.js / Vue.js能够帮助我们减少不必要的DOM操作提高渲染效率双向数据绑定的概念
2018-05-07 00:11:35 +08:00
2019-06-24 20:38:41 +08:00
2在Vue中一个核心的概念就是数据驱动避免手动操作DOM元素这样的话可以让前端程序员可以更多的时间去关注数据的业务逻辑而不是关心 DOM 是如何渲染的了
2018-05-07 00:11:35 +08:00
### 框架和库的区别
**框架**
框架是一套完整的解决方案
对项目的**侵入性**较大项目如果需要更换框架则需要重新架构整个项目但是优点也很明显功能完善提供了一整套的解决方案
2019-06-24 20:38:41 +08:00
**插件**
2018-05-07 00:11:35 +08:00
只是提供某一个小功能
对项目的侵入性较小如果某个库无法完成某些需求可以很容易切换到其它库实现需求
举例
- 从Jquery 切换到 Zepto
- EJS 切换到 art-template
2018-03-04 18:18:19 +08:00
## 前端的各种框架
2019-06-24 20:38:41 +08:00
### Vue React 的相同点
2018-05-07 00:11:35 +08:00
2019-06-24 20:38:41 +08:00
- 利用虚拟DOM实现快速渲染
2018-05-07 00:11:35 +08:00
2019-06-24 20:38:41 +08:00
- 轻量级
2018-05-07 00:11:35 +08:00
2019-06-24 20:38:41 +08:00
- 响应式组件
2018-05-07 00:11:35 +08:00
2019-06-24 20:38:41 +08:00
- 支持服务器端渲染
2018-03-04 18:18:19 +08:00
2019-06-24 20:38:41 +08:00
- 易于集成路由工具打包工具以及状态管理工具
2018-03-04 18:18:19 +08:00
2019-06-24 20:38:41 +08:00
PSVue 在国内很受欢迎React 在国内和国外都很受欢迎适合做大型网站
2018-03-04 18:18:19 +08:00
### 什么是虚拟 DOM
传统的web开发是利用 jQuery操作DOM这是非常耗资源的
我们可以在 JS 的内存里构建类似于DOM的对象去拼装数据拼装完整后把数据整体解析一次性插入到html里去这就形成了虚拟 DOM
Vue1.0没有虚拟DOMVue2.0改成了基于虚拟DOM
### 前端框架回顾
2018-03-09 17:27:01 +08:00
![](http://img.smyhvae.com/20180302_1645.png)
2018-03-04 18:18:19 +08:00
2018-03-09 17:27:01 +08:00
![](http://img.smyhvae.com/20180302_1651.png)
2018-03-04 18:18:19 +08:00
2018-03-09 17:27:01 +08:00
![](http://img.smyhvae.com/20180302_1652.png)
2018-03-04 18:18:19 +08:00
Vue框架中没有控制器
## Vue 框架
### 发展历史
2019-06-24 20:38:41 +08:00
- 2013年底作为尤雨溪个人实验项目开始开发
- 2014年2月公开发布
2018-03-04 18:18:19 +08:00
2019-06-24 20:38:41 +08:00
- 2014年11月发布0.11版本
- 2016年10月发布2.0版本
2018-03-04 18:18:19 +08:00
### 相关网址
- [中文官网](https://cn.vuejs.org/)
- [vuejs官方论坛](https://forum.vuejs.org/)
2018-03-13 23:12:27 +08:00
- GitHub地址<https://github.com/vuejs/vue>
- Vue1.0 在线文档<http://v1-cn.vuejs.org/guide/>
- Vue2.x 在线文档<https://cn.vuejs.org/v2/guide/>
2018-05-07 00:11:35 +08:00
- Vue1下载地址<http://v1-cn.vuejs.org/js/vue.js>
2018-03-13 23:12:27 +08:00
2018-05-07 00:11:35 +08:00
- Vue2下载地址<https://cdn.jsdelivr.net/npm/vue/>
2018-03-13 23:12:27 +08:00
2018-03-09 17:27:01 +08:00
![](http://img.smyhvae.com/20180302_1658.png)
2018-03-04 18:18:19 +08:00
上方截图的时间2018-03-02
### 介绍
Vue 本身并不是一个框架Vue结合周边生态构成一个灵活的渐进式的框架
2019-09-03 21:29:32 +08:00
Vue 以及大型 Vue 项目所需的周边技术构成了生态
2018-03-04 18:18:19 +08:00
渐进式框架图
2018-03-09 17:27:01 +08:00
![](http://img.smyhvae.com/20180302_1701.png)
2018-03-04 18:18:19 +08:00
2019-06-24 20:38:41 +08:00
### Vue框架的特点
2018-03-04 18:18:19 +08:00
2019-06-24 20:38:41 +08:00
- 模板渲染基于 html 的模板语法学习成本低
2018-03-04 18:18:19 +08:00
2019-06-24 20:38:41 +08:00
- 响应式的更新机制数据改变之后视图会自动刷新重要
2018-03-04 18:18:19 +08:00
2019-06-24 20:38:41 +08:00
- 渐进式框架
2018-03-04 18:18:19 +08:00
- 组件化/模块化
2019-06-24 20:38:41 +08:00
- 轻量开启 gzip压缩后可以达到 20kb 大小React 达到 35kbAngularJS 达到60kb
2018-03-04 18:18:19 +08:00
## Vue 的环境搭建
> 我们首先要安装好 NVMNode.js环境然后再来做下面的操作
### 常见的插件
- Webpack代码模块化构建打包工具
- Gulp基于流的自动化构建工具
- Babel使用最新的 规范来编写 js
- Vue构建数据驱动的Web界面的渐进式框架
- Express基于 Node.js 平台快速开放极简的 Web 开发框架
以上这些包都可以通过 NPM 这个包管理工具来安装
### 引用 Vue.js 文件
2019-06-24 20:38:41 +08:00
1**方式一**CDN的方式进行引用
2018-03-04 18:18:19 +08:00
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
2019-06-24 20:38:41 +08:00
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js"></script>
2018-03-04 18:18:19 +08:00
</head>
<body>
</body>
</html>
```
2方式二下载 vue.js 文件
2019-06-24 20:38:41 +08:00
去网站 <https://cdn.jsdelivr.net/npm/vue/> 下载 vue.js 文件,直接放到工程文件里,然后引用。
2018-03-04 18:18:19 +08:00
2019-06-24 20:38:41 +08:00
3方式三NPM的方式安装vue
2018-03-04 18:18:19 +08:00
```bash
# 最新稳定版
$ npm install vue
```
如果网络不稳定可以采用下面的方式安装
```
$ cnpm i vue --save
```
2019-07-25 10:03:43 +08:00
然后在代码中通过下面这种方式进行引用
2018-03-04 18:18:19 +08:00
2019-07-25 10:03:43 +08:00
```javascript
import Vue from 'vue'
```
2018-03-04 18:18:19 +08:00
2019-06-24 20:38:41 +08:00
## 利用 vue-cli 新建一个空的项目
2018-03-04 18:18:19 +08:00
Vue 提供一个官方命令行工具可用于快速搭建大型单页应用该工具为现代化的前端开发工作流提供了开箱即用的构建配置只需几分钟即可创建并启动一个带热重载保存时静态检查以及可用于生产环境的构建配置的项目
2019-06-24 20:38:41 +08:00
### 官方代码参考
2018-03-04 18:18:19 +08:00
```
2019-06-24 20:38:41 +08:00
npm install -g @vue/cli
2018-03-04 18:18:19 +08:00
2019-06-24 20:38:41 +08:00
vue create my-app
2018-03-04 18:18:19 +08:00
2019-06-24 20:38:41 +08:00
cd my-app
2018-03-04 18:18:19 +08:00
2019-06-24 20:38:41 +08:00
npm run serve
```
2018-03-04 18:18:19 +08:00
2019-06-24 20:38:41 +08:00
我们根据上方的参考代码来看看利用 vue-cli 新建一个空的项目的步骤
2018-03-04 18:18:19 +08:00
2019-06-24 20:38:41 +08:00
### 安装 vue-cli命令行工具
2018-03-04 18:18:19 +08:00
2019-06-24 20:38:41 +08:00
安装命令如下
2018-03-04 18:18:19 +08:00
2019-06-24 20:38:41 +08:00
```bash
# 全局安装 vue-cli
$ npm install -g @vue/cli
```
2018-03-04 18:18:19 +08:00
2019-06-24 20:38:41 +08:00
### 初始化一个 simple 项目
2018-03-04 18:18:19 +08:00
1首先执行
```
2019-06-24 20:38:41 +08:00
vue create my-app
2018-03-04 18:18:19 +08:00
```
2019-06-24 20:38:41 +08:00
输入上方命令后会弹出一个选项
2018-03-04 18:18:19 +08:00
2019-07-28 20:01:37 +08:00
![](http://img.smyhvae.com/20190624_163626.png)
2018-03-04 18:18:19 +08:00
2019-06-24 20:38:41 +08:00
如果是初学者直接选`default`就行之后会自动生成一个空的初始化项目包含了项目目录以及项目依赖的脚本
2018-03-04 18:18:19 +08:00
2019-06-24 20:38:41 +08:00
这个空项目的工程文件如下请务必仔细研究这个项目的写法和目录结构
2018-03-04 18:18:19 +08:00
2019-07-28 19:55:39 +08:00
- [2019-06-21-vue-my-app.zip](https://download.csdn.net/download/smyhvae/11256220)
2018-03-04 18:18:19 +08:00
我们可以看到这个项目的结构
2019-07-28 20:01:37 +08:00
![](http://img.smyhvae.com/20190624_160726.png)
2018-03-04 18:18:19 +08:00
- src项目源码
- .babelrcES6编译插件的配置
- index.html单页面的入口
2019-06-24 20:38:41 +08:00
上方截图中`npm install `指的是下载各种依赖包`npm run dev`指的是打开发包`npm run build`指的是打生产包
2018-03-04 18:18:19 +08:00
2019-06-24 20:38:41 +08:00
2本地运行项目
2018-03-04 18:18:19 +08:00
```
2019-06-24 20:38:41 +08:00
cd my-app
2018-03-04 18:18:19 +08:00
2019-06-24 20:38:41 +08:00
npm run serve
2018-03-04 18:18:19 +08:00
```
2019-06-24 20:38:41 +08:00
浏览器输入`http://localhost:8080/`就可以让这个空的项目在本地跑起来
2018-03-04 18:18:19 +08:00
2019-07-28 20:06:16 +08:00
![](http://img.smyhvae.com/20190624_160229.png)
2018-03-04 18:18:19 +08:00
2019-06-24 20:38:41 +08:00
备注我们在 GitHub上下载的任何Vue有关的项目第一步都是要首先执行 npm install安装依赖的 mode_modules然后再运行我们发给同事的工程文件建议不要包含 `node_modules`
2018-03-04 18:18:19 +08:00
### 构建一个 simple 项目
2019-07-25 10:03:43 +08:00
构建一个空的项目首先执行
2018-03-04 18:18:19 +08:00
```
2019-06-24 20:38:41 +08:00
$ vue create vuedemo2
2018-03-04 18:18:19 +08:00
```
2019-07-28 19:55:39 +08:00
![](http://img.smyhvae.com/20190624_163726.png)
2019-06-24 20:38:41 +08:00
上图中选择 `Manually select features`然后根据提示依次输入
2019-07-28 19:55:39 +08:00
![](http://img.smyhvae.com/20190624_164305.png)
2018-03-04 18:18:19 +08:00
2018-03-09 17:27:01 +08:00
- project name**要求小写**
2018-03-04 18:18:19 +08:00
- description默认即可
- vue-router需要
2018-03-09 17:27:01 +08:00
- ESlint语法检查初学者可以暂时不需要
2018-03-04 18:18:19 +08:00
- 单元测试暂时也不需要
- e2e test不需要
2019-06-24 20:38:41 +08:00
选择 eslint 的配置
2018-03-04 18:18:19 +08:00
2019-07-28 20:06:16 +08:00
![](http://img.smyhvae.com/20190624_165001.png)
2018-03-04 18:18:19 +08:00
2019-06-24 20:38:41 +08:00
然后让这个空的项目就可以在浏览器上跑起来
2018-03-04 18:18:19 +08:00
## vue 项目结构分析
2018-05-02 21:31:28 +08:00
![](http://img.smyhvae.com/20180501_2100.png)
2018-03-04 18:18:19 +08:00
- buid打包配置的文件夹
- configwebpack对应的配置
- src开发项目的源码
- App.vue入口组件`.vue`文件都是组件
- main.js项目入口文件
- static存放静态资源
- `.babelrc`解析ES6的配置文件
- `.editorcofnig`编辑器的配置
- `.postcssrc.js`html添加前缀的配置
- `index.html`单页面的入口通过 webpack打包后会把 src 源码进行编译插入到这个 html 里面来
- `package.json`项目的基础配置包含版本号脚本命令项目依赖库开发依赖库引擎等
### 图片的base64编码
默认是10k以下建议都通过 base64编码在配置文件`webpack.base.conf.js`中进行修改
```
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('img/[name].[hash:7].[ext]')
}
```
2019-07-28 19:55:39 +08:00
## 我的公众号
想学习<font color=#0000ff>**代码之外的技能**</font>****id`qianguyihao`
扫一扫你将发现另一个全新的世界而这将是一场美丽的意外
![](http://img.smyhvae.com/20160401_01.jpg)