1 vue-cli 3.x 简介


1.1 简介

  • Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统:是一个类似于 create-react-app 的可以用命令行快速配置和生成一个 vue 项目
  • 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 集成、unit 和 e2e 测试等)

1.2 具体工作

(1) 便捷的创建项目

(2) 添加 vue 插件快速配置项目

(3) 启动服务调试开发

(4) HTML 和静态资源 assets 的处理

(5) 配置 CSS ,配置 Webpack

(6) 配置环境变量和环境模式:针对不同环境进行打包,发布项目

2 使用安装


2.1 node版本要求

vue cli 需要 node 版本 >=8.9, (官方推荐:8.11.0+ )。可使用 node -v 命令去检测 node 的安装版本,如果没有安装可到这里安装:

中文官方下载地址:http://nodejs.cn/download/ 

2.2 安装 @vue/cli

(Vue CLI 3 的包名称由 vue-cli 改成了 @vue/cli)

命名方式已经改为 npm 推荐的新的包名规则,使用作用域。

包名规则介绍:https://zcfy.cc/article/the-npm-blog-new-package-moniker-rules

(1) 命令执行:任选其一

npm install -g @vue/cli
cnpm install -g @vue/cli

// 全局安装可能会受到限制,建议以管理员身份运行 sudo

(2) 安装完成

(3) 命令变化:可通过 vue -h 查看

  • create [options] <app-name>        // 创建一个由 vue-cli-service 支持的新项目
  • invoke <plugin>                             // 在已创建的项目中添加插件
  • serve [options] [entry]                    // 在开发者模式下以零配置运行一个 js 或 vue 文件
  • build [options] [entry]                     // 在生产模式下以零配置构建一个 js 或 vue 文件
  • init <template><app-name>          // 旧 api 需要 @vue/cli-init // 就是原来的 vue-cli init <template> <app-name>

3 搭建项目


3.1 vue create project-name

可以看到创建项目时会有个提示,会判断你对 npm/yarn 源的连接速度,询问你是否切换至淘宝镜像

首先,会提示你选择一个 preset(预设)

? Please pick a preset: 
> default (babel, eslint)    // 默认 
> Manually select features   // 手动选择功能

(1) default 路线

Pick the package manager to use when installing dependencies: // 用哪个下载依赖 > Use Yarn Use NPM

3.2 安装完成后进入项目文件,启动项目

cd cli-pro   // 进入项目下
npm run serve   // 启动项目

(2) Manually 路线:自定义路线

? Check the features needed for your project: (Press <space> to select, <a> to toggle all, <i> to invert selection) 
>( ) TypeScript  // JavaScript的一个超集(添加了可选的静态类型和基于类的面向对象编程:类型批注和编译时类型检查、类、接口、模块、lambda 函数) 
 ( ) 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) 测试

① 路由选择:

首先会让你选择是否使用 history router:Vue-Router 利用了浏览器自身的hash 模式和 history 模式的特性来实现前端路由(通过调用浏览器提供的接口)

  • hash: 浏览器 url 址栏中的 # 符号(如这个 URL:http://www.abc.com/#/hello,hash 的值为“ #/hello”),hash 不被包括在 HTTP 请求中(对后端完全没有影响),因此改变 hash 不会重新加载页面
  • history:利用了 HTML5 History Interface 中新增的 pushState() 和 replaceState() 方法(需要特定浏览器支持)
? Check the features needed for your project: Babel, Router, Vuex, CSS Pre-proce ssors, Linter 
? Use history mode for router? (Requires proper server setup for index fallback in production) No

② css预处理器:主要为css解决浏览器兼容、简化CSS代码 等问题

? 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 // Airbnb 配置
  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:不记录本次配置

4 项目结构区别


4.1 文件的精简度

vue cli 3.x 的目录结构图

vue cli 2.x 的目录结构

4.2 详细的配置区别

(1) 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 文件

import Vue from 'vue'; 
import Vuex from 'vuex'; 

Vue.use(Vuex); 

export default new Vuex.Store({
    state: {
        // 初始化状态 
        count: 0 
    },
    mutations: {
        // 处理状态 
        increment(state, payload) {
            state.count += payload.step 
        } 
    }, 
    actions: {
        // 提交改变后的状态 
        increment (context) {
            context.commit('increment') 
        } 
    } 
})

(2) 去掉 static  、 新增 public 文件夹

vue cli 2 :static 是 webpack 默认存放静态资源的文件夹,打包时会直接复制一份到 dist 文件夹不会经过 webpack 编译 

vue cli 3  :摒弃 static ,新增了 public 。vue cli 3 中“静态资源”两种处理方式:

  •    经 webpack 处理:在 JavaScript 被导入或在 template/CSS 中通过“相对路径”被引用的资源会被编译并压缩
  •    不经 webpack 处理:放置在 public 目录下或通过绝对路径被引用的资源将会“直接被拷贝”一份,不做任何编译压缩处理

(3) index.html :

vue cli 2 :“index.html ” 

vue cli 3 :“public/index.html ” // 此模板会被 html-webpack-plugin 处理的

(4) src/views:vue cli 3 的 src文件夹新增 views 文件夹用来存放 “页面”,区分 components(组件)

(5) 去掉 build(根据 config 中的配置来定义规则)、config(配置不同环境的参数)文件夹 :

 vue cli 3 中 ,这些配置 你可以通过 命令行参数、或 vue.config.js (在根目录 新建一个 vue.config.js 同名文件)里的 devServer 字段配置开发服务器

(6) babel.config.js:配置 Babel 。vue cli 3 使用了 Babel 7 中的新配置格式 babel.config.js。和 .babelrc 或 package.json 中的 babel 字段不同,这个配置文件不会使用基于文件位置的方案,而是会一致地运用到项目根目录以下的所有文件,包括 node_modules 内部的依赖。官方推荐在 Vue CLI 项目中始终使用 babel.config.js 取代其它格式。

(7) 根目录的一些其他文件的改变:之前所有的配置文件都在 vue create 搭建时 preset 预设,或者后期可以通过命令参数、 vue.config.js 中配置

根据需要在根目录下新建 vue.config.js自行配置 :配置参考 | Vue CLI

在 vue cli 3 中,webpack 的配置已经被脚手架默认了,并不会显示。如果我们需要手动配置 webpack 的一些配置,可以在根目录下,手动创建配置文件 vue.config.js。

Logo

前往低代码交流专区

更多推荐