详解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 相关文章推荐
jQuery之折叠面板的深入解析
Jun 19 Javascript
javascript事件模型实例分析
Jan 30 Javascript
jquery 插件实现多行文本框[textarea]自动高度
Mar 04 Javascript
Javascript非构造函数的继承
Apr 27 Javascript
jQuery中closest和parents的区别分析
May 07 Javascript
使用jQuery UI库开发Web界面的简单入门指引
Apr 22 Javascript
快速掌握jQuery插件WebUploader文件上传
Nov 07 Javascript
微信小程序 scroll-view组件实现列表页实例代码
Dec 14 Javascript
详解基于vue-router的动态权限控制实现方案
Sep 28 Javascript
react 父子组件之间通讯props
Sep 08 Javascript
javascript系统时间设置操作示例
Jun 17 Javascript
只有 20 行的 JavaScript 模板引擎实例详解
May 11 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指定函数参数默认值示例代码
2013/12/04 PHP
php文件夹的创建与删除方法
2015/01/24 PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
2015/10/19 PHP
Yii框架连表查询操作示例
2019/09/06 PHP
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
Jquery 插件学习实例1 插件制作说明与tableUI优化
2010/04/02 Javascript
jQuery实现的Email中的收件人效果(按del键删除)
2011/03/20 Javascript
javascript实现的图片切割多块效果实例
2015/05/07 Javascript
js中flexible.js实现淘宝弹性布局方案
2020/06/23 Javascript
jQuery 3.0中存在问题及解决办法
2016/07/15 Javascript
JS遍历页面所有对象属性及实现方法
2016/08/01 Javascript
JavaScript DOM节点操作方法总结
2016/08/23 Javascript
JavaScript省市级联下拉菜单实例
2017/02/14 Javascript
jQuery自定义多选下拉框效果
2017/06/19 jQuery
Vue组件之全局组件与局部组件的使用详解
2017/10/09 Javascript
基于vue-cli创建的项目的目录结构及说明介绍
2017/11/23 Javascript
Vue开发之封装分页组件与使用示例
2019/04/25 Javascript
深入理解javascript prototype的相关知识
2019/09/19 Javascript
jQuery AJAX应用实例总结
2020/05/19 jQuery
Python实现的Kmeans++算法实例
2014/04/26 Python
在Python中处理列表之reverse()方法的使用教程
2015/05/21 Python
Python基于递归算法实现的走迷宫问题
2017/08/04 Python
python删除不需要的python文件方法
2018/04/24 Python
详解用TensorFlow实现逻辑回归算法
2018/05/02 Python
解决seaborn在pycharm中绘图不出图的问题
2018/05/24 Python
python爬虫获取新浪新闻教学
2018/12/23 Python
对python 生成拼接xml报文的示例详解
2018/12/28 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
2019/07/22 Python
Python列表操作方法详解
2020/02/09 Python
世界领先的豪华床上用品供应商之一:Bedeck Home
2019/03/18 全球购物
New Balance俄罗斯官方网上商店:购买运动鞋
2020/03/02 全球购物
师范学院美术系毕业生自我鉴定
2014/01/29 职场文书
大学生期末自我鉴定
2014/02/01 职场文书
2015年语言文字工作总结
2015/07/23 职场文书
你离财务总监还有多远?速览CFO的岗位职责
2019/11/18 职场文书
Windows11里微软已经将驱动程序安装位置A盘删除
2021/11/21 数码科技