初始化一个新项目
要初始化一个新项目,创建一个文件夹test作为项目目录,打开一个终端将切换路径到test,运行代码:
1
2
3
4
5
6
7
8
9
10PS C:\Users\Administrator\Desktop\test> vue create test
运行结果如下:
Your connection to the default yarn registry seems to be slow.
Use https://registry.npmmirror.com for faster installation? (Y/n)输入Y回车
Vue CLI v5.0.8
? Please pick a preset: (Use arrow keys)
> Default ([Vue 3] babel, eslint)
Default ([Vue 2] babel, eslint)
Manually select features使用方向键选择
“ Manually select features”
(手动选择)选项后按下键盘上的回车键继续。1
2
3
4
5
6
7
8
9
10
11
12
13Vue CLI v5.0.8
? Please pick a preset: Manually select features
? Check the features needed for your project: (Press <space> to select, <a> to toggle all, <i> to invert selection, and
<enter> to proceed)
>(*) Babel
( ) TypeScript
( ) Progressive Web App (PWA) Support
( ) Router
( ) Vuex
( ) CSS Pre-processors
(*) Linter / Formatter
( ) Unit Testing
( ) E2E Testing可以看到第一个菜单允许选择想要包含在项目中的功能,确保
“Babel”
和“Linter / Formatter”
这两项是被选中的。若它们没有被选中,使用方向键切换,按空格键来选中它们,若它们被选中,按下回车键继续。1
2
3
4
5
6Vue CLI v5.0.8
? Please pick a preset: Manually select features
? Check the features needed for your project: Babel, Linter
? Choose a version of Vue.js that you want to start the project with (Use arrow keys)
> 3.x
2.x接下来为选择Vue.js版本,使用方向键选中3.x选项后按下键盘上的回车键继续。
1
2
3
4
5
6
7
8
9Vue CLI v5.0.8
? Please pick a preset: Manually select features
? Check the features needed for your project: Babel, Linter
? Choose a version of Vue.js that you want to start the project with 3.x
? Pick a linter / formatter config: (Use arrow keys)
> ESLint with error prevention only
ESLint + Airbnb config
ESLint + Standard config
ESLint + Prettier接下来为
linter / formatter
选择一个配置,使用方向键选中"ESLint with error prevention only"
选项后按下键盘上的回车键继续。这样可以辅助我们捕获常见的错误。1
2
3
4
5
6
7
8
9Vue CLI v5.0.8
? Please pick a preset: Manually select features
? Check the features needed for your project: Babel, Linter
? Choose a version of Vue.js that you want to start the project with 3.x
? Pick a linter / formatter config: Basic
? Pick additional lint features: (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to
proceed)
>(*) Lint on save
( ) Lint and fix on commit接下来选择需要哪种自动化的Lint,使用方向键选中
"Lint on save"
选项后按下键盘上的回车键继续。1
2
3
4
5
6
7
8
9Vue CLI v5.0.8
? Please pick a preset: Manually select features
? Check the features needed for your project: Babel, Linter
? Choose a version of Vue.js that you want to start the project with 3.x
? Pick a linter / formatter config: Basic
? Pick additional lint features: (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to
proceed)
>(*) Lint on save
( ) Lint and fix on commit接下来选择把配置文件放在哪里。
"In dedicated config files"
这个选项会把配置文件单独放在一个文件里,另一个选项"In package.json"
会把配置文件放仅项目文件package.json
里。选择"In dedicated config files"
选项后按下键盘上的回车键继续。1
2
3
4
5
6
7
8
9Vue CLI v5.0.8
? Please pick a preset: Manually select features
? Check the features needed for your project: Babel, Linter
? Choose a version of Vue.js that you want to start the project with 3.x
? Pick a linter / formatter config: Basic
? Pick additional lint features: Lint on save
? Where do you prefer placing config for Babel, ESLint, etc.? (Use arrow keys)
> In dedicated config files
In package.json最后选择是否把这次的选择作为未来的预设配置。输入
y
后按下键盘上的回车键后输入保存的配置名称。然后脚手架工具就开始构建项目,并且安装所需的依赖。1
2
3
4
5
6
7
8Vue CLI v5.0.8
? Please pick a preset: Manually select features
? Check the features needed for your project: Babel, Linter
? Choose a version of Vue.js that you want to start the project with 3.x
? Pick a linter / formatter config: Basic
? Pick additional lint features: Lint on save
? Where do you prefer placing config for Babel, ESLint, etc.? In dedicated config files
? Save this as a preset for future projects? (y/N)
项目结构
如果前面的步骤都顺利执行的话,脚手架工具已经在项目中创建了一系列的文件和目录,其项目结构如下:
eslintrc.js
:是eslint
的配置文件,可以通过它来管理校验规则babel.config.js
:是Babel
的配置文件,可以在开发中使用JavaScript的新特性,并且将其转换为在生成环境中可以跨浏览器运行的旧语法代码,也可以在这里配置额外的babel插件.browserslistrc
:是Browserslist
的配置文件,可以通过它来控制需要对哪些浏览器进行支持和优化public
:该目录包含一些在Webpack
编译过程中没有架构处理过的文件(index.html
除外)favicon.ico
:项目的图标,当前是一个Vue的logoindex.html
:应用模板文件,Vue应用会通过这个HTML页面来运行,也可以通过lodash
这种模板语法在这个文件里插值
src
:Vue应用的核心代码目录main.js
:应用的入口文件。目前它会初始化Vue应用并指定将应用挂载到index.html文件中的哪个HTML元素上。通常还会做一些注册全局组件或者添加额外的Vue库的操作App.vue
:Vue应用的根节点组件components
:用来存放自定义组件的目录,当前里面会有一个示例组件assets
:用来存放如CSS、图片这类的静态资源,可以用webpack
来操作和处理 根据创建项目时的配置项不同,可能会有一些其他的预设目录,比如选择了路由配置,会看到一个views
文件夹。
.vue
文件(单文件组件)
组件是构建Vue应用中非常重要的一部分,其可以把一个很大的应用程序拆分为独立创建和管理的不相干区块,然后彼此按需传递数据。
在其他框架鼓励把模板、逻辑和样式的代码区分成不同文件时,Vue提倡使用单文件组件,把模板、相关脚本和CSS整合到一起放在.vue
结尾的单文件中。这些文件最终会通过JS打包工具(如Webpack
)处理。
使用Vue CLI创建的项目被配置为开箱即用的情况下,可以在CLI创建项目中的src
文件夹里看到第一个.vue
文件:App.vue
。
App.vue
打开App.vue
文件,可以看到有<template>
、<script>
和<style>
三部分组成,分别包含了组件的模板、脚本和样式相关的内容。所有单文件组件内的结构都是这种类似的结构。
<tamplate>
包含了所有的标记结构和组件的展示逻辑。tamplate可以包含任何合法的HTML以及Vue特点的语法。如通过设置<tamplate lang="pug">
可以使用Pug模板来替代标准HTML。
<script>
包含组件中所有的非显示逻辑,<script>
标签默认导出一个JS对象。该对象用于在本地注册组件、定义属性、处理本地状态、定义方法等地方。在构建阶段这个包含<tamplate>
的对象会被处理和转换成为一个有render()
函数的Vue组件。
对于App.vue
,默认导出将组件的名称设置为app
,并通过将HelloWorld
组件添加到components
属性中来注册它。以这种方式注册组件时,意味着就是在本地注册,本地注册的组件只能在注册它们的组件内部使用,因此需要将其导入并注册到使用它们的每个组件文件中。
1 | <script> |
若想要使用TypeScript
语法,可以将<script>
标签的lang
属性设置为<script lang='ts'>
。
组件的CSS应写在<style>
标签里,若添加了<scoped>
属性(如<style scoped>
),Vue会把样式的范围显示在单文件组件的内容里。设置类似于CSS-in-JS的解决方案,只不过是允许书写纯粹的CSS。
注意:若通过CLI创建项目是选择了CSS预处理器,则可以将lang
属性添加到<style>
标签中,以便Webpack
可以在构建时处理内容。如<style lang="scss">
将允许在样式信息中使用SCSS语法。
本地运行程序
Vue CLI带有内置的开发服务器,因此可以无需自己配置服务器便可在本地运行并测试应用程序。CLI会以npm脚本的形式将serve
命令添加到项目的package.json
文件中,因此可以轻松地运行它。
在终端中,切换到项目所在的路径,输入npm run serve
或者yarn run serve
即可运行服务器,此时的终端应输出以下类似的内容:
1 | PS C:\Users\Administrator\Desktop\test\test> npm run serve |
若在浏览器中打开http://localhost:8080/
或http://10.17.212.3:8080/
,便可以看到应用程序。当前它应该包含欢迎信息、Vue文档的链接、使用CLI初始化应用程序时添加的插件链接,以及指向Vue社区和生态系统的其他有用链接。
改动应用
对应用做出第一步改动,删除Vue logo。打开App.vue
文件,在template部分删除<img>
元素
1 | <img alt="Vue logo" src="./assets/logo.png"> |
服务器仍在正常运行时,可以看到logo是即时从之前渲染的页面中消失。接下来再把HelloWorld
组件也删掉。
首先删除下面这一行:
1 | import HelloWorld from './components/HelloWorld.vue' |
若这时候保存App.vue
文件,渲染好的应用会因为找不到HelloWorld
组件而抛出一个错误。
在<script>
中将引入和注册组件的那几行删掉:
1 | components: { |
此时渲染好的应用不再显示错误了,只有一个空页面。
接下来来创建一个任务清单的应用。打开App.vue
文件,将下列代码删除:
1 | <HelloWorld msg="Welcome to Your Vue.js App"/> |
编写代码如下,在<div id="app">
中新增一个<h1>
标签,并将标题文案设为"To-Do List":
1 | <template> |
此时服务器会展示To-Do List
标题。
小结
学习至此,我们已经为示例应用程序创建了一些脚手架,使其可以运行,检查并进行了一些初步更改。后续将进一步研究并构建示例应用程序。使之允许存储项目列表,完成后将其选中,并按所有、已完成和未完成待办事项来过滤。
创建第一个Vue组件
Vue组件是由管理应用程序数据的JavaScript对象和映射到基础DOM结构的基于HTML语法的模板语法组成的。接下来要创建一个组件来表示待办事项列表中的每一个项目。
创建一个ToDoItem
组件
ToDoItem
组件将用来显示单一的待办事项,用它来建立待办事项列表。
在
test/srx/components
目录下,创建一个ToDoItem.vue
的新文件并打开在文件顶部添加
<template></template>
部分来创建组件中的模板部分在模板部分下面创建一个
<script></script>
部分。在<script>
标签内,添加一个默认导出对象export default{}
作为组件对象:1
2
3
4<template> </template>
<script>
export default{};
</script>
现在加上为ToDoItem
添加实际内容。Vue模板目前只允许一个根元素--一个元素需要包裹模板内的所有内容,因此要为该根元素使用一个<div>
。
在组件模板中添加一个空的
<div>
在
<div>
里添加一个checkbox
和一个对应的label
。给复选框添加一个id
,并添加一个for
属性,将复选框映射到标签上。1
2
3
4
5
6<template>
<div>
<input type="checkbox" id="todo-item" checked="false" />
<label for="todo-item">My Todo Item</label>
</div>
</template>
在应用程序中使用TodoItem组件