详解Vue CLI3配置解析之css.extract


Posted in Javascript onSeptember 14, 2018

大家还记得我们在老版本中,对于线上环境配置中会把所有的 css 多打成一个文件:

核心是使用了插件 extract-text-webpack-plugin,方式如下:

第一步都是加载插件

const ExtractTextPlugin = require('extract-text-webpack-plugin')

这个插件的描述如下:

Extract text from a bundle, or bundles, into a separate file.

然后配置如下:(省去了 rules 相关的配置)

一般配置 filename 来保证最终生成的 css 文件名

plugins: [
 new ExtractTextPlugin({
   filename: utils.assetsPath('css/[name].[contenthash].css')
 })
]

我们可以预先用 vue inspect --plugin extract-css 看看最终生成的配置:

/* config.plugin('extract-css') */
new MiniCssExtractPlugin(
 {
  filename: 'css/[name].[contenthash:8].css',
  chunkFilename: 'css/[name].[contenthash:8].css'
 }
)

在文件 @vue/cli-service/lib/config/css.js 中:

最开始需要获取 vue.config.js 里面配置的 css.extract

const isProd = process.env.NODE_ENV === 'production'

const {
 extract = isProd
} = options.css || {}

设置一个变量 shouldExtract

const shadowMode = !!process.env.VUE_CLI_CSS_SHADOW_MODE
const shouldExtract = extract !== false && !shadowMode

如果变量 shouldExtract 为 true,调用 plugin 方法来生成一个插件配置:

这里依赖的插件为 mini-css-extract-plugin

if (shouldExtract) {
   webpackConfig
    .plugin('extract-css')
     .use(require('mini-css-extract-plugin'), [extractOptions])
}

filename 内部也有一个判断过程,如果设置了 filenameHashing,它默认是 true:

filenameHashing: true

类型为 boolean:

filenameHashing: joi.boolean()
const filename = getAssetPath(
   options,
   `css/[name]${options.filenameHashing ? '.[contenthash:8]' : ''}.css`
  )

处理 filename 之后,插件还有一个配置项:chunkFilename

下面就是通过 Object.assign 来生成 extractOptions

const extractOptions = Object.assign({
   filename,
   chunkFilename: filename
  }, extract && typeof extract === 'object' ? extract : {})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS 自动完成 AutoComplete(Ajax 查询)
Jul 07 Javascript
JavaScript 代码压缩工具小结
Feb 27 Javascript
关闭ie窗口清除Session的解决方法
Jan 10 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
Apr 25 Javascript
jQuery插件分享之分页插件jqPagination
Jun 06 Javascript
JavaScript使用encodeURI()和decodeURI()获取字符串值的方法
Aug 04 Javascript
浅谈JS原生Ajax,GET和POST
Jun 08 Javascript
关于Webpack dev server热加载失败的解决方法
Feb 22 Javascript
vue注册组件的几种方式总结
Mar 08 Javascript
Angular父组件调用子组件的方法
Apr 02 Javascript
详解js访问对象的属性和方法
Oct 25 Javascript
Openlayers学习之加载鹰眼控件
Sep 28 Javascript
vue-cli脚手架build目录下utils.js工具配置文件详解
Sep 14 #Javascript
vue3.0 CLI - 2.6 - 组件的复用入门教程
Sep 14 #Javascript
在vue项目中使用md5加密的方法
Sep 14 #Javascript
在vue项目中引用Iview的方法
Sep 14 #Javascript
详解webpack-dev-server使用方法
Sep 14 #Javascript
JS 实现微信扫一扫功能
Sep 14 #Javascript
详解webpack2异步加载套路
Sep 14 #Javascript
You might like
几个学习PHP的网址
2006/11/25 PHP
ThinkPHP添加更新标签的方法
2014/12/05 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
2015/07/03 PHP
微信随机生成红包金额算法php版
2016/07/21 PHP
PHP使用DOM对XML解析处理操作示例
2019/07/04 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
通过Javascript将数据导出到外部Excel文档的函数代码
2012/06/15 Javascript
jquery 循环显示div的示例代码
2013/10/18 Javascript
JS中表单的使用小结
2014/01/11 Javascript
js使用for循环与innerHTML获取选中tr下td值
2014/09/26 Javascript
JavaScript简单实现弹出拖拽窗口(二)
2016/06/17 Javascript
angularjs封装bootstrap时间插件datetimepicker
2016/06/20 Javascript
使用React实现轮播效果组件示例代码
2016/09/05 Javascript
EsLint入门学习教程
2017/02/17 Javascript
react写一个select组件的实现代码
2019/04/03 Javascript
使用Python的判断语句模拟三目运算
2015/04/24 Python
微信跳一跳小游戏python脚本
2018/01/05 Python
深入了解Python中pop和remove的使用方法
2018/01/09 Python
如何基于python测量代码运行时间
2019/12/25 Python
Python restful框架接口开发实现
2020/04/13 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
2020/05/18 Python
python使用openpyxl操作excel的方法步骤
2020/05/28 Python
详解html5 canvas常用api总结(二)--绘图API
2016/12/14 HTML / CSS
医院办公室主任职责
2013/12/29 职场文书
应用化学专业职业生涯规划书
2013/12/31 职场文书
学术诚信承诺书
2014/05/26 职场文书
个人工作作风整改措施思想汇报
2014/10/13 职场文书
学校党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
四年级学生期末评语
2014/12/26 职场文书
父亲节寄语大全
2015/02/27 职场文书
2015年学校减负工作总结
2015/05/19 职场文书
2016年秋季开学典礼新闻稿
2015/11/25 职场文书
2016秋季田径运动会广播稿
2015/12/21 职场文书
优秀范文:《但愿人长久》教学反思3篇
2019/10/24 职场文书
Java 数组内置函数toArray详解
2021/06/28 Java/Android
MySQL下载安装配置详细教程 附下载资源
2022/09/23 MySQL