vue-cli配置文件——config篇


Posted in Javascript onJanuary 04, 2018

最近一直在研究webpack,突然想看看vue-cli中的webpack是如何配置,查阅了很多相关的文章,所以也想出几篇关于vue-cli配置的东西。正所谓“工欲善其事必先利其器”嘛!这一篇主要是分析vue中关于 config文件夹中的相关代码 ;

首先我们先看一下config的文件结构:

|-config
|---dev.env.js
|---index.js
|---prod.env.js

打开我们的vue项目文件夹我们可以清楚的看到文件夹下的三个文件, “dev.env.js” , “index.js” , “prod.env.js” ,我们先打开prod.env.js的文件,看里面的内容:

'use strict'
module.exports = {
 NODE_ENV: '"production"'
}

prod.env.js的内容非常简单,仅仅是导出了一个对象,里面写明了执行环境是“production(生产环境)”;我们接下来看与之对应的“dev.env.js”文件:

'use strict'
//引入webpack-merge模块
const merge = require('webpack-merge')
//引入刚才打开的prod.env.js
const prodEnv = require('./prod.env')
module.exports = merge(prodEnv, {
  NODE_ENV: '"development"'
})

在“dev.env.js”中,先引入了webpack-merge这个模块。这个模块的作用是来合并两个配置文件对象并生成一个新的配置文件,有点儿类似于es6的object.assign();

vue-cli中将一些通用的配置抽出来放在一个文件内,在对不同的环境配置不同的代码,最后使用webpack-merge来进行合并,减少重复代码,正如文档中所说,“ webpack遵循不重复原则(Don't repeat yourself - DRY),不会再不同的环境中配置相同的代码 ”

当然,关于webpack-merge的内容还远不止这些,想了解更多关于这个模块的朋友请访问 https://www.npmjs.com/package/webpack-merge

好,让我们接着回到代码中来,引入webpack-merge后这个文件又引入了prod.env.js,接着就将prod.env.js的配置和新的配置,即指明开发环境(development)进行了merge。(我有点儿不太理解为什么要这样做,如果不merge直接写module.exports={NODE_ENV:'"development'}也是可以的,难道是为了优雅降级?)

还有一点需要注意是的, development和production一定要加双引号,不然会报错!!!

最后,我们来看index.js:

'use strict'
// Template version: 1.2.4
// see http://vuejs-templates.github.io/webpack for documentation.
const path = require('path')
module.exports = {
 dev: {
 // Paths
 assetsSubDirectory: 'static',
 assetsPublicPath: '/',
 proxyTable: {},
 // Various Dev Server settings
 host: 'localhost', // can be overwritten by process.env.HOST
 port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
 autoOpenBrowser: false,
 errorOverlay: true,
 notifyOnErrors: true,
 poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
 // Use Eslint Loader?
 // If true, your code will be linted during bundling and
 // linting errors and warnings will be shown in the console.
 useEslint: true,
 // If true, eslint errors and warnings will also be shown in the error overlay
 // in the browser.
 showEslintErrorsInOverlay: false,
 /**
  * Source Maps
  */
 // https://webpack.js.org/configuration/devtool/#development
 devtool: 'eval-source-map',
 // If you have problems debugging vue-files in devtools,
 // set this to false - it *may* help
 // https://vue-loader.vuejs.org/en/options.html#cachebusting
 cacheBusting: true,
 // CSS Sourcemaps off by default because relative paths are "buggy"
 // with this option, according to the CSS-Loader README
 // (https://github.com/webpack/css-loader#sourcemaps)
 // In our experience, they generally work as expected,
 // just be aware of this issue when enabling this option.
 cssSourceMap: false,
 },
 build: {
 // Template for index.html
 index: path.resolve(__dirname, '../dist/index.html'),
 // Paths
 assetsRoot: path.resolve(__dirname, '../dist'),
 assetsSubDirectory: 'static',
 assetsPublicPath: '/',
 /**
  * Source Maps
  */
 productionSourceMap: true,
 // https://webpack.js.org/configuration/devtool/#production
 devtool: '#source-map',
 // Gzip off by default as many popular static hosts such as
 // Surge or Netlify already gzip all static assets for you.
 // Before setting to `true`, make sure to:
 // npm install --save-dev compression-webpack-plugin
 productionGzip: false,
 productionGzipExtensions: ['js', 'css'],
 // Run the build command with an extra argument to
 // View the bundle analyzer report after build finishes:
 // `npm run build --report`
 // Set to `true` or `false` to always turn it on or off
 bundleAnalyzerReport: process.env.npm_config_report
 }
}

开头引入了node中的path模块,

然后我们先来看dev下的配置内容:

assetsSubDirectory指的是静态资源文件夹,默认“static”,

assetsPublicPath指的是发布路径,

proxyTable是我们常用来配置代理API的地方,后面的host和port相信大家都知道,我就不细说了,

autoOpenBrowser是否自动打开浏览器

errorOverlay查询错误

notifyOnErrors通知错误
,poll是跟devserver相关的一个配置,webpack为我们提供的devserver是可以监控文件改动的,但在有些情况下却不能工作,我们可以设置一个轮询(poll)来解决

useEslint是否使用eslint

showEslintErrorsInOverlay是否展示eslint的错误提示

devtool webpack提供的用来方便调试的配置,它有四种模式,可以查看webpack文档了解更多

cacheBusting 一个配合devtool的配置,当给文件名插入新的hash导致清楚缓存时是否生成souce maps,默认在开发环境下为true,不过文档中还写了一句话:“Turning this off can help with source map debugging.”额。。。

cssSourceMap 是否开启cssSourceMap
我们再来看build下的配置内容:
index 编译后index.html的路径,path.resolve(__dirname, '../dist')中

path.resolve(__dirname)指的是index.js所在的绝对路径,再去找“../dist”这个路径(node相关的知识),

assetsRoot打包后的文件根路径,至于assetsSubDirectory和assetsPublicPath跟dev中的一样,

productionSourceMap是否开启source-map,

devtool同dev,

productionGzip是否压缩,

productionGzipExtensions gzip模式下需要压缩的文件的扩展名,设置后会对相应扩展名的文件进行压缩

bundleAnalyzerReport 是否开启打包后的分析报告

截止到这儿,config文件夹下的内容基本上就过完了,正如名字告诉我们的,这三个文件仅仅是写死的配置文件,截止目前还没遇到太多

总结

以上所述是小编给大家介绍的vue-cli配置文件——config篇,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
用正则xmlHttp实现的偷(转)
Jan 22 Javascript
jQuery实现鼠标移到元素上动态提示消息框效果
Oct 20 Javascript
javascript实例--教你实现扑克牌洗牌功能
May 15 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
Aug 10 Javascript
JS动态添加选项案例分析
Oct 17 Javascript
jQuery插件FusionWidgets实现的AngularGauge图效果示例【附demo源码】
Mar 23 jQuery
requirejs + vue 项目搭建详解
Jun 16 Javascript
jQuery操作cookie的示例代码
Jun 05 jQuery
Ajax请求时无法重定向的问题解决代码详解
Jun 21 Javascript
详解element-ui表格中勾选checkbox,高亮当前行
Sep 02 Javascript
JavaScript实现多个物体同时运动
Mar 12 Javascript
js Proxy的原理详解
May 25 Javascript
jQuery封装animate.css的实例
Jan 04 #jQuery
js 公式编辑器 - 自定义匹配规则 - 带提示下拉框 - 动态获取光标像素坐标
Jan 04 #Javascript
浅谈vuex 闲置状态重置方案
Jan 04 #Javascript
详解Angular5 服务端渲染实战
Jan 04 #Javascript
JavaScript中的高级函数
Jan 04 #Javascript
Three.js 再探 - 写一个微信跳一跳极简版游戏
Jan 04 #Javascript
JS实现带导航城市列表以及输入搜索功能
Jan 04 #Javascript
You might like
thinkphp3.x中display方法及show方法的用法实例
2016/05/19 PHP
(currentStyle)javascript为何有时用style得不到已设定的CSS的属性
2007/08/15 Javascript
javascript一些不错的函数脚本代码
2008/09/10 Javascript
jquery html动态生成select标签出问题的解决方法
2013/11/20 Javascript
node.js操作mongoDB数据库示例分享
2014/11/26 Javascript
jQuery手动点击实现图片轮播特效
2020/04/20 Javascript
基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息
2016/08/29 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
2016/09/27 Javascript
JS实现二叉查找树的建立以及一些遍历方法实现
2017/04/17 Javascript
JS匹配日期和时间的正则表达式示例
2017/05/12 Javascript
JavaScript实现三级联动菜单效果
2017/08/16 Javascript
Node.js实现简单管理系统
2019/09/23 Javascript
基于JavaScript判断两个对象内容是否相等
2020/01/10 Javascript
[01:39]2014DOTA2国际邀请赛 Newbee经理CU专访队伍火力全开
2014/07/15 DOTA
Python中的一些陷阱与技巧小结
2015/07/10 Python
Python Requests 基础入门
2016/04/07 Python
Python安装使用命令行交互模块pexpect的基础教程
2016/05/12 Python
python如何定义带参数的装饰器
2018/03/20 Python
pycharm重命名文件的方法步骤
2019/07/29 Python
Django 请求Request的具体使用方法
2019/11/11 Python
python处理RSTP视频流过程解析
2020/01/11 Python
python爬虫开发之PyQuery模块详细使用方法与实例全解
2020/03/09 Python
python 监控logcat关键字功能
2020/09/04 Python
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
Expedia瑞典官网:预订度假屋、酒店、汽车租赁、机票等
2021/01/23 全球购物
党校自我鉴定范文
2013/10/02 职场文书
汽车技术服务与营销专业推荐信
2013/11/29 职场文书
自我鉴定写作要点
2014/01/17 职场文书
舞蹈教师自荐信
2014/01/27 职场文书
优秀员工获奖感言
2014/03/01 职场文书
2014年社会实践活动总结范文
2014/04/29 职场文书
机关党总支领导班子整改方案
2014/09/20 职场文书
2014年电教工作总结
2014/12/19 职场文书
世界气象日活动总结
2015/02/27 职场文书
社区党支部公开承诺书
2015/04/29 职场文书
详解CSS3.0(Cascading Style Sheet) 层叠级联样式表
2021/07/16 HTML / CSS