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 相关文章推荐
JObj预览一个JS的框架
Mar 13 Javascript
基于jquery的给文章加入关键字链接
Oct 26 Javascript
jquery ui dialog实现弹窗特效的思路及代码
Aug 03 Javascript
调整小数的格式保留小数点后两位
May 14 Javascript
javascript用函数实现对象的方法
May 14 Javascript
JavaScript面向对象编写购物车功能
Aug 19 Javascript
Angular使用动态加载组件方法实现Dialog的示例
May 11 Javascript
vue2.0 中使用transition实现动画效果使用心得
Aug 13 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
Sep 26 Javascript
详解webpack 最简打包结果分析
Feb 20 Javascript
JS面试题中深拷贝的实现讲解
May 07 Javascript
微信小程序自定义yPicker组件实现省市区三级联动功能
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中计算程序运行时间的类代码
2012/11/03 PHP
PHP使用CURL获取302跳转后的地址实例
2014/05/04 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
2014/06/19 PHP
php获取文章上一页与下一页的方法
2014/12/01 PHP
php中的异常和错误浅析
2017/05/03 PHP
PHP实现的一致性Hash算法详解【分布式算法】
2018/03/31 PHP
nicejforms——美化表单不用愁
2007/02/20 Javascript
用js做一个小游戏平台 (一)
2009/12/29 Javascript
jquery自动切换tabs选项卡的具体实现
2013/12/24 Javascript
JS+CSS实现可拖拽的漂亮圆角特效弹出层完整实例
2015/02/13 Javascript
JS制作图形验证码实现代码
2020/10/19 Javascript
基于bootstrap实现收缩导航条
2017/03/17 Javascript
nodejs学习笔记之路由
2017/03/27 NodeJs
微信小程序 ES6Promise.all批量上传文件实现代码
2017/04/14 Javascript
JavaScript操作文件_动力节点Java学院整理
2017/06/30 Javascript
Angular利用内容投射向组件输入ngForOf模板的方法
2018/03/05 Javascript
JS实现的判断方法、变量是否存在功能示例
2020/03/28 Javascript
vue实现匀速轮播效果
2020/06/29 Javascript
uni-app实现获取验证码倒计时功能
2020/11/01 Javascript
轻松实现python搭建微信公众平台
2016/02/16 Python
使用Python中的tkinter模块作图的方法
2017/02/07 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
2017/09/12 Python
浅谈python数据类型及类型转换
2017/12/18 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
2021/01/29 Python
CSS3对图片照片进行边缘模糊处理的实现
2018/08/08 HTML / CSS
吉列剃须刀英国官网:Gillette英国
2019/03/28 全球购物
英国礼品和生活方式品牌:Treat Republic
2020/11/21 全球购物
市场部专员岗位职责
2013/11/30 职场文书
人资专员岗位职责
2014/04/04 职场文书
解除劳动合同协议书(样本)
2014/10/02 职场文书
防灾减灾宣传标语
2014/10/07 职场文书
健康状况证明书
2014/11/26 职场文书
单位病假条范文
2015/08/17 职场文书
如何利用python和DOS获取wifi密码
2021/03/31 Python
python glom模块的使用简介
2021/04/13 Python
python文件与路径操作神器 pathlib
2022/04/01 Python