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 火狐(firefox)不显示本地图片问题解决
Jul 05 Javascript
基于jquery的button默认enter事件(回车事件)。
May 18 Javascript
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
Feb 18 Javascript
js中split和replace的用法实例
Feb 28 Javascript
AngularJS模块学习之Anchor Scroll
Jan 19 Javascript
初步使用bootstrap快速创建页面
Mar 03 Javascript
Bootstrap中的Panel和Table全面解析
Jun 13 Javascript
js实现表格筛选功能
Jan 18 Javascript
微信JS-SDK选取手机照片上传功能
Apr 21 Javascript
JS正则表达式完美实现身份证校验功能
Oct 18 Javascript
微信小程序城市选择及搜索功能的方法
Mar 22 Javascript
详解微信小程序实现跑马灯效果(附完整代码)
Apr 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实现数组筛选奇数和偶数示例
2014/04/11 PHP
Codeigniter操作数据库表的优化写法总结
2014/06/12 PHP
php session_decode函数用法讲解
2019/05/26 PHP
Javascript模板技术
2007/04/27 Javascript
有关js的变量作用域和this指针的讨论
2010/12/16 Javascript
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
在js文件中如何获取basePath处理js路径问题
2013/07/10 Javascript
javascript实现表格排序 编辑 拖拽 缩放
2015/01/02 Javascript
JavaScript中数据结构与算法(四):串(BF)
2015/06/19 Javascript
分享有关jQuery中animate、slide、fade等动画的连续触发、滞后反复执行的bug
2016/01/10 Javascript
JQuery获取鼠标进入和离开容器的方向
2016/12/29 Javascript
JS实现标签页切换效果
2017/05/04 Javascript
underscore之Chaining_动力节点Java学院整理
2017/07/10 Javascript
微信小程序适配iphoneX的实现方法
2018/09/18 Javascript
jQuery实现ajax的嵌套请求案例分析
2019/02/16 jQuery
js 下拉菜单点击旁边收起实现(踩坑记)
2019/09/29 Javascript
Python脚本获取操作系统版本信息
2016/12/17 Python
python如何实现int函数的方法示例
2018/02/19 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
2018/04/08 Python
Python简单定义与使用二叉树示例
2018/05/11 Python
python批量修改图片尺寸,并保存指定路径的实现方法
2019/07/04 Python
如何用Python来搭建一个简单的推荐系统
2019/08/07 Python
使用Python实现批量ping操作方法
2020/05/06 Python
css3的@media属性实现页面响应式布局示例代码
2014/02/10 HTML / CSS
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
cosme官方海外旗舰店:日本最大化妆品和美容产品的综合口碑网站
2017/01/18 全球购物
Java平台和其他软件平台有什么不同
2015/06/05 面试题
大学生实习自我鉴定
2013/12/11 职场文书
金融事务专业毕业生求职信
2014/02/23 职场文书
超市创意活动方案
2014/08/15 职场文书
八荣八耻演讲稿
2014/09/15 职场文书
水浒传读书笔记
2015/06/25 职场文书
生活委员竞选稿
2015/11/21 职场文书
如何做好工作总结!
2019/04/10 职场文书
Mysql中一千万条数据怎么快速查询
2021/12/06 MySQL
Python中非常使用的6种基本变量的操作与技巧
2022/03/22 Python