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 相关文章推荐
javascript 进阶篇3 Ajax 、JSON、 Prototype介绍
Mar 14 Javascript
js 左右悬浮对联广告特效代码
Dec 12 Javascript
详细分析JavaScript函数定义
Jul 16 Javascript
JS实现仿新浪黄色经典滑动门效果代码
Sep 27 Javascript
JavaScript编写的网页小游戏,很给力
Aug 18 Javascript
vue.js 实现图片本地预览 裁剪 压缩 上传功能
Mar 01 Javascript
微信小程序中实现手指缩放图片的示例代码
Mar 13 Javascript
微信小程序实现之手势锁功能实例代码
Jul 19 Javascript
如何在vue里添加好看的lottie动画
Aug 02 Javascript
angularJs自定义过滤器实现手机号信息隐藏的方法
Oct 08 Javascript
JS复杂判断的更优雅写法代码详解
Nov 07 Javascript
在vue中使用Echarts画曲线图的示例
Oct 03 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
thinkphp模板输出技巧汇总
2014/11/24 PHP
php查看当前Session的ID实例
2015/03/16 PHP
JS创建优美的页面滑动块效果 - Glider.js
2007/09/27 Javascript
jquery实现瀑布流效果分享
2014/03/26 Javascript
js语法学习之判断一个对象是否为数组
2014/05/13 Javascript
JavaScript获取图片真实大小代码实例
2014/09/24 Javascript
移动设备web开发首选框架:zeptojs介绍
2015/01/29 Javascript
JavaScript截断字符串的方法
2015/07/15 Javascript
jquery可定制的在线UEditor编辑器
2015/11/17 Javascript
学习JavaScript设计模式(封装)
2015/11/26 Javascript
JS转换HTML转义符的方法
2016/08/24 Javascript
js 获取本地文件及目录的方法(推荐)
2016/11/10 Javascript
Express之get,pos请求参数的获取
2017/05/02 Javascript
webpack开发跨域问题解决办法
2017/08/03 Javascript
JavaScript中Require调用js的实例分享
2017/10/27 Javascript
Vue按需加载的具体实现
2017/12/02 Javascript
js实现图片上传并预览功能
2018/08/06 Javascript
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
2019/03/29 Javascript
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
全面了解Python的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
Python使用修饰器执行函数的参数检查功能示例
2017/09/26 Python
python PyTorch参数初始化和Finetune
2018/02/11 Python
python实现文件的分割与合并
2019/08/29 Python
Python实现多线程/多进程的TCP服务器
2019/09/03 Python
python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案
2020/02/18 Python
Python填充任意颜色,不同算法时间差异分析说明
2020/05/16 Python
Pycharm新手使用教程(图文详解)
2020/09/17 Python
CSS3中使用RGBa来调节透明度的教程
2016/05/09 HTML / CSS
HTML5的结构和语义(5):内嵌媒体
2008/10/17 HTML / CSS
业务副厂长岗位职责
2014/01/03 职场文书
小学母亲节活动方案
2014/03/14 职场文书
学历证明范文
2015/06/16 职场文书
医院岗前培训心得体会
2016/01/08 职场文书
只需要12页,掌握撰写一流商业计划书的技巧
2019/05/07 职场文书
Ajax实现三级联动效果
2021/10/05 Javascript
PostgreSQL出现死锁该如何解决
2022/05/30 PostgreSQL