详解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 相关文章推荐
JavaScript的public、private和privileged模式
Dec 28 Javascript
收集json解析的四种方法分享
Jan 17 Javascript
js输出阴历、阳历、年份、月份、周示例代码
Jan 29 Javascript
值得分享的bootstrap table实例
Sep 22 Javascript
vue多级多选菜单组件开发
Sep 08 Javascript
js仿小米手机上下滑动效果
Feb 05 Javascript
JavaScript中立即执行函数实例详解
Nov 04 Javascript
jQuery图片加载失败替换默认图片方法汇总
Nov 29 jQuery
浅谈js闭包理解
Apr 01 Javascript
深入学习TypeScript 、React、 Redux和Ant-Design的最佳实践
Jun 17 Javascript
JS addEventListener()和attachEvent()方法实现注册事件
Jan 11 Javascript
详解js创建对象的几种方式和对象方法
Mar 01 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中printf()函数格式化使用
2016/05/23 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
40款非常有用的 jQuery 插件推荐(系列一)
2011/12/21 Javascript
完美解决IE低版本不支持call与apply的问题
2013/12/05 Javascript
JS模拟实现Select效果代码
2015/09/24 Javascript
Bootstrap Paginator分页插件与ajax相结合实现动态无刷新分页效果
2016/05/27 Javascript
详细谈谈javascript的对象
2016/07/31 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
2017/01/23 Javascript
vue-router跳转页面的方法
2017/02/09 Javascript
layer弹出层中H5播放器全屏出错的解决方法
2017/02/21 Javascript
JavaScript之class继承_动力节点Java学院整理
2017/07/03 Javascript
angularJs 表格添加删除修改查询方法
2018/02/27 Javascript
微信小程序bindtap事件与冒泡阻止详解
2019/08/08 Javascript
python如何重载模块实例解析
2018/01/25 Python
pandas 转换成行列表进行读取与Nan处理的方法
2018/10/30 Python
对Python信号处理模块signal详解
2019/01/09 Python
python创建与遍历List二维列表的方法
2019/08/16 Python
Python产生一个数值范围内的不重复的随机数的实现方法
2019/08/21 Python
python中的逆序遍历实例
2019/12/25 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
2020/02/06 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
2020/06/02 Python
css3中检验表单的required,focus,valid和invalid样式
2014/02/21 HTML / CSS
Sneaker Studio乌克兰:购买运动鞋
2018/03/26 全球购物
什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
2012/05/23 面试题
Java基础知识面试题
2014/03/25 面试题
追悼会子女答谢词
2014/01/28 职场文书
总账会计岗位职责
2014/03/13 职场文书
《蝙蝠和雷达》教学反思
2014/04/23 职场文书
助人为乐道德模范事迹材料
2014/08/16 职场文书
营销学习心得体会
2014/09/12 职场文书
中学生旷课检讨书模板
2014/10/08 职场文书
2014年乡镇工会工作总结
2014/12/02 职场文书
销售工作决心书
2015/02/04 职场文书
党员个人承诺书
2015/04/27 职场文书
PyTorch的Debug指南
2021/05/07 Python
Github 使用python对copilot做些简单使用测试
2022/04/14 Python