前言
本文将介绍Vue-CLI的使用。
Vue-CLI
介绍
CLI:Command-Line Interface,俗称脚手架
。
使用Vue-CLI可以快速搭建Vue开发环境以及对应的webpack配置。
注意:以下内容主要介绍CLI2和CLI3.
使用前提:需要NodeJS
和Webpack
基本使用(CLI2)
安装
在终端键入如下命令(注意指定版本号)进行全局安装:
1 | npm install @vue/cli -g |
如果想按照Vue-CLI2的方式初始化项目需要安装2.x的模板,在终端键入如下命令(注意指定版本号):
1 | npm install @vue/cli-init -g |
初始化项目
在终端键入命令:
1 | vue init webpack projectname |
这里进行Vue-CLI2的项目展示:
创建项目时会遇到如下选项:
-
创建时的项目名称
:会根据该名称创建项目文件夹,存放之后的项目内容。不能包含大写字母等。 -
Project name
:可以设置,默认为创建时的项目名称。 -
Project description
:默认为A Vue.js project
。 -
Author
:作者的信息,默认从.gitconfig
文件中读取。 -
Vue build
:有两种构建版本可选择(runtime-compiler
和runtime-only
)。 -
Install vue-router
:选择是否创建路由。 -
Use ESLint to lint your code
:是否选择ESLint检测代码规范。如果安装了之后想取消规范检测,在
config
文件夹下的index.js
中,找到uesEslint
选项,将其设置为false。 -
Set up unit tests
:是否添加单元测试。 -
Setup e2e test with Nightwatch
:e2e(end-to-end)测试。安装Nightwatch,是一个利用
selenium
或webdriver
或phantomjs
等进行自动化测试的框架。 -
Should we run 'npm install' ...
:选择两种安装方式。
最后敲击回车,自动开始创建项目。
项目目录结构
-
package.json
文件如之前配置一样:
执行
npm run dev/start
运行服务器,执行npm run build
进行项目打包 -
build
和config
文件夹定义了一些变量,包括开发时和打包发布时的不同配置。 -
node_modules
文件夹存放的就是项目依赖的一些模块。 -
src
文件夹存放的就是项目的代码。 -
static
文件夹存放一些静态资源,打包后该文件夹的内容会“原封不动”地复制到输出文件夹dist
中。以图片资源为例,不会重命名,不会转为base64编码。
-
.babelrc
文件:ES代码相关转化配置。 -
.editorconfig
文件:项目文本相关配置。 -
.eslintignore
文件:对指定文件夹下的代码做ESLint
检测的忽略。 -
.gitignore
文件:Git仓库忽略的文件夹配置。 -
.eslintrc.js
文件:代码检测配置的内容(如果安装了ESLint
)。 -
.postcssrc.js
文件:进行css转化时的一些配置。 -
index.html
文件:模板。
项目运行
启动服务器:
1 | npm run dev/start |
项目打包:
1 | npm run build |
runtime-compiler与runtime-only的区别
main.js
直接看两种不同构建版本项目的main.js
文件。
runtime-compiler
:
1 | import Vue from 'vue' |
runtime-only
:
1 | import Vue from 'vue' |
很明显可以看到二者App
的使用方式不同:
runtime-compiler
:首先在components
中注册组件,然后template
使用模板runtime-only
:并没有注册App
,直接利用render属性(本质是一个函数),利用一个“箭头函数”进行使用。
首先要理解Vue程序运行过程:
- 当把一个模板(template)传入Vue实例中,Vue会将其保存至Vue实例下的一个
options
中 - 然后将其进行解析(parse)称为
ast
(abstract syntax tree,抽象语法树) - 对ast进行编译(compile)成一个render函数
- 通过render函数把对应的模板翻译成虚拟DOM树(virtual dom)
- 最后把虚拟DOM树渲染成真实的DOM(UI)
runtime-compiler
会经历上述的一系列步骤:
template → ast → render → 虚拟DOM → UI
而runtime-only
只经历三步:
render → 虚拟DOM → UI
由此分析得出结论:
-
runtime-only
的性能更优 -
runtime-only
的代码量更少
render函数
下面来介绍一下render函数究竟是为何物。
实际上render属性的写法如下,这里会涉及到createElement
函数(就是h
):
用法一:
createElement('标签', {标签的属性}, [标签的内容])
1 | render: function (createElement) { |
注意:标签内容的数组可以嵌套新的
createElement
函数。
运行效果如下:
用法二:传入组件对象
例如创建如下cpn
组件:
1 | const cpn = { |
在createElement
函数中直接传入该组件对象:
1 | render: function (createElement) { |
运行效果如下:
如此一来就不难理解,最初可以直接传参App
了:
1 | render: function (h) { |
等同于:
1 | render: h => h(App) |
Vue CLI3
Vue CLI3与2版本的区别:
- vue-cli3是基于webpack4打造,vue-cli2是webapck3
- vue-cli3的设计原则是“0配置”,移除的配置文件根目录下的
build
和config
等目录(做了隐藏设计) - vue-cli3提供了
vue ui
命令,提供了可视化配置 - 移除了
static
文件夹,新增了public
文件夹,并且index.html
文件移动到其中
初始化项目
在终端键入命令:
1 | vue create projectname |
创建项目时会遇到如下选项:
-
Please pick a preset
:有两个选项(默认(babel、eslint)和手动)如果选择手动配置,会出现诸多选项,按
空格键
选择/取消。 -
针对于Babel、PostCSS、ESLint等配置选择新建配置文件存放或是存放至
package.json
文件一般情况选择前者,单独创建新的配置文件。
-
是否将刚刚手动配置创建一个新的preset
如果选择Yes会让你起一个名字,并且选择
Yarn
或者NPM
。如果想要删除手动创建的
preset
,找到.vuerc
文件中的presets
属性,在其中进行删除,保存。
项目目录结构
Vue CLI3的目录结构交Vue CLI2要简单许多,需要注意的就是public
文件夹,可以把它类比为2版本中的static
文件夹。
项目运行
启动服务器:
1 | npm run serve |
项目打包:
1 | npm run build |
main.js
Vue CLI3中的main.js
文件内容如下:
1 | import Vue from 'vue' |
实际上跟之前的el: '#app'
挂载没有区别,el挂载也会执行mount('#app')
。
Vue项目管理器(UI)
在终端键入如下命令:
1 | vue ui |
则会启动一个本地服务,运行在8000端口,展示Vue项目管理器(如下图):
导入一个项目:
这里就可以利用可视化界面安装插件和依赖,还可以进行项目配置信息的修改。
修改配置
如果需要手动修改一些配置信息,由于build
和config
文件夹被取消,因此需要手动在项目根目录创建文件:
vue.config.js
(固定文件名,不得修改),在其中手动添加配置信息:
1 | module.exports = { |
添加的配置信息会自动与原有的进行合并,作为整体的配置。
后记
基本很少使用图形化界面。
Vue CLI3中会在项目根目录下自动创建git,方便项目管理。