使用@vue-cli搭建一个项目
@vue-cli是一个基于Vue.js进行快速开发的完整系统。
安装@vue-cli
在bash里输入以下代码安装,使用npm或者yarn都可以:
npm install -g @vue/cli
yarn global add @vue/cli
安装后验证是否安装成功:
vue --version
创建和配置项目
在bash里输入:
vue create 项目路径
提示:这里可以用点 . 来表示当前路径。
回车后会提示你配置项目,可以选默认的,也可以自己选择合适的配置。
项目实时预览
配置完后会自动初始化项目,初始化完成后会看到这两句提示:
按照提示执行,就可以实时的预览效果了。
如果觉得上面的过程很繁琐,我们还有一个简单的办法:
在codesandbox创建一个vue项目
第一步,打开:CodeSandbox网站:
第二步,点右上角的 Create Sandbox:
第三步,选择项目模板:
OK,三步搞定项目创建,还自带预览功能:
Vue的版本
注:下面的非完整版指的是只包含运行时版
| 版本 | 生产环境版本 | 特点 | 体积 | |
|---|---|---|---|---|
| 完整版 | vue.js | vue.min.js | 从HTML得到视图 | 较大 |
| 非完整版 | vue.runtime.js | vue.runtime.min.js | 用JS构建视图 | 较小 |
完整版 = 非完整版 + 编译器
非完整版 = 用来创建Vue实例、渲染并处理虚拟DOM
编译器:用来把模板字符串编译成JS渲染函数的代码;
从两个例子看下两个版本的区别:
完整版
创建一个项目,在public目录的index.html文件下引入vue.js完整版:
<div id="app"></div>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.9/vue.min.js"></script>
然后在src目录下找到main.js文件:
new Vue({
el:'#app',
template:`<div>{{n}}</div>>`,
data:{n:0}
})
这样可以在页面里看到n的值,或者这样写也可以:
// public/index.html
<div id="app">{{n}}</div>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.9/vue.min.js"></script>
// src/main.js
new Vue({
el:'#app',
data:{n:0}
})
这样也能达到同样的效果,这是因为完整版的vue.js里包含了编译器,只要是把HTML变成页面上的东西,完整版就是支持的,而不完整版这样写却是无效的。
非完整版(只包含运行时版)
在public目录的index.html文件下引入vue.js不完整版:
<div id="app"></div>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.9/vue.runtime.min.js"></script>
在src目录下的main.js文件里写:
new Vue({
el:'#app',
render(h){
return h('div',this.n)
},
data:{n:0}
})
这里的h可以理解为createElement;
考虑加一个功能,点击一个按钮就让n的数值加1,先来添加按钮:
new Vue({
el:'#app',
render(h){
return h('div',[this.n,h('button','+1')])
},
data:{n:0}
})
再实现功能:
new Vue({
el:'#app',
render(h){
return h('div',[this.n,h('button',{on:{click:this.add}},'+1')])
},
data:{n:0},
methods:{
add(){
this.n += 1
}
}
})
在APP.vue里实现功能
创建一个项目目录:
vue create vue-test
选完配置和初始化完成后:
// src/App.vue
<template>
<div id="app">
{{n}}
<button @click="add">+1</button>
</div>
</template>
<script>
export default {
name:'App',
data(){
return {n:0}
},
methods:{
add(){
this.n += 1
}
}
}
</script>
两个版本的区别
| 完整版 | 非完整版 | |
|---|---|---|
| 特点 | 有编译器(compiler) | 没有编译器 |
| 体积 | 较大 | 较小 |
| 视图 | 写在HTML里或者template选项里 | 写在render函数里,用h来创建标签 |
| cdn引入 | vue.js | runtime.js |
| webpack引入 | 需要配置alias | 默认使用此版 |
| @vue-cli引入 | 需要额外配置 | 默认使用此版 |
完整版的vue.js文件里有编译器,编译器识别这样的代码:
@click="add"
<div>{{n}}</div>
v-if、v-for
this.n +=1
然后把代码编译成DOM节点。
但是非完整版不包含编译器,所以没有这个功能,但是可以通过webpack里的vue-loader来转换代码。而这个vue-loader用户是不用下载的,我们在开发的时候,就已经转换完成了。这样我们写还是写HTML,但是通过vue-loader给翻译过来,而用户下载不完整版(即支持h函数的版本),体积更小,加载更快。
所以推荐使用非完整版,配合vue-loader和vue文件。
思路:
- 开发的时候,直接在vue文件里写HTML标签,而不用自己去写h函数;
- 然后用vue-loader把vue文件里写的HTML转为h函数;
- 用户下载的时候,JS文件体积更小,但是只支持h函数;