cli的包名变动css
# cli 2.x
npm install -g vue-cli
# cli 3.x
# 3.x 安装时,若是以前安装了2.x须要卸载2.x再安装
npm install -g @vue/cli
复制代码
cli2.x
vue init <template-name> <project-name>
npm i
npm run dev
复制代码
cli3.x
- 安装新增
TypeScript
配置选项- 新增
图形化安装
方法- 保留了2.x以前的安装方法
vue create hello-world
npm i
npm run serve
# 使用vue ui建立新项目(3.x新增)
vue ui
# 使用旧版(2.X)建立
npm install -g @vue/cli-init
# 'vue init'的运行效果与‘vue-cli@2.x’相同
vue init webpack projectname
复制代码
config
目录删除,使用模式的.env
文件代替[模式
]cli3
新增模式
概念,每一个模式在项目中都有对应的配置文件,项目启动时,对应的文件就会加载,与环境变量不一样,一个模式能够包括多个环境变量html
Vue CLI
项目默认有三个模式:
development
模式用于 vue-cli-service serve
production
模式用于 vue-cli-service build
和 vue-cli-service test:e2e
test
模式用于 vue-cli-service test:unit
--mode
指定NODE_ENV=development npm run serve --mode mymode # 模式包含多个环境变量
复制代码
cli3.x
为模式与环境变量指定了一个.env
配置文件.env # 全部环境
.env.mode # mode模式加载的配置文件[优先级高于.env]
.env.mode.development # mode模式下,development环境所加载的配置文件[优先级最高]
复制代码
.env
文件详细信息
config
目录的VUE_APP_
开头的变量能够再代码中经过process.env
访问,其余的变量不可访问NODE_ENV
和BASE_URL
3.x
版本的config
目录虽然删除,可是若是不习惯.env
的方式,能够不设置任何模式,只指定NODE_ENV,按2.x的config方法配置参数vue
删除了static
目录,它的静态资源转移到public
目录中,经过/xx.xx
能够直接访问webpack
public
详细信息index.html
入口文件从根目录转到public
目录下,它拥有3个特殊插值
<%= VALUE %>
用来作不转义插值;<%- VALUE %>
用来作 HTML 转义插值;<% expression %>
用来描述 JavaScript 流程控制public
目录存放cli3
项目的静态资源有两种处理方式
avaScript
或template/css(vue)
中经过相对路径导入。这类资源会被webpack处理(不在public
目录)public
目录或者使用绝对路径被导入的静态资源。这类资源会被直接拷贝,不会通过webpack
处理cli3.x
项目配置的不一样(build
目录删除)2.x
版本的项目配置是在config
和build
中完成,可是,到了3.x
版本,这两个目录都被删除,若是须要自定义配置,须要本身新建vue.config.js
文件git
publicPath
webpack
的output.publicPath
vue
项目中其余地方会用到publicPath
,因此不要修改webpack
的output.publicPath
baseUrl
的,baseUrl 3.3
后已弃用outputDir
build
构建的文件存放的目录output.path
,但只能修改outputDir
,不能修改output.path
assetsDir
编译后,在outputDir
目录中存放静态资源的目录lintOnSave
配置eslint
后,是否每次保存lint
代码,默认启动runtimeCompiler
是否使用包含运行时编译器的 Vue 构建版本,默认不启动configureWebpack
& chainWebpack
webpack
内容的,前者是合并对象,后者是链式调用cli3.6
]webpack
的build
代码压缩默认不开启,须要设置环境变量为productio
n才会开启devServer
支持全部webpack-dev-server
选项
host、port、https
proxy
module.exports = {
port: 8100,
devServer: {
proxy: 'http://localhost:4000'
}
}
复制代码
在cli3.x
中能够使用vue serve
和vue build
命令对单个*.vue
文件进行快速原型开发web
vue serve 的缺点就是它须要安装全局依赖,这使得它在不一样机器上的一致性不能获得保证。所以这只适用于快速原型开发vue-router
npm install -g @vue/cli-service-global
复制代码
单个文件vuex
<template>
<h1>Hello!</h1>
</template>
复制代码
vue serve
运行文件vue serve myComponent.vue
Usage: serve [options] [entry]
在开发环境模式下零配置为 .js 或 .vue 文件启动一个服务器
Options:
-o, --open 打开浏览器
-c, --copy 将本地 URL 复制到剪切板
-h, --help 输出用法信息
复制代码
vue build
编译文件vue build myComponent.vue
Usage: build [options] [entry]
在生产环境模式下零配置构建一个 .js 或 .vue 文件
Options:
-t, --target <target> 构建目标 (app | lib | wc | wc-async, 默认值:app)
-n, --name <name> 库的名字或 Web Components 组件的名字 (默认值:入口文件名)
-d, --dest <dir> 输出目录 (默认值:dist)
-h, --help 输出用法信息
复制代码
vue cli3
新增一个UI图形化管理页面,能够经过它新建项目、管理原有项目的插件vue-cli
vue ui # 启动图形化界面
复制代码
第1、第三种选择后直接建立项目,第二种执行下一步,且功能与配置页的信息与以前命令行安装的相同express
cli
插件vue cli3.x
使用了一套基于插件的架构,cli的相关依赖都是以@vue/cli-plugin-
开头的webpack
配置,也能够向 vue-cli-service
注入命令vue add
插件的安装cli3.x
项目提供了vue add
命令来安装插件
vue add @vue/cli-plugin-eslint
复制代码
同时,该命令能够识别下列写法,命令与上一行的命令等价
vue add eslint
vue add @vue/eslint
复制代码
该命令也能够在一个指定的范围内安装第三方插件
# 插件名:@foo/vue-cli-plugin-bar
vue add @foo/bar
复制代码
也能够向插件传递生成器选项
这样会跳过命令提示
vue add @vue/eslint --config airbnb --lintOn save
复制代码
vue-router
和vuex
它们没有对应的插件,可是依旧能够使用vue add
在项目中添加它们
vue add router
vue add vuex
复制代码
vue invoke
调用生成器该命令会跳过安装过程直接调用插件的生成器,接收和vue add一致的参数
vue invoke @foo/bar
复制代码
若是只须要在项目中直接访问插件API,而不须要建立完整的插件 能够使用vuePlugin.service配置
{
"vuePlugins": {
"service": ["my-commands.js"]
}
}
复制代码
或者 vuePlugin.ui 添加为UI插件
{
"vuePlugins": {
"ui": ["my-ui.js"]
}
}
复制代码
预设配置是一个包含建立新项目时所需的预约义选项和插件的JSON对象,只要在建立项目时,选中这个对象文件,就能安装文件的JSON内容常见项目,实现快速自定义建立项目
{
"useConfigFiles": true,
"router": true,
"vuex": true,
"cssPreprocessor": "sass",
"plugins": {
"@vue/cli-plugin-babel": {},
"@vue/cli-plugin-eslint": {
"config": "airbnb",
"lintOn": ["save", "commit"]
}
},
"configs": {
"vue": {...},
"postcss": {...},
"eslintConfig": {...},
"jest": {...}
}
}
复制代码
预设配置包括插件生成器配置和集成工具的配置等待 这些配置会根据useConfigFiles
合并到package.json
或相应的配置文件中,如当 "useConfigFiles": true
的时候,configs
的值将会被合并到 vue.config.js
中
预设配置中的插件能够显示的指定版本范围,若是没有值是由registry中最新版本(官方推荐指定)
{
"plugins": {
"@vue/cli-plugin-eslint": {
"version": "^3.0.0",
// ... 该插件的其它选项
}
}
}
复制代码
每一个插件在项目建立的过程当中均可以注入它本身的命令提示,不过当你使用了预设配置,这些命令提示就会被跳过,若是须要展现命令提示,则须要设置"prompts": true
便可
{
"plugins": {
"@vue/cli-plugin-eslint": {
// 让用户选取他们本身的 ESLint 配置
"prompts": true
}
}
}
复制代码
vue create过程当中保存的预设配置默认存放在~/.vuerc 将预设配置写在vuerc的'presets'属性中能够再建立项目时,能够显示多个预设配置。直接选择须要的建立项目便可
{
"useTaobaoRegistry": false,
"packageManager": "npm",
"presets": { // 预设配置添加的地方,可添加多个预设配置
"my_sets": { // 名为‘my_sets’的预设配置
"useConfigFiles": true,
"router": true,
"vuex": true,
"cssPreprocessor": "sass",
"plugins": {
"@vue/cli-plugin-babel": {},
"@vue/cli-plugin-eslint": {
"config": "airbnb",
"lintOn": ["save", "commit"]
}
}
}
}
}
复制代码
vue create
命令中使用--preset
指定预设配置该种形式只能加载json形式的文件,它有两种形式:本地预设和远程预设
若是--preset
选项的值是一个相对或绝对文件路径,或是以 .json
结尾,则加载本地预设,不然加载远程预设
# ./my-preset 应当是一个包含 preset.json 的文件夹
vue create --preset ./my-preset my-project
# 或者,直接使用当前工做目录下的 json 文件:
vue create --preset my-preset.json my-project
复制代码
从git上获取别人分享的预设
git repo
将一个预设配置分享给其余开发者,repo
应该包含如下文件: *preset.json
: 包含预设配置数据的主要文件(必需)。
generator.js
: 一个能够注入或是修改项目中文件的 Generator。prompts.js
:一个能够为 generator
收集选项的 prompts
文件# 从 GitHub repo 使用预设配置
vue create --preset username/repo my-project
复制代码
GitLab
和 BitBucke
t 也是支持的。若是要从私有 repo 获取,请确保使用 --clone
选项:vue create --preset gitlab:username/repo --clone my-project
vue create --preset bitbucket:username/repo --clone my-project
# 自托管的 repo
vue create --preset gitlab:my-gitlab-server.com:group/projectname --clone my-project
vue create --preset direct:ssh://git@my-gitlab-server.com/group/projectname.git --clone my-project
复制代码
const path = require('path')
function resolve (dir) {
return path.join(__dirname, dir)
}
module.exports = {
publicPath: '/',
assetsDir: 'static',
productionSourceMap: false,
configureWebpack: config => {
if (process.env.VUE_APP_NODE_ENV === 'production') {
// 为生产环境修改配置...
} else {
// 为开发环境修改配置...
}
},
// 解析别名处理
chainWebpack: config => {
config.resolve.alias
.set('@img', resolve('src/assets/img'))
.set('@c', resolve('src/components'))
.set('@m', resolve('src/mixins'))
.set('@v', resolve('src/views'))
.set('@s', resolve('src/store'))
},
// 配置高于chainWebpack中关于 css loader 的配置
css: {
// 是否开启支持 foo.module.css 样式
modules: false,
// 是否使用 css 分离插件 ExtractTextPlugin,采用独立样式文件载入,不采用 <style> 方式内联至 html 文件中
extract: true,
// 是否构建样式地图,false 将提升构建速度
sourceMap: false,
// css预设器配置项
loaderOptions: {
css: {
// options here will be passed to css-loader
},
postcss: {
// options here will be passed to postcss-loader
}
}
},
devServer: {
port: 8010
}
}
复制代码