简介

说明

        本文用示例介绍vue的脚手架工具@vue/cli4的用法。

         Vue CLI 3.0后的包名称由 vue-cli 改成了 @vue/cli。

官网

​介绍 | Vue CLI​

@vue/cli4与@vue/cli3的区别

1.目录结构

左侧是@vue/cli3,右侧是@vue/cli4

@vue/cli4--使用/教程/实例_css

components:是小组件,可被引用在 components或views 中

views: 是页面级组件,一般 views 组件不被复用;

2.babel.config.js文件

babel 的预设由@vue/app 改成了@vue/cli-plugin-babel/preset

@vue/cli4--使用/教程/实例_css_02

3.依赖版本


  1. @vue/cli-plugin-babel", "@vue/cli-plugin-eslint", "@vue/cli-service"由 v3 的版本升级到了 v4
  2. ass-loader由 v7 的版本升级到了 v8
  3. ore-js由 v2 的版本升级到了 v3
  4. ebpack-chain由 v4 的版本升级到了 v6
  5. ss-loader由 v1 的版本升级到了 v3
  6. rl-loader由 v1 的版本升级到了 v2
  7. ile-loader由 v3 的版本升级到了 v4
  8. opy-webpack-plugin由 v4 的版本升级到了 v5
  9. erser-webpack-plugin由 v1 的版本升级到了 v2
  10. @vue/cli-plugin-pwa由 v3 的版本升级到了 v4
  11. 新增插件 vue add vuex vue add router
  12. pug-plain已重命名为pug-plain-loader

  1. 由于兼容性原因,仍支持 router&routerHistoryMode 选项 preset.json
  2. 但是现在建议使用它来 plugins: { '@vue/cli-plugin-router': { historyMode: true } }获得更好的一致性

  1. api.hasPlugin('vue-router')不再受支持,现在 api.hasPlugin('router')
  2. lintOnSave 选项的默认值(未指定时)从 true 更改为 default
  3. 废弃vue-cli-service test:e2e
  4. @vue/cli-plugin-e2e-nightwatch Nightwatch.js已从0.9升级到1.x
  5. @vue/cli-plugin-unit-mocha 升级到Mocha 6
  6. @vue/cli-plugin-unit-jest jest由 v23 升级到v24
  7. @vue/cli-plugin-typescript 更好的ts(x)支持 ,胜过js(x)

命令

安装

npm install -g @vue/cli


  • 一定要在全局模式下安装vue-cli,否则无法使用vue命令
  • 上边命令默认安装最新版vue-cli,可自行指定版本:npm install -g @vue/cli@版本号

安装完之后,可以验证是否安装成功:


  • vue   //会打印Vue-Cli帮助信息
  • vue -V  //打印Vue-Cli版本

启动/打包

这是个很棒的功能,用于开发一个库、组件,做一些小demo等都是非常适合的!

安装扩展

  • npm install -g @vue/cli-service-global

随便找个文件夹建一个.vue文件,然后跑起来


  • vue serve App.vue // 启动服务
  • 服务启动时生成一个node_modules包,服务支持ES6语法和热更新
  • vue build App.vue // 打包出生产环境的包并用来部署 
  • 打包时会生成一个dist文件夹。(新建一个test.vue文件也只有一个node_modules/dist文件夹) 

配置文件

官网

​官方文档​

简介

        可以在项目根目录下新建vue.config.js文件进行配置。

        vue.config.js 是一个可选的配置文件,如果项目的根目录中存在这个文件,那么它会被 @vue/cli-service 自动加载。

        如果使用vue ui命令进行图形化配置,最终配置的保存路径为:/node_modules/@vue/cli-service/lib/webpack.config.js

示例配置

module.exports = {
// 基本路径
publicPath: "./",

// 构建时的输出目录
outputDir: "dist",

// 放置静态资源的目录
assetsDir: "static",

// html 的输出路径
indexPath: "index.html",

//文件名哈希
filenameHashing: true,

//用于多页配置,默认是 undefined
pages: {
index: {
// page 的入口文件
entry: 'src/index/main.js',

// 模板文件
template: 'public/index.html',

// 在 dist/index.html 的输出文件
filename: 'index.html',

// 当使用页面 title 选项时,
// template 中的 title 标签需要是 <title><%= htmlWebpackPlugin.options.title %></title>
title: 'Index Page',

// 在这个页面中包含的块,默认情况下会包含
// 提取出来的通用 chunk 和 vendor chunk。
chunks: ['chunk-vendors', 'chunk-common', 'index']
},

// 当使用只有入口的字符串格式时,
// 模板文件默认是 `public/subpage.html`
// 如果不存在,就回退到 `public/index.html`。
// 输出文件默认是 `subpage.html`。
subpage: 'src/subpage/main.js'
},

// 是否在保存的时候使用 `eslint-loader` 进行检查。
lintOnSave: true,

// 是否使用带有浏览器内编译器的完整构建版本
runtimeCompiler: false,

// babel-loader 默认会跳过 node_modules 依赖。
transpileDependencies: [ /* string or regex */ ],

// 是否为生产环境构建生成 source map?
productionSourceMap: true,

// 设置生成的 HTML 中 <link rel="stylesheet"> 和 <script> 标签的 crossorigin 属性。
crossorigin: "",

// 在生成的 HTML 中的 <link rel="stylesheet"> 和 <script> 标签上启用 Subresource Integrity (SRI)。
integrity: false,

// 调整内部的 webpack 配置
configureWebpack: () => {}, //(Object | Function)
chainWebpack: () => {},

// 配置 webpack-dev-server 行为。
devServer: {
open: process.platform === 'darwin',

host: 'localhost',
port: 8080,
https: false,
hotOnly: false,

// 查阅 https://github.com/vuejs/vue-docs-zh-cn/blob/master/vue-cli/cli-service.md#配置代理

proxy: {
'/api': {
target: "http://app.ly.com",
changeOrigin: true,
secure: false,
pathRewrite: {
"^/api": ""
}

},

'/foo': {
target: '<other_url>'
}

}, // string | Object

before: app => {}
},

// CSS 相关选项
css: {
// 将组件内的 CSS 提取到一个单独的 CSS 文件 (只用在生产环境中)
// 也可以是一个传递给 `extract-text-webpack-plugin` 的选项对象
extract: true,

// 是否开启 CSS source map?

sourceMap: false,

// 为预处理器的 loader 传递自定义选项。比如传递给
// Css-loader 时,使用 `{ Css: { ... } }`。

loaderOptions: {
css: {
// 这里的选项会传递给 css-loader
},

postcss: {
// 这里的选项会传递给 postcss-loader
}
},

// 为所有的 CSS 及其预处理文件开启 CSS Modules。
// 这个选项不会影响 `*.vue` 文件。
modules: false

},

// 在生产环境下为 Babel 和 TypeScript 使用 `thread-loader`
// 在多核机器下会默认开启。
parallel: require('os').cpus().length > 1,

// PWA 插件的选项。
// 查阅 https://github.com/vuejs/vue-docs-zh-cn/blob/master/vue-cli-plugin-pwa/README.md

pwa: {},

// 三方插件的选项
pluginOptions: {
// ...

}

}

实例:用命令行创建项目

1. 创建工程

vue create demo_cli4


  • demo_cli4是文件夹名字也是项目名,若不存在会自动创建,若存在会安装到那个文件夹中。
  • 项目名不允许含有大写字母
  • vue-cli2.x需要自己手动创建一个文件夹。

2.选择模板

选择:Manually select features

  • 默认配置只有babel和eslint,其他的要自己再配置,所以选手动配置。 
? Please pick a preset: (Use arrow keys)
> Default ([Vue 2] babel, eslint)
Default (Vue 3) ([Vue 3] babel, eslint)
Manually select features

3.选择组件

 默认选项:

? 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)
>(*) Choose Vue version
(*) Babel
( ) TypeScript
( ) Progressive Web App (PWA) Support
( ) Router
( ) Vuex
( ) CSS Pre-processors
(*) Linter / Formatter
( ) Unit Testing
( ) E2E Testing

选这几项即可:

? Please pick a preset: Manually select features
? Check the features needed for your project:
(*) Choose Vue version
(*) Babel
( ) TypeScript
( ) Progressive Web App (PWA) Support
(*) Router
(*) Vuex
( ) CSS Pre-processors
>(*) Linter / Formatter
( ) Unit Testing
( ) E2E Testing

Linter / Formatter这个,若本处选中了,后边要关闭的话,有两种办法:


  1. 删除依赖及插件(本方法可运行起来,而且可以消除红色波浪线)

  1. 删除package.json中的eslint依赖和插件(所有带有eslint字样的项)
  2. 删除根目录下的.eslintrc.js文件

  1. 修改配置文件(本方法可运行起来,但无法消除红色波浪线)
  1. 根目录下新建vue.config.js文件,添加如下内容:
  1. ​module.exports = { lintOnSave: false };​

4.vue版本

上边用空格选完之后回车,会到下边界面。本处我选较为成熟的2.x

? Please pick a preset: Manually select features
? Check the features needed for your project: Choose Vue version, Babel, Router, Vuex, Linter
? Choose a version of Vue.js that you want to start the project with (Use arrow keys)
> 2.x
3.x

5.是否使用history模式(若选history:页面路由不使用 #)


  • 建议选No,这样打包出来丢到服务器上可以直接使用了,后期要用的话,也可以自己再开起来。
  • 选yes的话需要服务器那边再进行设置。

? Please pick a preset: Manually select features
? Check the features needed for your project: Choose Vue version, Babel, Router, Vuex, Linter
? Choose a version of Vue.js that you want to start the project with 2.x
? Use history mode for router? (Requires proper server setup for index fallback in production) (Y/n)

6. 语法检测级别

一般选择:ESLint + Standard config

? Please pick a preset: Manually select features
? Check the features needed for your project: Choose Vue version, Babel, Router, Vuex, Linter
? Choose a version of Vue.js that you want to start the project with 2.x
? Use history mode for router? (Requires proper server setup for index fallback in production) No
? Pick a linter / formatter config: (Use arrow keys)
> ESLint with error prevention only //只检测错误
ESLint + Airbnb config //不严谨的检测
ESLint + Standard config //标准配置:自动纠正、自动格式化
ESLint + Prettier //严格模式:使用Prettier进行风格统一

7.何时进行语法检测

 一般选:Lint on save  // 保存时检测。

等到commit的时候,问题可能都已经积累很多了

? Please pick a preset: Manually select features
? Check the features needed for your project: Choose Vue version, Babel, Router, Vuex, Linter
? Choose a version of Vue.js that you want to start the project with 2.x
? Use history mode for router? (Requires proper server setup for index fallback in production) No
? Pick a linter / formatter config: Standard
? Pick additional lint features: (Press <space> to select, <a> to toggle all, <i> to invert selection)
>(*) Lint on save // 保存时检测
( ) Lint and fix on commit // commit时检测和修复

8.把babel,postcss,eslint等配置文件放到哪里

一般选择:In dedicated config files  //独立放置

这样可以让package.json干净些

? Please pick a preset: Manually select features
? Check the features needed for your project: Choose Vue version, Babel, Router, Vuex, Linter
? Choose a version of Vue.js that you want to start the project with 2.x
? Use history mode for router? (Requires proper server setup for index fallback in production) No
? Pick a linter / formatter config: Standard
? 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 // 放package.json里

9.是否保存预设值

是否保存以便下次继续使用这套配置

如果选y,则会让你写一个配置的名字:Save preset as:  name

? Please pick a preset: Manually select features
? Check the features needed for your project: Choose Vue version, Babel, Router, Vuex, Linter
? Choose a version of Vue.js that you want to start the project with 2.x
? Use history mode for router? (Requires proper server setup for index fallback in production) No
? Pick a linter / formatter config: Standard
? 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)

创建后的结果

@vue/cli4--使用/教程/实例_vue_03

实例:图形化界面的使用

简介

功能

可以创建工程、配置已有的工程等。

用一次图形化界面,保证你再也不想用命令行了!

对比命令行的优势 


  1. 使用简单
  2. 可以退到上一步

配置的保存位置

图形化配置后,会保存到:/node_modules/@vue/cli-service/lib/webpack.config.js

启动图形化界面

命令:vue ui


  • 这是个全局的命令,在哪个文件夹都可以运行它
  • 界面如下图(重要的项目可以收藏起来(置顶))

@vue/cli4--使用/教程/实例_vue-cli_04

创建项目

点击创建

@vue/cli4--使用/教程/实例_html_05

 点击“在此创建新项目”

设置项目名,选择包管理工具等

@vue/cli4--使用/教程/实例_vue_06

点击“下一步”

选择预设项

@vue/cli4--使用/教程/实例_版本升级_07

默认配置只有babel和eslint,其他的要自己再配置,所以选“手动”。 

选择组件

@vue/cli4--使用/教程/实例_版本升级_08

作用跟上边“创建项目(命令行)”一样,本处不再重复。 

本处我的选择为:

@vue/cli4--使用/教程/实例_版本升级_09

点击“下一步”

选择vue版本、是否使用history模式、代码检测

@vue/cli4--使用/教程/实例_html_10

本处我的选择为:

@vue/cli4--使用/教程/实例_vue_11

是否保存预设

 如果选择是,则后边项目可以直接使用此配置。本处不保存,即:选择“创建项目,不保存预设”。

@vue/cli4--使用/教程/实例_html_12

正在创建项目(最下边会打印目前正在干什么)

@vue/cli4--使用/教程/实例_css_13

创建后的项目结构

跟用命令行创建结果是一样的。

@vue/cli4--使用/教程/实例_vue-cli_14


  • node_modules:用于存放我们项目的各种依赖;
  • public:用于存放静态资源(不会变动的);

  • public/index.html:模板文件,作用是生成项目的入口文件。
  • 浏览器访问项目时默认打开的是生成好的 index.html。

  • src:是存放各种 .vue 文件的地方。

  • src/assets:用于存放着各种静态文件(可能会变动),比如图片。
  • src/components:存放公共组件(可复用),比如 header.vue、footer.vue 等。
  • src/router/index.js:vue-router 路由文件。
  • 需要引入 src/views 文件夹下的 .vue,配置 path、name、component。
  • src/store/index.js:是 vuex 的文件,主要用于项目里边的一些状态保存。
  • 比如 state、mutations、actions、getters、modules。
  • src/views,存放页面组件(不可复用),比如 Login.vue,Home.vue。
  • src/App.vue:App.vue 是项目的主组件;

  • App.vue:根组件,使用 router-link 引入其他模块,所有页面都在 App.vue 下切换。
  • src/main.js:入口文件,主要作用是初始化 vue 实例,同时可以在此文件中引用某些组件库或者全局挂载一些变量。
  • .gitignore:配置 git 上传想要忽略的文件格式。
  • babel.config.js:一个工具链,主要用于在当前和较旧的浏览器或环境中将 ES6 的代码转换向后兼容(低版本ES)。
  • package.json:模块基本信息项目开发所需要的模块,版本,项目名称。
  • package-lock.json:是在 npm install 时候生成的一份文件,用于记录当前状态下实际安装的各个 npm package 的具体来源和版本号。 

导入项目

导入项目的文件夹即可,例如:

 @vue/cli4--使用/教程/实例_vue_15


项目管理

创建完项目会自动进入项目管理界面,或者可以从主页点击项目进入。

仪表盘

@vue/cli4--使用/教程/实例_css_16

插件

 @vue/cli4--使用/教程/实例_vue_17

依赖

 @vue/cli4--使用/教程/实例_vue-cli_18

配置

@vue/cli4--使用/教程/实例_版本升级_19

任务

@vue/cli4--使用/教程/实例_html_20


@vue/cli3升级为@vue/cli4​