详解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 相关文章推荐
DOMAssitant最新版 DOMAssistant 2.5发布
Dec 25 Javascript
使弱类型的语言JavaScript变强势
Jun 22 Javascript
通过Mootools 1.2来操纵HTML DOM元素
Sep 15 Javascript
jquery 仿QQ校友的DIV模拟窗口效果源码
Mar 24 Javascript
js 多浏览器分别判断代码
Apr 01 Javascript
js防止页面被iframe调用的方法
Oct 30 Javascript
jquery实现鼠标滑过显示提示框的方法
Feb 05 Javascript
jQuery实现图片渐入渐出切换展示效果
Aug 15 Javascript
JS中with的替代方法与String中的正则方法详解
Dec 23 Javascript
原生js基于canvas实现一个简单的前端截图工具代码实例
Sep 10 Javascript
Vue数字输入框组件的使用方法
Oct 19 Javascript
Vue快速实现通用表单验证功能
Dec 05 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中单个数据库字段多列显示(单字段分页、横向输出)
2014/07/28 PHP
54个提高PHP程序运行效率的方法
2015/07/19 PHP
4种PHP异步执行的常用方式
2015/12/24 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
php微信公众平台示例代码分析(二)
2016/12/06 PHP
Zend Framework路由器用法实例详解
2016/12/11 PHP
浅谈PHP的反射API
2017/02/26 PHP
YII框架中使用memcache的方法详解
2017/08/02 PHP
详细讲解JS节点知识
2010/01/31 Javascript
select 控制网页内容隐藏于显示的实现代码
2010/05/25 Javascript
javscript对象原型的一些看法
2010/09/19 Javascript
js出生日期 年月日级联菜单示例代码
2014/01/10 Javascript
谈谈JavaScript中function多重理解
2015/08/28 Javascript
JS组件Bootstrap实现弹出框效果代码
2016/04/26 Javascript
Nodejs进阶:基于express+multer的文件上传实例
2016/11/21 NodeJs
原生JS获取元素集合的子元素宽度实例
2016/12/14 Javascript
微信小程序实现实时圆形进度条的方法示例
2017/02/24 Javascript
值得分享和收藏的xmlplus组件学习教程
2017/05/05 Javascript
使用angular帮你实现拖拽的示例
2017/07/05 Javascript
JS实现监控微信小程序的原理
2018/06/15 Javascript
基于vue实现一个神奇的动态按钮效果
2019/05/15 Javascript
vue spa应用中的路由缓存问题与解决方案
2019/05/31 Javascript
JavaScript动态检测密码强度原理及实现方法详解
2019/06/11 Javascript
layer.alert回调函数执行关闭弹窗的实例
2019/09/11 Javascript
[01:00]DOTA2 store: Collection of Artisan's Wonders
2015/08/12 DOTA
python之模拟鼠标键盘动作具体实现
2013/12/30 Python
一步步教你用python的scrapy编写一个爬虫
2019/04/17 Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
2020/06/12 Python
基于 HTML5 WebGL 实现的垃圾分类系统
2019/10/08 HTML / CSS
几个Linux面试题笔试题
2016/08/01 面试题
迟到检讨书900字
2014/01/14 职场文书
诉讼财产保全担保书
2014/05/20 职场文书
诉讼代理人授权委托书
2014/10/11 职场文书
2015大学自主招生自荐信范文
2015/03/04 职场文书
宾馆前台接待岗位职责
2015/04/02 职场文书
辞职信怎么写?你都知道吗?
2019/06/24 职场文书