vue-cli3.0配置及使用注意事项详解


Posted in Javascript onSeptember 05, 2018

这次给大家带来vue-cli3.0配置详解,使用vue-cli3.0配置的注意事项有哪些,下面就是实战案例,一起来看一下。

新建项目

# 安装
npm install -g @vue/cli
# 新建项目
vue create my-project
# 项目启动
npm run serve
# 打包
npm run build

打包后的文件,对引用资源注入了预加载(preload/prefetch),启用 PWA 插件时注入 manifest/icon 链接,并且引入(inlines) webpack runtime / chunk manifest 清单已获得最佳性能。

功能配置

功能选择

vue-cli3.0配置及使用注意事项详解

3.0 版本包括默认预设配置 和 用户自定义配置,在用户自定义配置之后,会询问是否保存当前的配置功能为将来的项目配置的预设值,这样下次可直接使用不需要再次配置。

自定义功能配置包括以下功能:

1.TypeScript

2.Progressive Web App (PWA) Support

3.Router

4.Vuex

5.CSS Pre-processors

6.Linter / Formatter

7.Unit Testing

8.E2E Testing

可以根据项目大小和功能体验配置不同的功能,空格键 选中/反选,按a键 全选/全不选,按i键反选已选择项, 上下键 上下移动选择。

功能细节配置

vue-cli3.0配置及使用注意事项详解

在选择功能后,会询问更细节的配置,

TypeScript:

1.是否使用class风格的组件语法:Use class-style component syntax?

2.是否使用babel做转义:Use Babel alongside TypeScript for auto-detected polyfills?

CSS Pre-processors:

1.选择CSS 预处理类型:Pick a CSS pre-processor

Linter / Formatter

1.选择Linter / Formatter规范类型:Pick a linter / formatter config

2.选择lint方式,保存时检查/提交时检查:Pick additional lint features

Testing

1.选择Unit测试方式

2.选择E2E测试方式

选择 Babel, PostCSS, ESLint 等自定义配置的存放位置 Where do you prefer placing config for Babel, PostCSS, ESLint, etc.?

vue.config.js 自定义配置

vue.config.js完整默认配置

module.exports = {
 // 基本路径
 baseUrl: '/',
 // 输出文件目录
 outputDir: 'dist',
 // eslint-loader 是否在保存的时候检查
 lintOnSave: true,
 // use the full build with in-browser compiler?
 // https://vuejs.org/v2/guide/installation.html#Runtime-Compiler-vs-Runtime-only
 compiler: false,
 // webpack配置
 // see https://github.com/vuejs/vue-cli/blob/dev/docs/webpack.md
 chainWebpack: () => {},
 configureWebpack: () => {},
 // vue-loader 配置项
 // https://vue-loader.vuejs.org/en/options.html
 vueLoader: {},
 // 生产环境是否生成 sourceMap 文件
 productionSourceMap: true,
 // css相关配置
 css: {
 // 是否使用css分离插件 ExtractTextPlugin
 extract: true,
 // 开启 CSS source maps?
 sourceMap: false,
 // css预设器配置项
 loaderOptions: {},
 // 启用 CSS modules for all css / pre-processor files.
 modules: false
 },
 // use thread-loader for babel & TS in production build
 // enabled by default if the machine has more than 1 cores
 parallel: require('os').cpus().length > 1,
 // 是否启用dll
 // See https://github.com/vuejs/vue-cli/blob/dev/docs/cli-service.md#dll-mode
 dll: false,
 // PWA 插件相关配置
 // see https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-pwa
 pwa: {},
 // webpack-dev-server 相关配置
 devServer: {
 open: process.platform === 'darwin',
 host: '0.0.0.0',
 port: 8080,
 https: false,
 hotOnly: false,
 proxy: null, // 设置代理
 before: app => {}
 },
 // 第三方插件配置
 pluginOptions: {
 // ...
 }
}

 设置代理

# string
module.exports = {
 devServer: {
 proxy: '<url>'
 }
}
# Object
module.exports = {
 devServer: {
 proxy: {
 '/api': {
 target: '<url>',
 ws: true,
 changeOrigin: true
 },
 '/foo': {
 target: '<other_url>'
 }
 }
 }
}

启用dll

启用dll后,我们的动态库文件每次打包生成的vendor的[chunkhash]值就会一样,其值可以是 true/false,也可以制定特定的代码库。

module.exports = {
 dll: true
}
module.exports = {
 dll: [
 'dep-a',
 'dep-b/some/nested/file.js'
 ]
}

静态资源路径

相对路径

1.静态资源路径以 @ 开头代表 <projectRoot>/src

2.静态资源路径以 ~ 开头,可以引入node modules内的资源

public文件夹里的静态资源引用

# 在 public/index.html中引用静态资源
<%= webpackConfig.output.publicPath %>
<link rel="shortcut icon" href="<%= webpackConfig.output.publicPath %>favicon.ico" rel="external nofollow" >
# vue templates中,需要在data中定义baseUrl
<template>
 <img :src="`${baseUrl}my-image.png`">
</template>
<script>
 data () {
 return {
 baseUrl: process.env.BASE_URL
 }
 }
</script>

webpack配置修改

用 webpack-chain 修改webpack相关配置,强烈建议先熟悉webpack-chain和vue-cli 源码,以便更好地理解这个选项的配置项。

对模块处理配置

// vue.config.js
module.exports = {
 chainWebpack: config => {
 config.module
 .rule('js')
 .include
  .add(/some-module-to-transpile/) // 要处理的模块
 }
}

修改webpack Loader配置 

// vue.config.js
module.exports = {
 chainWebpack: config => {
 config.module
 .rule('scss')
 .use('sass-loader')
 .tap(options =>
 merge(options, {
  includePaths: [path.resolve(dirname, 'node_modules')],
 })
 )
 }
}

修改webpack Plugin配置

// vue.config.js
module.exports = {
 chainWebpack: config => {
 config
 .plugin('html')
 .tap(args => {
 return [/* new args to pass to html-webpack-plugin's constructor */]
 })
 }
}

eg: 在本次项目较小,只对uglifyjs进行了少量的修改,后期如果还有配置上优化会继续添加。

chainWebpack: config => {
 if (process.env.NODE_ENV === 'production') { 
 config
  .plugin('uglify')
  .tap(([options]) =>{
  // 去除 console.log
  return [Object.assign(options, {
   uglifyOptions: { compress: {
   drop_console : true,
   pure_funcs: ['console.log']
   }}
  })]
  })
 }
}

全局变量的设置

在项目根目录创建以下项目:

.env        # 在所有环节中执行

.env.local     # 在所有环境中执行,git会ignored

.env.[mode]     # 只在特定环境执行( [mode] 可以是 "development", "production" or "test" )

.env.[mode].local  # 在特定环境执行, git会ignored

.env.development  # 只在生产环境执行

.env.production   # 只在开发环境执行

在文件里配置键值对:

# 键名须以VUE_APP开头
VUE_APP_SECRET=secret

在项目中访问:

console.log(process.env.VUE_APP_SECRET)

这样项目中的 process.env.VUE_APP_SECRET 就会被 secret 所替代。

vue-cli 3 就项目性能而言已经相当友好了,私有制定性也特别强,各种配置也特别贴心,可以根据项目大小和特性制定私有预设,对前期项目搭建而言效率极大提升了。

Javascript 相关文章推荐
兼容IE、FireFox、Chrome等浏览器的xml处理函数js代码
Nov 30 Javascript
JQuery Highcharts 动态生成图表的方法
Nov 15 Javascript
在JavaScript中正确引用bind方法的应用
May 11 Javascript
javascript获取当前的时间戳的方法汇总
Jul 26 Javascript
javascript解决IE6下hover问题的方法
Jul 28 Javascript
简单实现限制uploadify上传个数
Nov 16 Javascript
JavaScript 经典实例日常收集整理(常用经典)
Mar 30 Javascript
BootStrap实现树形目录组件代码详解
Jun 21 Javascript
ES6学习笔记之正则表达式和字符串正则方法分析
Apr 25 Javascript
使用node打造自己的命令行工具方法教程
Mar 26 Javascript
Vue项目自动转换 px 为 rem的实现方法
Oct 29 Javascript
如何测量vue应用运行时的性能
Jun 21 Javascript
Vue-cli@3.0 插件系统简析
Sep 05 #Javascript
vue实现点击选中,其他的不选中方法
Sep 05 #Javascript
在vue.js中使用JSZip实现在前端解压文件的方法
Sep 05 #Javascript
Node.js 使用request模块下载文件的实例
Sep 05 #Javascript
详解Angular6学习笔记之主从组件
Sep 05 #Javascript
webpack4 入门最简单的例子介绍
Sep 05 #Javascript
Vuejs2 + Webpack框架里,模拟下载的实例讲解
Sep 05 #Javascript
You might like
php SQL防注入代码集合
2008/04/25 PHP
php include加载文件两种方式效率比较
2010/08/08 PHP
php获取$_POST同名参数数组的实现介绍
2013/06/30 PHP
javascript自定义startWith()和endWith()的两种方法
2013/11/11 Javascript
js实现二代身份证号码验证详解
2014/11/20 Javascript
javascript数组去重的六种方法汇总
2015/08/16 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
2016/06/28 Javascript
JavaScript学习笔记整理_用于模式匹配的String方法
2016/09/19 Javascript
详解Angular.js的$q.defer()服务异步处理
2016/11/06 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
2017/05/26 Javascript
微信小程序实现页面跳转传值的方法
2017/10/12 Javascript
js中DOM事件绑定分析
2018/03/18 Javascript
微信小程序下拉框功能的实例代码
2018/11/06 Javascript
详解Vue调用手机相机和相册以及上传
2019/05/05 Javascript
JS实现网页端猜数字小游戏
2020/03/06 Javascript
浅谈vue 二级路由嵌套和二级路由高亮问题
2020/08/06 Javascript
解决nuxt 自定义全局方法,全局属性,全局变量的问题
2020/11/05 Javascript
JavaScript 绘制饼图的示例
2021/02/19 Javascript
[51:30]OG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/30 DOTA
python进程管理工具supervisor使用实例
2014/09/17 Python
python自带的http模块详解
2016/11/06 Python
python模拟事件触发机制详解
2018/01/19 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
2019/08/27 Python
python同步两个文件夹下的内容
2019/08/29 Python
python如何导出微信公众号文章方法详解
2020/08/31 Python
纯css3实现宠物小鸡实例代码
2018/10/08 HTML / CSS
HTML5中判断横屏竖屏的方法(移动端)
2016/08/04 HTML / CSS
SmartBuyGlasses美国官网:太阳眼镜和眼镜
2017/08/20 全球购物
系统管理员的职责包括那些?管理的对象是什么?
2013/01/18 面试题
公司应聘求职信
2014/06/21 职场文书
2014年妇女工作总结
2014/12/06 职场文书
2015年安置帮教工作总结
2015/05/22 职场文书
2016教师校本研修心得体会
2016/01/08 职场文书
Vue如何实现组件间通信
2021/05/15 Vue.js
在pycharm中无法import所安装的库解决方案
2021/05/31 Python
Vue3.0 手写放大镜效果
2021/07/25 Vue.js