文章目录
简介:什么是脚手架
CLI
在我们开发大型项目的时候,那么需要并且必然使用CLI工具,我们需要考虑代码的目录结构、项目结构、部署、热加载、代码单元测试等事情。如果每个项目都要手动完成这些工作,那么无疑效率极低,所以我们需要通过脚手架工具来帮助我们完成这些事情。
vue cli
- CLI是 Command-Line Interface,翻译为命令行界面,俗称脚手架
- 使用vue-cli可以快速搭建Vue开发环境
- 使用vue-cli可以快速搭建对应的webpack配置
如何安装
安装Node
1.官网下载
https://nodejs.org/zh-cn/download/
2.更改路径
3.检查是否安装成功
cmd输入 # node -v
# node -v
出现此图则说明安装成功
安装后的本地目录设置
使用npm安装模块分为本地安装和全局安装。
本地安装:npm install express会安装到当前项目
全局安装:npm install express -g 会安装到指定的目录(node_global)
另外,如果没有设置全局目录node_global,那么全局安装的文件将会保存到:
C:\Users\hades\AppData\Roaming\npm(hases是自己设置的计算机名字)
所以,安装好node后,要设置一下node_global和node_cache(node缓存文件夹)
1.创建目录
在node安装目录创建node_global和node_cache文件夹
2.执行更改地址命令
npm config set prefix "D:\Program Files\nodejs\node_global"
npm config set cache "D:\Program Files\nodejs\node_cache"
安装淘宝镜像加速器cnpm
尽量少用cnpm,可能导致不能使用
首先安装express
#使用NPM(Node.js包管理工具)安装依赖时速度特别慢,为了安装Express,执行命令后两个多小时都没安装成功,最后只能取消安装,在安装时可以手动指定从哪个镜像服务器获取资源,可以使用阿里巴巴在国内的镜像服务器,命令如下:
npm install -gd express --registry=http://registry.npm.taobao.org
#只需要使用–registry参数指定镜像服务器地址,为了避免每次安装都需要--registry参数,可以使用如下命令进行永久设置:
npm config set registry http://registry.npm.taobao.org
#查看全局安装的目录
npm root -g
然后安装淘宝镜像
下载淘宝镜像
npm install cnpm -g --registry=http://registry.npm.taobao.org
cnpm -v
cnpm install
安装cnpm后设置环境变量
原环境变量如下!!!:
保持不变,然后在path中添加多一个cnpm的环境变量
你的cnpm.cmd所在的路径
通过Node安装vue-cil
npm install @vue/cli -g
如果原来已经安装了vue-cli的话需要先卸载原来的安装
npm uninstall vue-cli -g
测试是否安装成功
vue -V
查看检测,vue cli3后支持ui界面
vue ui
Vue cli 2(vue-cli)
目录解析
文件相关解析
- build文件夹【主要用来配置构建项目以及webpack打包文件配置】
- config文件夹【定义webpack配置变量】
- dev 开发配置
- index 主要配置
- prod 生产配置
- node_modules 【node依赖】
- static 【静态资源】
- package.json文件【管理node包】
- npm run dev
- npm run build
- npm run start
- package-lock.json文件【node版本映射】
cli2脚手架文件解析
- index.html 单页面应用【连接main.js入口文件】
-
本质上是一个单页面应用
-
?
为什么index.html是项目的入口
以及为什么index.html加载后会继续加载
main.js、App.vue、index.js,以及他们之间的关系是如何联系起来的呢,
这块的配置文件位于build文件夹下,包括webpack.dev.conf.js等,感兴趣的可以了解下
- ?index.html内容
在body体中只有一个div标签
,其id为app
,这个id将会连接到src/main.js
内容
<div id="app"></div>
默认引用了app.vue根组件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>y</title>
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
- main.js 【入口文件=关联路由+公共组件】
- ?main.js内容
在main.js中,新建了一个vue实例
,并使用el:#app
链接到index.html中的app
,并使用template引入组件<app>
和路由相关
的内容(具体的涉及到vue的语法规则,如果不理解的先记下来吧,继续往后看,等了解vue的相关内容后,可能会更清晰)。也就是说通过main.js我们关联到App.vue组件
new Vue({……})
- el:官方解释为实例提供挂载的元素。此处为index.html中的
- router:为router:router,的简写,指向引入文件中的routes:[]
- components:注册哪些组件,需在顶部引入文件
- template:替换挂载元素的模板组件,而挂载元素的内容都将被忽略。即用template替换index.html里面的
// 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/>'
})
- App.vue【根组件文件】
- ?App.vue内容
App.vue中的内容,是一个标准的App.vue模板的形式,包含了<template></template>、<script></script>、<style></style>
三部分,从template标签中可以看到,使用img标签加载了vue的图像,也就是我们使用npm run dev运行vue项目后看到的图像,那么图像下面的内容是从哪里渲染出来的呢?
我们注意到,<template>标签下,除了<img>标签外,还有<router-view>标签,<router-view>
标签将会把路由相关内容渲染在这个地方接下来,我们看一下路由的内容有哪些,在哪里出现的。其实,这个文件位于src/router/index.js中,我们看一下index.js中的代码
<router-view>
<template>
<div id="app">
<img src="./assets/logo.png">
<router-view/>
</div>
</template>
<script>
export default {
name: 'App'
}
</script>
<style>
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>
- index.js 【路由文件】
在index.js的代码中,建立了路由相关的内容,也就会渲染到app.vue下面的<router-view>
中。在index.js中,将helloworld组件发布为路由,换句说,index.js在这里就是将helloword发布为路由,以在图片下面进行展示helloword内容,接下来我们再看看components/helloword中的内容
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 = 单页面应用 = 入口文件 + 路由 + 组件
我们可以看到项目加载的过程是
index.tml【单页面应用,默认引用了app.vue根组件
】->main.js【入口文件,引入相关资源文件
】->app.vue【根组件文件组件嵌套
】->index.js【路由文件】->helloworld.vue【具体组件】
这里只是对我们运行项目后,如何出现首页面做了简单的解释,对具体的实现没有进行分析。
http://localhost:8080/#/,首次项目启动的路径,访问的是index.html
项目安装时runtime-only 和 run time-compiler
- runtime-compiler
- 先在components里面注册
- 放到template(模板html文件)里面
- 执行流程:template ->ast抽象语法树->render->v dom 虚拟dom->UI 真实dom
- runtime-only
- 性能更高
- 箭头函数
- 执行流程:render->v dom 虚拟dom->UI 真实dom
Vue cli 3(@vue/cli)
vue-cli 3 与 2 版本区别:
- 3 基于webpack4打造,2基于webpack3打造
- 理念是:0配置
- 移除了build和config目录
- 提供 vue ui 可视化配置
- 移除了static文件夹
- 新增了 public文件夹,把index.html移到public中
- main.js new Vue改造了挂载渲染(其实和2没有区别,只是底层多了一个判断)
目录解析
Vue cli 4
vue cli 4 主要升级点总结
1.“@vue/cli-plugin-babel”, “@vue/cli-plugin-eslint”, "@vue/cli-service"由 v3 的版本升级到了 v4
2.sass-loader由 v7 的版本升级到了 v8
3.core-js由 v2 的版本升级到了 v3
4.webpack-chain由 v4 的版本升级到了 v6
5.css-loader由 v1 的版本升级到了 v3
6.url-loader由 v1 的版本升级到了 v2
7.file-loader由 v3 的版本升级到了 v4
8.copy-webpack-plugin由 v4 的版本升级到了 v5
9.terser-webpack-plugin由 v1 的版本升级到了 v2
10.@vue/cli-plugin-pwa由 v3 的版本升级到了 v4
11.新增插件 vue add vuex vue add router
12.pug-plain已重命名为pug-plain-loader
13.默认目录结构已更改
src/store.js 改为 src/store/index.js
src/router.js 改为 src/router/index.js
14.由于兼容性原因,仍支持 router&routerHistoryMode 选项 preset.json
但是现在建议使用它来 plugins: { ‘@vue/cli-plugin-router’: { historyMode: true } }
获得更好的一致性
15.api.hasPlugin(‘vue-router’)不再受支持,现在 api.hasPlugin(‘router’)
16.lintOnSave 选项的默认值(未指定时)从 true 更改为 default
17.废弃vue-cli-service test:e2e
18.@vue/cli-plugin-e2e-nightwatch Nightwatch.js已从0.9升级到1.x
19.@vue/cli-plugin-unit-mocha 升级到Mocha 6
20.@vue/cli-plugin-unit-jest jest由 v23 升级到v24
21.@vue/cli-plugin-typescript 更好的ts支持
如何同时使用vue cli2和3
1.首先需要安装vue cli3在本地
2.全局安装桥架工具
npm install -g @vue/cli-init -g
3.使用命令创建vue cli2初始化项目(使用3直接vue ui / 命令构建即可)
# cli2初始化项目
vue init webpack my-project
# cli3初始化项目
vue create my-project
4.cd到目录,执行初始化命令并且根据提示安装
5.cli2脚手架文件目录(完成构建)
如何在cli3上构建config/build配置文件
方法一:创建vue.config.js(推荐)
# 这是一个固定写法,官方规定命名为vue.config.js
# module.exports 作用为把这里写的配置和隐藏目录的配置合并起来
module.exports = {
/* 部署生产环境和开发环境下的URL:可对当前环境进行区分,baseUrl 从 Vue CLI 3.3 起已弃用,要使用publicPath */
/* baseUrl: process.env.NODE_ENV === 'production' ? './' : '/' */
publicPath: process.env.NODE_ENV === 'production' ? '/public/' : './',
/* 输出文件目录:在npm run build时,生成文件的目录名称 */
outputDir: 'dist',
/* 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录 */
assetsDir: "assets",
/* 是否在构建生产包时生成 sourceMap 文件,false将提高构建速度 */
productionSourceMap: false,
/* 默认情况下,生成的静态资源在它们的文件名中包含了 hash 以便更好的控制缓存,你可以通过将这个选项设为 false 来关闭文件名哈希。(false的时候就是让原来的文件名不改变) */
filenameHashing: false,
/* 代码保存时进行eslint检测 */
lintOnSave: true,
/* webpack-dev-server 相关配置 */
devServer: {
/* 自动打开浏览器 */
open: true,
/* 设置为0.0.0.0则所有的地址均能访问 */
host: '0.0.0.0',
port: 8066,
https: false,
hotOnly: false,
/* 使用代理 */
proxy: {
'/api': {
/* 目标代理服务器地址 */
target: 'http://47.100.47.3/',
/* 允许跨域 */
changeOrigin: true,
},
},
},
}
方法二:在隐藏的目录中修改(不推荐)
—end