详解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/Jquery——简单定时器的多种实现方法
Jul 03 Javascript
通过javascript把图片转化为字符画
Oct 24 Javascript
js 调用百度地图api并在地图上进行打点添加标注
May 13 Javascript
JavaScript实现动态创建CSS样式规则方案
Sep 06 Javascript
Bootstrap基本插件学习笔记之Tooltip提示工具(18)
Dec 08 Javascript
基于Vue2实现的仿手机QQ单页面应用功能(接入聊天机器人 )
Mar 30 Javascript
vue v-on监听事件详解
May 17 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
Jun 13 Javascript
原生js实现抽奖小游戏
Jun 27 Javascript
浅谈TypeScript 用 Webpack/ts-node 运行的配置记录
Oct 11 Javascript
JavaScript实现省份城市的三级联动
Feb 11 Javascript
React服务端渲染原理解析与实践
Mar 04 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把HTML生成PDF文件的几个开源项目介绍
2014/11/17 PHP
php实现的简易扫雷游戏实例
2015/07/09 PHP
繁简字转换功能
2006/07/19 Javascript
javascript 鼠标滚轮事件
2009/04/09 Javascript
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
2011/06/08 Javascript
鼠标滚轴控制文本框值的JS代码
2013/11/19 Javascript
javascript使用call调用微信API
2014/12/15 Javascript
利用D3.js实现最简单的柱状图示例代码
2016/12/09 Javascript
JS正则表达式之非捕获分组用法实例分析
2016/12/28 Javascript
网页中右键功能的实现方法之contextMenu的使用
2017/02/20 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
2017/09/19 Javascript
详解JS中的this、apply、call、bind(经典面试题)
2017/09/19 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
Angular4实现鼠标悬停3d倾斜效果
2017/10/25 Javascript
vue-cli与webpack处理静态资源的方法及webpack打包的坑
2018/05/15 Javascript
vue遍历生成的输入框 绑定及修改值示例
2019/10/30 Javascript
vue 解决移动端弹出键盘导致页面fixed布局错乱的问题
2019/11/06 Javascript
vant 时间选择器--开始时间和结束时间实例
2020/11/04 Javascript
Python实现计算文件夹下.h和.cpp文件的总行数
2015/04/23 Python
Python输出汉字字库及将文字转换为图片的方法
2016/06/04 Python
OpenCV2.3.1+Python2.7.3+Numpy等的配置解析
2018/01/05 Python
解决python os.mkdir创建目录失败的问题
2018/10/16 Python
pandas 根据列的值选取所有行的示例
2018/11/07 Python
python__name__原理及用法详解
2019/11/02 Python
CentOS7下安装python3.6.8的教程详解
2020/01/03 Python
Keras实现DenseNet结构操作
2020/07/06 Python
python 8种必备的gui库
2020/08/27 Python
Python中使用Selenium环境安装的方法步骤
2021/02/22 Python
毕业生求职信的经典写法
2014/01/31 职场文书
抄作业检讨书
2014/02/17 职场文书
培训班主持词
2014/03/28 职场文书
2015年考研复习计划
2015/01/19 职场文书
教师考核表个人总结
2015/02/12 职场文书
对领导班子的意见和建议
2015/06/08 职场文书
小王子读书笔记
2015/06/29 职场文书
在JavaScript中如何使用宏详解
2021/05/06 Javascript