详解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 相关文章推荐
60个很实用的jQuery代码开发技巧收集
Dec 15 Javascript
使用jQuery获得内容以及内容的属性
Feb 26 Javascript
Backbone.js框架中简单的View视图编写学习笔记
Feb 14 Javascript
JS简单获取及显示当前时间的方法
Aug 03 Javascript
Jquery获取当前城市的天气信息
Aug 05 Javascript
vue2.0+webpack环境的构造过程
Nov 08 Javascript
react native实现往服务器上传网络图片的实例
Aug 07 Javascript
IntelliJ IDEA 安装vue开发插件的方法
Nov 21 Javascript
Angular脚手架开发的实现步骤
Apr 09 Javascript
vue 实现小程序或商品秒杀倒计时
Apr 14 Javascript
创建与框架无关的JavaScript插件
Dec 01 Javascript
react-native 实现购物车滑动删除效果的示例代码
Jan 15 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目录与文件操作技巧总结(创建,删除,遍历,读写,修改等)
2016/09/11 PHP
PHP基于ip2long实现IP转换整形
2020/12/11 PHP
javascript与CSS复习(三)
2010/06/29 Javascript
情人节专属 纯js脚本1k大小的3D玫瑰效果
2012/02/11 Javascript
javaScript arguments 对象使用介绍
2013/10/18 Javascript
jquery获得option的值和对option进行操作
2013/12/13 Javascript
Google官方支持的NodeJS访问API,提供后台登录授权
2014/07/29 NodeJs
window.location的重写及判断location是否被重写
2014/09/04 Javascript
JavaScript将字符串转换为整数的方法
2015/04/14 Javascript
laypage分页控件使用实例详解
2016/05/19 Javascript
深入理解ES6的迭代器与生成器
2017/08/19 Javascript
JS实现的将html转为pdf功能【基于浏览器端插件jsPDF】
2018/02/06 Javascript
React之PureComponent的使用作用
2018/07/10 Javascript
微信小程序webview与h5通过postMessage实现实时通讯的实现
2019/08/20 Javascript
NodeJS 文件夹拷贝以及删除功能
2019/09/03 NodeJs
Vue的状态管理vuex使用方法详解
2020/02/05 Javascript
JavaScript数组类型Array相关的属性与方法详解
2020/09/08 Javascript
vue用ant design中table表格,点击某行时触发的事件操作
2020/10/28 Javascript
[55:42]VG vs VGJ.T 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
[01:01:01]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第一场 10.29
2020/10/29 DOTA
可用于监控 mysql Master Slave 状态的python代码
2013/02/10 Python
python 调用c语言函数的方法
2017/09/29 Python
Python使用pyh生成HTML文档的方法示例
2018/03/10 Python
python使用tensorflow深度学习识别验证码
2018/04/03 Python
Python 实现域名解析为ip的方法
2019/02/14 Python
将Python文件打包成.EXE可执行文件的方法
2019/08/11 Python
宝拉珍选英国官网:Paula’s Choice英国
2019/05/29 全球购物
运动会入场词60字
2014/02/15 职场文书
毕业生写求职信的要点
2014/03/04 职场文书
管理失职检讨书范文
2015/05/05 职场文书
我在伊朗长大观后感
2015/06/16 职场文书
2015年成本会计工作总结
2015/10/14 职场文书
《月球之谜》教学反思
2016/02/20 职场文书
资产移交协议书
2016/03/24 职场文书
ipad隐藏软件app图标方法
2022/04/19 数码科技
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
2022/07/07 Java/Android