详解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 学习之旅 (3)
Feb 05 Javascript
异步javascript的原理和实现技巧介绍
Nov 08 Javascript
网页右侧悬浮滚动在线qq客服代码示例
Apr 28 Javascript
JavaScript学习笔记之定时器
Jan 22 Javascript
基于javascript实现文字无缝滚动效果
Mar 22 Javascript
Bootstrap table分页问题汇总
May 30 Javascript
强大Vue.js组件浅析
Sep 12 Javascript
AngularJS中的缓存使用
Jan 11 Javascript
小程序点赞收藏功能的实现代码示例
Sep 07 Javascript
vue webpack开发访问后台接口全局配置的方法
Sep 18 Javascript
Vue.js 中的实用工具方法【推荐】
Jul 04 Javascript
js 动态校验开始结束时间的实现代码
May 25 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
使用openssl实现rsa非对称加密算法示例
2014/01/24 PHP
php 判断网页是否是utf8编码的方法
2014/06/06 PHP
codeigniter数据库操作函数汇总
2014/06/12 PHP
smarty简单应用实例
2015/11/03 PHP
Redis在Laravel项目中的应用实例详解
2017/08/11 PHP
用prototype实现的简单小巧的多级联动菜单
2007/03/24 Javascript
JavaScript 弹出窗体点击按钮返回选择数据的实现
2010/04/01 Javascript
js实现动态添加、删除行、onkeyup表格求和示例
2013/08/18 Javascript
jQuery实现定时读取分析xml文件的方法
2015/07/16 Javascript
jquery+css实现绚丽的横向二级下拉菜单-附源码下载
2015/08/23 Javascript
JavaScript实现的搜索及高亮显示功能示例
2017/08/14 Javascript
JS实现浏览上传文件的代码
2017/08/23 Javascript
vue.js 嵌套循环、if判断、动态删除的实例
2018/03/07 Javascript
javascript中数组的常用算法深入分析
2019/03/12 Javascript
Vue 指令实现按钮级别权限管理功能
2019/04/23 Javascript
JS中封装axios来管控api的2种方式
2019/09/11 Javascript
nodejs使用socket5进行代理请求的实现
2020/02/21 NodeJs
jQuery实现滑动开关效果
2020/08/02 jQuery
Python新手们容易犯的几个错误总结
2017/04/01 Python
Mac中Python 3环境下安装scrapy的方法教程
2017/10/26 Python
python Pexpect 实现输密码 scp 拷贝的方法
2019/01/03 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
2019/02/26 Python
python opencv如何实现图片绘制
2020/01/19 Python
tensorflow自定义激活函数实例
2020/02/04 Python
TensorFlow实现checkpoint文件转换为pb文件
2020/02/10 Python
HTML5中的强制下载属性download使用实例解析
2016/05/12 HTML / CSS
美国LOGO设计公司:The Logo Company
2018/07/16 全球购物
mysql的最长数据库名,表名,字段名可以是多长
2014/04/21 面试题
PHP中如何创建和修改数组
2012/05/02 面试题
最新的大学生找工作自我评价
2013/09/29 职场文书
公司综合部的成员自我评价分享
2013/11/05 职场文书
教师节活动主持词
2014/04/02 职场文书
经理岗位职责范本
2015/04/15 职场文书
辩论赛主持人开场白
2015/05/29 职场文书
Nginx已编译的nginx-添加新模块
2021/04/01 Servers
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
2022/05/11 Servers