vue-cli 版本3.0项目搭建和详解
介绍首先官方文档:https://cli.vuejs.org/Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统。有三个组件:cli:@vue/cli 全局安装的 npm 包,提供了终端里的vue命令(如:vue create 、vue serve 、vue ui 等命令)cli 服务:@vue/cli-service是一个开发环境依赖。构建于 webpack 和 webpack-d
介绍
首先官方文档:https://cli.vuejs.org/
Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统。有三个组件:
cli:@vue/cli
全局安装的 npm 包,提供了终端里的vue命令(如:vue create 、vue serve 、vue ui 等命令)
cli 服务:@vue/cli-service
是一个开发环境依赖。构建于 webpack 和 webpack-dev-server 之上(提供 如:serve
、build
和inspect
命令)
cli 插件:给Vue 项目提供可选功能的 npm 包 (如: Babel/TypeScript 转译、ESLint 集成 等)
安装
Vue CLI 3需要 nodeJs ≥ 8.9 (官方推荐 8.11.0+,你可以使用 nvm 或 nvm-windows在同一台电脑中管理多个 Node 版本)
安装@vue/cli(Vue CLI 3的包名称由vue-cli
改成了@vue/cli
)
第一步:删除以前安装的vue-cli2.0
npm uninstall vue-cli
# OR
npm uninstall vue-cli -g
# OR
yarn global remove vue-cli
第二步:全局安装vue-cli3.0
npm install @vue/cli -g
# OR
npm install -g @vue/cli
# OR
npm i @vue/cli -g
# OR
yarn global add @vue/cli
# 你还可以用这个命令来检查其版本是否正确 (3.x):
vue --version
# OR
vue -V
G:\privatePorject\webPorject\front-end-document-project\client>vue -h
Usage: vue <command> [options]
Options:
-V, --version output the version number
-h, --help output usage information
Commands:
create [options] <app-name>
create a new project powered by vue-cli-service
// 创建一个由vue-cli-service 支持的新项目
add [options] <plugin> [pluginOptions]
install a plugin and invoke its generator in an already created project
// 在已有的项目中添加插件
invoke [options] <plugin> [pluginOptions]
invoke the generator of a plugin in an already created project
// 在开发者模式下零配置运行一个js或vue文件
inspect [options] [paths...]
inspect the webpack config in a project with vue-cli-service
// 在vue-cli-service的项目中检查webpack配置
serve [options] [entry]
serve a .js or .vue file in development mode with zero config
// 可以理解为开发环境下启动命令
build [options] [entry]
build a .js or .vue file in production mode with zero config
// 打包 (在生产模式下零配置构建一个js或者vue文件)
ui [options]
start and open the vue-cli ui
// vue3.0提供的一个UI
init [options] <template> <app-name>
generate a project from a remote template (legacy API, requires @vue/cli-init)
// 旧api 需要@vue/cli-init // 就是原来的vue-cli init <template> <app-name>
config [options] [value]
inspect and modify the config
// 项目配置文件
upgrade [semverLevel]
upgrade vue cli service / plugins (default semverLevel: minor)
// 更新插件或者配置文件
info
print debugging information about your environment
// 打印出来vue配置文件
Run vue <command> --help for detailed usage of given command.
使用
创建项目
vue create project(项目名称)//文件名 不支持驼峰(含大写字母)
vue create my-vue
# 首先,会提示你选择一个preset(预设):
my-vue:我自己以前配置的保存下来,下次可以直接用
default:默认
Manually select features:手动选择,我们用手动选择,不然以后还得下插件
① 除最后两个,其他选项都是你此前保存的预设配置(如下图第一个“ preset-config”是我之前保存的预设配置,如今便可以直接用了)
② default(babel,eslint):
默认设置(直接enter)非常适合快速创建一个新项目的原型,没有带任何辅助功能的 npm包
③ Manually select features:
手动配置(按方向键 )是我们所需要的面向生产的项目,提供可选功能的 npm 包
? Check the features needed for your project: (Press <space> to select, <a> to toggle all, <i> to invert selection)
>( ) Babel //转码器,可以将ES6代码转为ES5代码,从而在现有环境执行。
( ) TypeScript// TypeScript是一个JavaScript(后缀.js)的超集(后缀.ts)包含并扩展了 JavaScript 的语法,需要被编译输出为 JavaScript在浏览器运行,目前较少人再用
( ) Progressive Web App (PWA) Support// 渐进式Web应用程序
( ) Router // vue-router(vue路由)
( ) Vuex // vuex(vue的状态管理模式)
( ) CSS Pre-processors // CSS 预处理器(如:less、sass)
( ) Linter / Formatter // 代码风格检查和格式化(如:ESlint)
( ) Unit Testing // 单元测试(unit tests)
( ) E2E Testing // e2e(end to end) 测试
选择完后直接enter,然后会提示你选择对应功能的具体工具包,选择自己擅长或者使用广泛的(方便遇到问题时百度),简介如下:
# Vue-Router 利用了浏览器自身的hash 模式和 history 模式的特性来实现前端路由(通过调用浏览器提供的接口)
hash: 浏览器url址栏 中的 # 符号(如这个 URL:http://www.abc.com/#/hello,hash 的值为“ #/hello”),hash 不被包括在 HTTP 请求中(对后端完全没有影响),因此改变 hash 不会重新加载页面
history:利用了 HTML5 History Interface 中新增的 pushState( ) 和 replaceState( ) 方法(需要特定浏览器支持)。单页客户端应用,history mode 需要后台配置支持(详细参见:https://router.vuejs.org/zh/guide/essentials/history-mode.html)
# css预处理器
主要为css解决浏览器兼容、简化CSS代码 等问题(*<u style="box-sizing: inherit;"> Sass诞生于2007年,最早也是最成熟的一款CSS预处理器语言。</u>)
? Please pick a preset: Manually select features
? Check the features needed for your project: Router, Vuex, CSS Pre-processors, Linter, Unit
? Pick a CSS pre-processor (PostCSS, Autoprefixer and CSS Modules are supported by default):
> SCSS/SASS //Sass安装需要Ruby环境,是在服务端处理的,SCSS 是 Sass3新语法(完全兼容 CSS3且继承Sass功能)
LESS //Less最终会通过编译处理输出css到浏览器,Less 既可以在客户端上运行,也可在服务端运行 (借助 Node.js)
Stylus //Stylus主要用来给Node项目进行CSS预处理支持,Stylus功能上更为强壮,和js联系更加紧密,可创建健壮的、动态的的CSS。
# ESLint:提供一个插件化的javascript代码检测工具
? Pick a linter / formatter config: (Use arrow keys)
> ESLint with error prevention only
ESLint + Airbnb config
ESLint + Standard config
ESLint + Prettier //使用较多
# 何时检测:
? Pick additional lint features: (Press <space> to select, <a> to toggle all, <i> to invert selection)
>( ) Lint on save // 保存就检测
( ) Lint and fix on commit // fix和commit时候检查
# 单元测试
? Pick a unit testing solution: (Use arrow keys)
> Mocha + Chai //mocha灵活,只提供简单的测试结构,如果需要其他功能需要添加其他库/插件完成。必须在全局环境中安装
Jest //安装配置简单,容易上手。内置Istanbul,可以查看到测试覆盖率,相较于Mocha:配置简洁、测试代码简洁、易于和babel集成、内置丰富的expect
# 如何存放配置
? Where do you prefer placing config for Babel, PostCSS, ESLint, etc.? (Use arrow keys)
> In dedicated config files // 独立文件放置
In package.json // 放package.json里
# 是否保存本次配置(之后可以直接使用):
? Save this as a preset for future projects? (Y/n) // y:记录本次配置,然后需要你起个名; n:不记录本次配置
序号 | 说明 | 图片 |
---|---|---|
1 | 选择创建方式 | |
2 | 选择配置 | |
3 | 选择css预编译1 | |
4 | 选择css预编译2 | |
5 | 选择代码规范 | |
6 | 选择何时检测、保存时检测还是提交时检测 | |
7 | 配置放在package.json文件中还是单独保存,选择单独 | |
8 | 是否保存这个配置,保存了以后可以直接用 | |
9 | 确定后等待下载依赖模块 | |
10 | 安装后移动到目录 并启动 | |
11 | 浏览器输入 http://localhost:8080/ |
项目目录
解决跨域问题
在2里面要解决跨域问题必然会修改proxyTable
在3里面则需要修改端口,在根目录下创建vue.config.js
vue.config.js相关配置请参考点击我跳转到vuecli3.0相关配置
// vue.config.js 配置说明
//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
// 这里只列一部分,具体配置参考文档
module.exports = {
//别名设置
configureWebpack: {
resolve: {
alias: {
'assets': '@/assets',
'components': '@/components',
'views': '@/views',
}
}
},
// 部署生产环境和开发环境下的URL。
// 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上
//例如 https://www.my-app.com/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.my-app.com/my-app/,则设置 baseUrl 为 /my-app/。
baseUrl: process.env.NODE_ENV === "production" ? "./" : "/",
// outputDir: 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)
outputDir: "dist",
//用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)
assetsDir: "assets",
//指定生成的 index.html 的输出路径 (打包之后,改变系统默认的index.html的文件名)
// indexPath: "myIndex.html",
//默认情况下,生成的静态资源在它们的文件名中包含了 hash 以便更好的控制缓存。你可以通过将这个选项设为 false 来关闭文件名哈希。(false的时候就是让原来的文件名不改变)
filenameHashing: false,
// lintOnSave:{ type:Boolean default:true } 问你是否使用eslint
lintOnSave: true,
//如果你想要在生产构建时禁用 eslint-loader,你可以用如下配置
// lintOnSave: process.env.NODE_ENV !== 'production',
//是否使用包含运行时编译器的 Vue 构建版本。设置为 true 后你就可以在 Vue 组件中使用 template 选项了,但是这会让你的应用额外增加 10kb 左右。(默认false)
// runtimeCompiler: false,
/**
* 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
* 打包之后发现map文件过大,项目文件体积很大,设置为false就可以不输出map文件
* map文件的作用在于:项目打包后,代码都是经过压缩加密的,如果运行时报错,输出的错误信息无法准确得知是哪里的代码报错。
* 有了map就可以像未加密的代码一样,准确的输出是哪一行哪一列有错。
* */
productionSourceMap: false,
// 它支持webPack-dev-server的所有选项
devServer: {
host: "localhost", //也可以直接写IP地址这样方便真机测试
port: 8080, // 端口号
https: false, // https:{type:Boolean}
open: true, //配置自动启动浏览器
// proxy: 'http://localhost:4000' // 配置跨域处理,只有一个代理
// 配置多个代理
proxy: {
"/api": {
target: "<url>", //写地址
ws: true, // 允许跨域
changeOrigin: true, //允许跨域
pathRewrite: {
"^/api": ""
}
},
"/foo": {
target: "<other_url>"
}
}
}
};
vuecli3 增加的内容
(1) GUI 图形化界面
这样可以增加插件,添加配置 方便管理
vue ui
(2) 个人认为最重要的就是
这个命令就是实现单个VUE文件的展示。以前要是写.vue文件必须依赖脚手架来查看最后的效果
现在敲这个命令 他会让你安装一个包。安装完以后。cd到这个文件的目录下。然后敲这个命令就能实现单个文件的查看
vue serve xxx.vue(单个vue名称)
(3) .env实现全局变量
在项目的根目录下新建一个文件.env文件然后里面写 名字URL可以随便起但是前面的VUE_APP不能更改
VUE_APP_URL(你自己起的名字) = http://www.baidu.com
然后项目中要使用这个变量的话只有在data里面获取这个变量,这样就获取到了
data(){
return {
url:process.env.VUE_APP_URL
}
}
vue-cli2.0 和 vue-cli3.01区别
vuex(状态管理)
vue cli 2 中:vuex是搭建完成后自己npm install的,并不包括在搭建过程中。可以看到vue cli 2的vuex默认文件夹(store)又包含了三个js文件:
action(存放一些调用外部API接口的异步执行的的方法,
然后commit mutations改变mutations 数据)、
index(初始化mutations 数据,是store的出口)、
mutations(处理数据逻辑的同步执行的方法的集合,
Vuex中store数据改变的唯一方法commit mutations)
vue cli 3 中:vuex是包含在搭建过程供选择的预设。vue cli 3 中默认只用一个store.js代替了原来的store文件夹中的三个js文件。action、mutations、state以及store 的 getters 的用法有很多,举常用的例子: store.js
// store.js
import Vue from 'vue';import Vuex from 'vuex';
//引入 vueximport store from './store'
//注册storeVue.use(Vuex);
export default new Vuex.Store({
// 初始化状态
state: {
count: 0
},
// 处理状态
mutations: {
increment(state, payload) {
state.count += payload.step || 1;
}
},
// 提交改变后的状态
actions: {
increment(context, param) {
context.state.count += param.step;
//提交改变后的state.count值
context.commit('increment', context.state.count)
},
incrementStep({state, commit, rootState}) {
if (rootState.count < 100) {
store.dispatch('increment', {//调用increment()方法
step: 10
})
}
}
}
})
// main.js:
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
//引入状态管理 store
Vue.config.productionTip = falsenew Vue({
router,
store,//注册store(这可以把 store 的实例注入所有的子组件)
render: h => h(App)
}).$mount('#app')
// components/HelloWorld.vue
<template>
<div class="home">
<HelloWorld :msg="count"/>
</div></template><script>
import HelloWorld from '@/components/HelloWorld.vue'
import {mapActions, mapState} from 'vuex' //注册 action 和 state
export default {
name: 'home',
computed: {
//在这里映射 store.state.count,使用方法和 computed 里的其他属性一样
...mapState([
'count'
]),
},
created() {
this.incrementStep();
},
methods: {
//在这里引入 action 里的方法,使用方法和 methods 里的其他方法一样
...mapActions([
'incrementStep'
]),
},
components: {
HelloWorld
}
}</script>
router (路由):
vue cli 2 :“ router/index.js ”
vue cli 3:“router.js”(用法和做的事都一样)
去掉 static 、 新增 public 文件夹
vue cli 2 :static 是 webpack 默认存放静态资源的文件夹,打包时会直接复制一份到dist文件夹不会经过 webpack 编译
vue cli 3 :摒弃 static 新增了 public 。vue cli 3 中“静态资源”两种处理方式:
经webpack 处理:在 JavaScript 被导入或在 template/CSS 中通过“相对路径”被引用的资源会被编译并压缩
不经webpack 处理:放置在 public 目录下或通过绝对路径被引用的资源将会“直接被拷贝”一份,不做任何编译压缩处理
index.html :
vue cli 2 :“index.html ”
ue cli 3 : “public/index.html ”此模板会被 html-webpack-plugin 处理的
src/views:
vue cli 3 的 src文件夹 新增 views文件夹 用来存放 “页面”,区分 components(组件)
去掉 build(根据config中的配置来定义规则)、config(配置不同环境的参数)文件夹
vue cli 3 中 ,这些配置 你可以通过 命令行参数、或 vue.config.js (在根目录 新建一个 vue.config.js 同名文件)里的 devServer 字段配置开发服务器
babel.config.js:
配置Babel 。Vue CLI 使用了 Babel 7 中的新配置格式 babel.config.js。和 .babelrc 或 package.json 中的 babel 字段不同,这个配置文件不会使用基于文件位置的方案,而是会一致地运用到项目根目录以下的所有文件,包括 node_modules 内部的依赖。官方推荐在 Vue CLI 项目中始终使用 babel.config.js 取代其它格式
根目录的一些其他文件的改变:
之前所有的配置文件都在vue create 搭建时preset预设 或者 后期可以通过 命令参数 、 vue.config.js 中配置
根据需要在根目录下新建 vue.config.js自行配置,
(简单配置,更多配置详情参见官网:https://cli.vuejs.org/zh/config/)
module.exports = {
baseUrl: '/',// 部署应用时的根路径(默认'/'),也可用相对路径(存在使用限制)
outputDir: 'dist',// 运行时生成的生产环境构建文件的目录(默认''dist'',构建之前会被清除)
assetsDir: '',//放置生成的静态资源(s、css、img、fonts)的(相对于 outputDir 的)目录(默认'')
indexPath: 'index.html',//指定生成的 index.html 的输出路径(相对于 outputDir)也可以是一个绝对路径。
pages: {//pages 里配置的路径和文件名在你的文档目录必须存在 否则启动服务会报错
index: {//除了 entry 之外都是可选的
entry: 'src/index/main.js',// page 的入口,每个“page”应该有一个对应的 JavaScript 入口文件
template: 'public/index.html',// 模板来源
filename: 'index.html',// 在 dist/index.html 的输出
title: 'Index Page',// 当使用 title 选项时,在 template 中使用:<title><%= htmlWebpackPlugin.options.title %></title>
chunks: ['chunk-vendors', 'chunk-common', 'index'] // 在这个页面中包含的块,默认情况下会包含,提取出来的通用 chunk 和 vendor chunk
},
subpage: 'src/subpage/main.js'//官方解释:当使用只有入口的字符串格式时,模板会被推导为'public/subpage.html',若找不到就回退到'public/index.html',输出文件名会被推导为'subpage.html'
},
lintOnSave: true,// 是否在保存的时候检查
productionSourceMap: true,// 生产环境是否生成 sourceMap 文件
css: {
extract: true,// 是否使用css分离插件 ExtractTextPlugin
sourceMap: false,// 开启 CSS source maps
loaderOptions: {},// css预设器配置项
modules: false// 启用 CSS modules for all css / pre-processor files.
},
devServer: {// 环境配置
host: 'localhost',
port: 8080,
https: false,
hotOnly: false,
open: true, //配置自动启动浏览器
proxy: {// 配置多个代理(配置一个 proxy: 'http://localhost:4000' )
'/api': {
target: '<url>',
ws: true,
changeOrigin: true
}, '/foo': {
target: '<other_url>'
}
}
},
pluginOptions: {// 第三方插件配置
// ...
}
};
拉取 2.x 模板 (旧版本):
Vue CLI 3 覆盖了旧版本的vue 命令,如果需要使用旧版本的 vue init 功能,可以全局安装一个桥接
npm install -g @vue/cli-init //`vue init` 的运行效果将会跟 `vue-cli@2.x` 相同
vue init webpack my-project
在现有的项目中安装插件(vue add 命令)
官方提示:vue add 的设计意图是为了安装和调用 Vue CLI 插件。这不意味着替换掉普通的 npm 包。对于这些普通的 npm 包,你仍然需要选用包管理器
!官方警告:我们推荐在运行 vue add 之前将项目的最新状态提交,因为该命令可能调用插件的文件生成器并很有可能更改你现有的文件
vue add @vue/eslint
//如果不带 @vue 前缀,该命令会换作解析一个 unscoped 的包,你也可以基于一个指定的 scope 使用(如:vue add @foo/bar)
更多推荐
所有评论(0)