extract-text-webpack-plugin用法详解


Posted in Javascript onFebruary 14, 2019

一 背景

最近在做一个项目,项目本身是用vue-cli创建的单页面应用,由于项目扩展需要创建多页面,所以需要对不同的html分别进行css文件打包。于是开始研究extract-text-webpack-plugin插件。

二 插件介绍

打包样式有两种方法,一种是使用style-loader自动将css代码放到生成的style标签中,并且插入到head标签里。另一种就是使用extract-text-webpack-plugin插件,将样式文件单独打包,打包输出的文件由配置文件中的output属性指定。然后我们在入口HTML页面写个link标签引入这个打包后的样式文件。

三 插件使用

1 插件安装:

# for webpack 3 
npm install --save-dev extract-text-webpack-plugin
# for webpack 2 
npm install --save-dev extract-text-webpack-plugin@2.1.2
# for webpack 1 
npm install --save-dev extract-text-webpack-plugin@1.0.1

2 插件使用

在webpack.config.js中引入

const ExtractTextPlugin = require("extract-text-webpack-plugin");

module.exports = {
 module: {
 rules: [
  {
  test: /\.css$/,
  use: ExtractTextPlugin.extract({
   fallback: "style-loader", // 编译后用什么loader来提取css文件
   use: "css-loader" // 指需要什么样的loader去编译文件,这里由于源文件是.css所以选择css-loader
  })
  }
 ]
 },
 plugins: [
 new ExtractTextPlugin("styles.css"),
 ]
}

多实例

在实例上也有个 extract function。如果你有1个以上的 ExtractTextPlugin 的实例,你应该使用实例上的 extract。

const ExtractTextPlugin = require('extract-text-webpack-plugin');

// Create multiple instances
const extractCSS = new ExtractTextPlugin('stylesheets/[name]-one.css');
const extractLESS = new ExtractTextPlugin('stylesheets/[name]-two.css');

module.exports = {
 module: {
 rules: [
  {
  test: /\.css$/,
  use: extractCSS.extract([ 'css-loader', 'postcss-loader' ])
  },
  {
  test: /\.less$/i,
  use: extractLESS.extract([ 'css-loader', 'less-loader' ])
  },
 ]
 },
 plugins: [
 extractCSS,
 extractLESS
 ]
};

抽取 Less 或者 Sass

配置是相同的, 根据需求使用 sass-loader 取代 less-loader。

const ExtractTextPlugin = require('extract-text-webpack-plugin');

module.exports = {
 module: {
 rules: [
  {
  test: /\.scss$/,
  use: ExtractTextPlugin.extract({
   fallback: 'style-loader',
   use: ['css-loader', 'sass-loader']
  })
  }
 ]
 },
 plugins: [
 new ExtractTextPlugin('style.css')
 //if you want to pass in options, you can do so:
 //new ExtractTextPlugin({
 // filename: 'style.css'
 //})
 ]
}

url() Resolving

如果你运行 webpack 发现 urls resolve 不对。你可以使用 options 扩展 loader 功能。 url: false 使得你的路径 resolve 的时候不会发生任何变化。

const ExtractTextPlugin = require('extract-text-webpack-plugin');

module.exports = {
 module: {
 rules: [
  {
  test: /\.scss$/,
  use: ExtractTextPlugin.extract({
   fallback: 'style-loader',
   use: [
   {
    loader: 'css-loader',
    options: {
     // If you are having trouble with urls not resolving add this setting.
     // See https://github.com/webpack-contrib/css-loader#url
     url: false,
     minimize: true,
     sourceMap: true
    }
   }, 
   {
    loader: 'sass-loader',
    options: {
     sourceMap: true
    }
   }
   ]
  })
  }
 ]
 }
}

改变文件名

filename 参数可以是 Function。通过传入 getPath 去处理像 css/[name].css 的格式,返回一个真正的文件名, css/js/a.css。你可以替换 css/js 为 css,这样你可以得到一个新的路径 css/a.css。

entry: {
 'js/a': "./a"
},
plugins: [
 new ExtractTextPlugin({
 filename: (getPath) => {
  return getPath('css/[name].css').replace('css/js', 'css');
 },
 allChunks: true
 })
]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
解析Jquery中如何把一段html代码动态写入到DIV中(实例说明)
Jul 09 Javascript
js验证IP及子网掩码的合法性有效性示例
Apr 30 Javascript
Javascript实现简单的富文本编辑器附演示
Jun 16 Javascript
使用jQuery将多条数据插入模态框的实现代码
Oct 08 Javascript
无刷新上传文件并返回自定义值
Jun 11 Javascript
javascript中闭包(Closure)详解
Jan 06 Javascript
深入理解MVC中的时间js格式化
May 19 Javascript
jQuery模拟淘宝购物车功能
Feb 27 Javascript
浅谈Vue初学之props的驼峰命名
Jul 19 Javascript
小程序实现左滑删除功能
Oct 30 Javascript
基于mpvue搭建微信小程序项目框架的教程详解
Apr 10 Javascript
解决vue 表格table列求和的问题
Nov 06 Javascript
JavaScript"模拟事件"的注意要点详解
Feb 13 #Javascript
快速了解Node中的Stream流是什么
Feb 13 #Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
Feb 13 #Javascript
vue实现点击隐藏与显示实例分享
Feb 13 #Javascript
JS+canvas画布实现炫酷的旋转星空效果示例
Feb 13 #Javascript
JavaScript实现的拼图算法分析
Feb 13 #Javascript
推荐15个最好用的JavaScript代码压缩工具
Feb 13 #Javascript
You might like
PHP5.2下chunk_split()函数整数溢出漏洞 分析
2007/06/06 PHP
PHP setcookie设置Cookie用法(及设置无效的问题)
2011/07/13 PHP
PHP句法规则详解 入门学习
2011/11/09 PHP
PHP中Fatal error session_start()错误解决步骤
2014/08/05 PHP
CI框架中通过hook的方式实现简单的权限控制
2015/01/07 PHP
php日志函数error_log用法实例分析
2019/09/23 PHP
Javascript 判断客户端浏览器类型代码
2010/03/01 Javascript
JS控制一个DIV层在指定时间内消失的方法
2014/02/17 Javascript
Javascript排序算法之计数排序的实例
2014/04/05 Javascript
JS实现仿新浪微博发布内容为空时提示功能代码
2015/08/19 Javascript
node.js实现端口转发
2016/04/14 Javascript
js点击返回跳转到指定页面实现过程
2020/08/20 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
2016/11/25 Javascript
微信小程序中使元素占满整个屏幕高度实现方法
2016/12/14 Javascript
jQuery获取Table某列的值(推荐)
2017/03/03 Javascript
webpack vue项目开发环境局域网访问方法
2018/03/20 Javascript
Vue不能观察到数组length的变化
2018/06/08 Javascript
Nuxt.js SSR与权限验证的实现
2018/11/21 Javascript
JS选取DOM元素常见操作方法实例分析
2018/12/10 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
react antd表格中渲染一张或多张图片的实例
2020/10/28 Javascript
[01:17]辉夜杯战队访谈宣传片—EHOME
2015/12/25 DOTA
[44:01]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS paiN
2018/03/31 DOTA
Python 爬虫学习笔记之单线程爬虫
2016/09/21 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
python高级特性和高阶函数及使用详解
2018/10/17 Python
详解python项目实战:模拟登陆CSDN
2019/04/04 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
2019/10/18 Python
使用python实现数组、链表、队列、栈的方法
2019/12/20 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
Zatchels官网:英国剑桥包品牌
2021/01/12 全球购物
下述程序的作用是计算机数组中的最大元素值及其下标
2012/11/26 面试题
中国梦演讲稿教师篇
2014/04/23 职场文书
公司的门卫岗位职责
2014/09/09 职场文书
2016公司年会通知范文
2015/04/25 职场文书
社区法制宣传月活动总结
2015/05/07 职场文书