详解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 相关文章推荐
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
Apr 16 Javascript
js实现快速分享功能(你的文章分享工具)
Jun 25 Javascript
运用jQuery定时器的原理实现banner图片切换
Oct 22 Javascript
JS解析XML文件和XML字符串详解
Apr 17 Javascript
javaScript中的原型解析【推荐】
May 05 Javascript
使用jQuery Ajax 请求webservice来实现更简练的Ajax
Aug 04 Javascript
JS批量替换内容中关键词为超链接
Feb 20 Javascript
jQuery查找dom的几种方法效率详解
May 17 jQuery
浅谈vue自定义全局组件并通过全局方法 Vue.use() 使用该组件
Dec 07 Javascript
vue的toast弹窗组件实例详解
May 14 Javascript
微信小程序实现单选选项卡切换效果
Jun 19 Javascript
vue在响应头response中获取自定义headers操作
Jul 24 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+mysql实现无限级分类 | 树型显示分类关系
2006/11/19 PHP
深入解析yii权限分级式访问控制的实现(非RBAC法)
2013/06/13 PHP
php+xml编程之SimpleXML的应用实例
2015/01/24 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
2015/05/27 PHP
php和asp语法上的区别总结
2019/05/12 PHP
Javascript实现DIV滚动自动滚动到底部的代码
2012/03/01 Javascript
js将iframe中控件的值传到主页面控件中的实现方法
2013/03/11 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
2013/10/11 Javascript
解析prototype,JQuery中跳出each循环的方法
2013/12/12 Javascript
js精美的幻灯片画集特效代码分享
2015/08/29 Javascript
基于jquery实现动态竖向柱状条特效
2016/02/12 Javascript
javascript HTML5 canvas实现打砖块游戏
2020/06/18 Javascript
JavaScript动态生成二维码图片
2016/04/20 Javascript
如何用js实现鼠标向上滚动时浮动导航
2016/07/18 Javascript
Javascript+CSS3实现进度条效果
2016/10/28 Javascript
详解如何在Angular中快速定位DOM元素
2017/05/17 Javascript
js登录滑动验证的实现(不滑动无法登陆)
2018/01/03 Javascript
Seajs源码详解分析
2019/04/02 Javascript
微信小程序实现下拉框功能
2019/07/16 Javascript
Vue实现渲染数据后控制滚动条位置(推荐)
2019/12/09 Javascript
Python中的字符串类型基本知识学习教程
2016/02/04 Python
用python打印菱形的实操方法和代码
2019/06/25 Python
Python中Unittest框架的具体使用
2019/08/27 Python
不到20行实现Python代码即可制作精美证件照
2020/04/24 Python
处理HTML5新标签的浏览器兼容版问题
2017/03/13 HTML / CSS
俄罗斯最大的在线手表商店:Bestwatch.ru
2020/01/11 全球购物
国际金融专业大学生职业生涯规划书
2013/12/28 职场文书
顶岗实习接收函
2014/01/09 职场文书
初二政治教学反思
2014/01/12 职场文书
庆祝教师节标语
2014/10/09 职场文书
2015年学生资助工作总结
2015/05/25 职场文书
2015年电气技术员工作总结
2015/07/24 职场文书
宝宝满月祝酒词
2015/08/10 职场文书
2016年度优秀辅导员事迹材料
2016/02/26 职场文书
MySQL 可扩展设计的基本原则
2021/05/14 MySQL
如何打开Win11系统注册表编辑器?Win11注册表编辑器打开修复方法
2022/04/05 数码科技