详解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 相关文章推荐
两个DIV等高的JS的实现代码
Dec 23 Javascript
Jquery AutoComplete自动完成 的使用方法实例
Mar 19 Javascript
简单易用的倒计时js代码
Aug 04 Javascript
推荐4个原生javascript常用的函数
Jan 12 Javascript
js简单网速测试方法完整实例
Dec 15 Javascript
jquery trigger实现联动的方法
Feb 29 Javascript
javascript 实现动态侧边栏实例详解
Nov 11 Javascript
微信小程序 css使用技巧总结
Jan 09 Javascript
JavaScript中常见内置函数用法示例
May 14 Javascript
Vue配合iView实现省市二级联动的示例代码
Jul 27 Javascript
Angular Excel 导入与导出的实现代码
Apr 17 Javascript
vue实现可移动的悬浮按钮
Mar 04 Vue.js
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获取当前日期和时间及格式化方法参数
2015/05/11 PHP
Cygwin中安装PHP方法步骤
2015/07/04 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
2012/05/23 Javascript
jquery阻止冒泡事件使用模拟事件
2013/09/06 Javascript
jquery实现的下拉和收缩效果示例
2014/08/21 Javascript
javascript 中__proto__和prototype详解
2014/11/25 Javascript
javascript框架设计之类工厂
2015/06/23 Javascript
js实现的页面矩阵图形变换特效
2016/01/26 Javascript
vue2.0+webpack环境的构造过程
2016/11/08 Javascript
Vue2.0 从零开始_环境搭建操作步骤
2017/06/14 Javascript
angular6.0开发教程之如何安装angular6.0框架
2018/06/29 Javascript
vue 中 beforeRouteEnter 死循环的问题
2019/04/23 Javascript
对layui中table组件工具栏的使用详解
2019/09/19 Javascript
three.js 实现露珠滴落动画效果的示例代码
2021/03/01 Javascript
介绍Python的Django框架中的静态资源管理器django-pipeline
2015/04/25 Python
详细解析Python当中的数据类型和变量
2015/04/25 Python
Python实现针对含中文字符串的截取功能示例
2017/09/22 Python
python中将\\uxxxx转换为Unicode字符串的方法
2018/09/06 Python
解决Python3.5+OpenCV3.2读取图像的问题
2018/12/05 Python
django框架基于模板 生成 excel(xls) 文件操作示例
2019/06/19 Python
Python整数对象实现原理详解
2019/07/01 Python
python元组和字典的内建函数实例详解
2019/10/22 Python
零基础小白多久能学会python
2020/06/22 Python
python如何使用腾讯云发送短信
2020/09/17 Python
详解css3 flex弹性盒自动铺满写法
2020/09/17 HTML / CSS
HTML5 Canvas锯齿图代码实例
2014/04/10 HTML / CSS
推荐10个HTML5响应式框架
2016/02/25 HTML / CSS
荟萃全球保健品:维他购
2018/05/09 全球购物
世界上最大的高分辨率在线图片库:Alamy
2018/07/07 全球购物
小学数学国培感言
2014/03/10 职场文书
北京申奥口号
2014/06/19 职场文书
python 模拟在天空中放风筝的示例代码
2021/04/21 Python
python学习之panda数据分析核心支持库
2021/05/07 Python
使用Bandicam录制鼠标指针并附带点击声音,还可以添加点击动画效果
2022/04/11 数码科技
MySQL中EXPLAIN语句及用法
2022/05/20 MySQL