构建一个 vue
项目最简单的方式就是使用脚手架工具 vue-cli
。前端的三大框架都有自己的脚手架工具,其作用就是用配置好的模板迅速搭建起一个项目工程来,省去自己配置 webpack
配置文件的基本内容,大大降低了初学者构建项目的难度。这节我们看看如何使用 vue-cli
构建 vue
项目以及对构建项目的具体分析。
一、环境搭建
node
和 npm
是必不可少的,这里不再介绍。
1、安装 vue-cli
$ npm install -g vue-cli
检查是否安装成功:
$ vue --version 3.3.0
<!-- more -->
2、构建项目
$ vue init webpack hello-vue
初始化的过程中,会有一个交互式的选项让你选择项目的一些配置,根据项目需求选择即可。为了方便后面几篇教程的演示,可以统一选择以下选项:
"htmlcode"># Project initialization finished! # ======================== To get started: cd hello-vue npm run dev Documentation can be found at https://vuejs-templates.github.io/webpack3、启动项目
$ cd hello-vue $ npm run dev项目默认会在 8080 端口启动,如果端口有占用,会自动调整端口。打开浏览器输入:
http://localhost:8080
,会看到构建的项目的主页:4、目录结构
使用编辑器打开(推荐使用
VSCode
),下面具体看看目录结构:
package.json
:{ "scripts": { "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", "start": "npm run dev", "unit": "cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run", "e2e": "node test/e2e/runner.js", "test": "npm run unit && npm run e2e", "lint": "eslint --ext .js,.vue src test/unit test/e2e/specs", "build": "node build/build.js" } }在
package.json
中,根据我们在构建项目的时候的选项,有以下几个命令。
npm run dev
:项目开发阶段,项目启动的命令;npm run lint
:使用eslint
检查代码格式;npm run test
:单元测试和e2e
测试;npm run e2e
:e2e
测试;npm run build
:开发完成后执行,会把我们的源代码编译成最终的发布代码,生成在项目根目录中的dist
文件夹下(初始化项目时不会生成)。
config
: 保存一些项目初始化配置。
build
:里面保存一些 webpack
的初始化配置。
index.html
: 是我们的首页。index
很多时候都被预设为首页,像 index.htm
,index.php
等。
src
: 保存项目源代码的地方,我们下面会详细分析该文件夹里的文件。
二、代码分析
Vue
的核心架构分为两个部分:路由和组件,其实 React
也是一样的。我们在切入一个项目的时候,都是从这两个点出发。下面我们具体看看 src
文件夹。
1、入口文件
如果我们打开项目根目录下 build
目录中的 webpack.base.conf.js
,会看到这样的代码(第22行):
module.exports = { context: path.resolve(__dirname, '../'), entry: { app: './src/main.js' }, // ... }
说明我们的入口文件就是 src
目录下的 main.js
文件。看看代码:
// The Vue build version to load with the `import` command // (runtime-only or standalone) has been set in webpack.base.conf with an alias. import Vue from 'vue'; import App from './App'; import router from './router'; Vue.config.productionTip = false; /* eslint-disable no-new */ new Vue({ el: '#app', router, components: { App }, template: '<App/>', });
看看这里面做了什么事情:
- 引入
vue
并起名叫作Vue
- 引入根目录下的
App.vue
文件(后缀名可不要) - 引入
router
文件下的index.js
文件(文件夹后没有具体的文件,默认引入的就是index.js
文件) - 通过
new
实例化Vue
实例 ,实例化的时候声明了几个属性:el:'#app'
:意思是将所有视图放在id
值为app
这个dom
元素中,也就是项目根目录下的index.html
中的那个div
:<div id="app"></div>
;components: { App }
:意思是将上面引入的App.vue
文件的内容将以<App/>
这样的标签写进<div id="app"></div>
中;
在开始的时候,我们并没有介绍说 Vue
使用的是虚拟 DOM
,那么,从这里我们看出,Vue
使用的也是虚拟 DOM
(和React
是一样的)。
这里对虚拟DOM
作下简单介绍:当我们修改应用程序时,不会对DOM
进行更改,而是创建以JavaScript
数据结构形式存在的DOM
副本,然后插到文档当中。无论何时进行任何更改,都将对JavaScript
数据结构进行更改,并将后者与原始数据结构进行比较(diff
算法),然后将最终更改更新为真实DOM
。我们都知道DOM
是非常重的,所以虚拟DOM
是非常省性能的。
2、App.vue
通过入口文件中做的事情,我们其实已经知道 App.vue
的作用了:单页面应用的主组件。所有页面都是在 App.vue
下通过路由进行切换的。所以,我们可以理解为所有的路由(route
)也是 App.vue
的子组件。我们看看代码:
<template> <div id="app"> <img src="/UploadFiles/2021-04-02/logo.png">这里需要提一下:node
之所以可以识别出*·vue
格式的文件,是因为webpack
在编译时将*.vue
文件中的html
、js
、css
都抽出来形成新的单独文件。可通过npm run build
命令编译源代码,查看dist
文件下的文件来验证。
App.vue
的内容分为三个部分:<template>...</template>
、<script>...</script>
、<style>...</style>
,分别在这三类标签里面写入结构、脚本、样式。我们先从
<template>
看起:里面一个div
包裹着img
标签和router-view
标签。前面提到过:App.vue
是单页面应用的主组件。对照着前面在浏览器中打开的应用主页面,img
标签就是页面上方的Vue
的logo
。那下面的内容去哪了呢?和<router-view/>
有关系吗?这就要去看路由了。3、router/index.js
import Vue from 'vue'; import Router from 'vue-router'; import HelloWorld from '@/components/HelloWorld'; Vue.use(Router); export default new Router({ routes: [ { path: '/', name: 'HelloWorld', component: HelloWorld, }, ], });前面先引入了路由插件
vue-router
,然后显式声明要用路由Vue.use(Router)
。路由的配置非常地明了:给不同path
分配不同的组件(或者页面),参数name
只是用来识别。当我访问根路由
http://localhost:8080/#/
时,App.vue
中的<router-view/>
就会把引入的HelloWorld
组件分配给我,放在了img
标签的下面,打开components
目录下的HelloWorld.vue
就可以看到具体内容了。我们在看到浏览器中的url
的时候会觉得奇怪,为什么在后面加了一个#
号呢?这是因为vue-router
默认hash
模式 —— 使用URL
的hash
来模拟一个完整的URL
,当 URL 改变时,页面不会重新加载。详见:https://router.vuejs.org/zh/guide/essentials/history-mode.html。这里可先跳过这点内容。现在,我们在浏览器访问
http://localhost:8080/#/vue
这个地址,会发现只出现了Vue
的logo
。这是因为我们并没有配置/vue
这个路由,找不到路由,那<router-view/>
这个标签就不会加载出来。到这里,我们就知道路由是如何根据
url
来分配不同的组件了。配置多个路由就很简单了:export default new Router({ routes: [ { path: '/', name: 'HelloWorld', component: HelloWorld }, { path: '/about', name: 'about', component: About }, { path: '/vue', name: 'vue', component: Vue } ] })那如果要访问
http://localhost:8080/#/vue/demo
怎么办呢?export default new Router({ routes: [ { path: '/', name: 'HelloWorld', component: HelloWorld, }, { path: '/about', name: 'about', component: About, }, { path: '/vue', name: 'vue', component: Vue, children: [ { path: '/demo', component: demo, }, { path: '/project', component: project, }, ], }, ], });给路由加多一个子路由配置即可。
4、assets
用来存放一些图片、样式等静态文件。
三、总结
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 中国武警男声合唱团《辉煌之声1天路》[DTS-WAV分轨]
- 紫薇《旧曲新韵》[320K/MP3][175.29MB]
- 紫薇《旧曲新韵》[FLAC/分轨][550.18MB]
- 周深《反深代词》[先听版][320K/MP3][72.71MB]
- 李佳薇.2024-会发光的【黑籁音乐】【FLAC分轨】
- 后弦.2012-很有爱【天浩盛世】【WAV+CUE】
- 林俊吉.2012-将你惜命命【美华】【WAV+CUE】
- 晓雅《分享》DTS-WAV
- 黑鸭子2008-飞歌[首版][WAV+CUE]
- 黄乙玲1989-水泼落地难收回[日本天龙版][WAV+CUE]
- 周深《反深代词》[先听版][FLAC/分轨][310.97MB]
- 姜育恒1984《什么时候·串起又散落》台湾复刻版[WAV+CUE][1G]
- 那英《如今》引进版[WAV+CUE][1G]
- 蔡幸娟.1991-真的让我爱你吗【飞碟】【WAV+CUE】
- 群星.2024-好团圆电视剧原声带【TME】【FLAC分轨】