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 EasyUI 使用介绍
Apr 01 Javascript
使用apply方法处理数组的三个技巧[译]
Sep 20 Javascript
向当前style sheet中插入一个新的style实现方法
Apr 01 Javascript
利用ajaxfileupload插件实现文件上传无刷新的具体方法
Jun 08 Javascript
jQuery实现在列表的首行添加数据
May 19 Javascript
jQuery可见性过滤器:hidden和:visibility用法实例
Jun 24 Javascript
js实现的星星评分功能函数
Dec 09 Javascript
React Native之ListView实现九宫格效果的示例
Aug 02 Javascript
jq.ajax+php+mysql实现关键字模糊查询(示例讲解)
Jan 02 Javascript
Vue + better-scroll 实现移动端字母索引导航功能
May 07 Javascript
原生JavaScript之es6中Class的用法分析
Feb 23 Javascript
vue中destroyed方法的使用说明
Jul 21 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中目录,文件操作详谈
2007/03/19 PHP
解析PHP多种序列化与反序列化的方法
2013/06/06 PHP
PHP MPDF中文乱码的解决方式
2015/12/08 PHP
php redis实现文章发布系统(用户投票系统)
2017/03/04 PHP
PHP CodeIgniter分页实例及多条件查询解决方案(推荐)
2017/05/20 PHP
PHP PDOStatement::getColumnMeta讲解
2019/02/01 PHP
layui数据表格自定义每页条数limit设置
2019/10/26 PHP
XAMPP升级PHP版本实现步骤解析
2020/09/04 PHP
js Map List 遍历使用示例
2013/07/10 Javascript
JavaScript实现将xml转换成html table表格的方法
2015/04/17 Javascript
详细谈谈javascript的对象
2016/07/31 Javascript
JS冒泡事件与事件捕获实例详解
2016/11/25 Javascript
JavaScript获取短信验证码(周期性)
2016/12/29 Javascript
AngularJS实现自定义指令与控制器数据交互的方法示例
2017/06/19 Javascript
详解在vue-cli中使用路由
2017/09/25 Javascript
vue+element-ui动态生成多级表头的方法
2018/08/28 Javascript
解决vue 格式化银行卡(信用卡)每4位一个符号隔断的问题
2018/09/14 Javascript
微信小程序wx.request的简单封装
2019/11/13 Javascript
Python常用列表数据结构小结
2014/08/06 Python
Python访问MongoDB,并且转换成Dataframe的方法
2018/10/15 Python
Python rstrip()方法实例详解
2018/11/11 Python
Django模板语言 Tags使用详解
2019/09/09 Python
10行Python代码计算汽车数量的实现方法
2019/10/23 Python
python turtle 绘制太极图的实例
2019/12/18 Python
Python3实现打印任意宽度的菱形代码
2020/04/12 Python
揭牌仪式主持词
2014/03/19 职场文书
法律专业求职信
2014/05/24 职场文书
物业管理专业求职信
2014/06/11 职场文书
党委班子剖析材料
2014/08/21 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
乡镇团委工作总结2015
2015/05/26 职场文书
拉贝日记观后感
2015/06/05 职场文书
MySQL sql_mode修改不生效的原因及解决
2021/05/07 MySQL
python 利用PyAutoGUI快速构建自动化操作脚本
2021/05/31 Python
python自动化测试通过日志3分钟定位bug
2021/11/20 Python
关于EntityWrapper的in用法
2022/03/22 Java/Android