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 相关文章推荐
才发现的超链接js导致网页中GIF动画停止的解决方法
Nov 02 Javascript
javascript 数组的方法集合
Jun 05 Javascript
jquery下onpropertychange事件的绑定方法
Aug 01 Javascript
js实现上传图片预览方法
Oct 25 Javascript
javascript中对象的定义、使用以及对象和原型链操作小结
Dec 14 Javascript
详解AngularJS 路由 resolve用法
Apr 24 Javascript
Vue组件通信实践记录(推荐)
Aug 15 Javascript
jQueryUI Sortable 应用Demo(分享)
Sep 07 jQuery
全站最详细的Vuex教程
Apr 13 Javascript
通过javascript实现段落的收缩与展开
Jun 26 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
Jul 21 Javascript
JavaScript实现随机点名小程序
Oct 29 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
解析PHP函数array_flip()在重复数组元素删除中的作用
2013/06/27 PHP
php中strtotime函数用法详解
2014/11/15 PHP
php中in_array函数用法探究
2014/11/25 PHP
PHP常用算法和数据结构示例(必看篇)
2017/03/15 PHP
Laravel框架使用Redis的方法详解
2018/05/30 PHP
前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)
2010/03/04 Javascript
JS实现商品倒计时实现代码
2013/05/03 Javascript
javascript文本模板用法实例
2015/07/31 Javascript
jquery动态遍历Json对象的属性和值的方法
2016/07/27 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
2016/08/12 Javascript
详解Javascript中prototype属性(推荐)
2016/09/03 Javascript
树结构之JavaScript
2017/01/24 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
vue 粒子特效的示例代码
2017/09/19 Javascript
VUE中的无限循环代码解析
2017/09/22 Javascript
js限制input只能输入有效的数字(第一个不能是小数点)
2018/09/28 Javascript
小程序新版订阅消息模板消息
2019/12/31 Javascript
vue绑定数字类型 value为数字的实例
2020/08/31 Javascript
[05:26]TI10典藏宝瓶套装外观展示
2020/07/03 DOTA
用Python的线程来解决生产者消费问题的示例
2015/04/02 Python
Python简单进程锁代码实例
2015/04/27 Python
Python基于FTP模块实现ftp文件上传操作示例
2018/04/23 Python
python遍历文件夹找出文件夹后缀为py的文件方法
2018/10/21 Python
Selenium基于PIL实现拼接滚动截图
2020/04/10 Python
python属于解释语言吗
2020/06/11 Python
html5使用canvas实现跟随光标跳动的火焰效果
2014/01/07 HTML / CSS
伦敦所有西区剧院演出官方票务代理:Theatre Tickets Direct
2017/05/26 全球购物
电气自动化大学生求职信
2013/10/16 职场文书
仓库保管员岗位职责
2013/12/20 职场文书
会计员岗位职责
2014/03/15 职场文书
教师党员一句话承诺
2014/03/28 职场文书
家庭财产分割协议书范本
2014/11/24 职场文书
让世界充满爱观后感
2015/06/10 职场文书
《坐井观天》教学反思
2016/02/18 职场文书
Mysql服务添加 iptables防火墙策略的方案
2021/04/29 MySQL
Golang 1.18 多模块Multi-Module工作区模式的新特性
2022/04/11 Golang