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 相关文章推荐
IE与firefox之jquery用法区别
Oct 03 Javascript
JavaScript 拖拉缩放效果
Dec 10 Javascript
javascript在myeclipse中报错的解决方法
Oct 29 Javascript
javascript特殊用法示例介绍
Nov 29 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
Apr 25 Javascript
js检测输入内容全为空格的方法
May 03 Javascript
jQuery插件zepto.js简单实现tab切换
Jun 16 Javascript
利用JavaScript实现拖拽改变元素大小
Dec 14 Javascript
详解angularjs 关于ui-router分层使用
Jun 12 Javascript
基于VUE实现的九宫格抽奖功能
Sep 30 Javascript
vue如何根据网站路由判断页面主题色详解
Nov 02 Javascript
Vue 实现从小到大的横向滑动效果详解
Oct 16 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与javascript的两种交互方式
2006/10/09 PHP
sourcesafe管理phpproj文件的补充说明(downmoon)
2009/04/11 PHP
php面向对象全攻略 (七) 继承性
2009/09/30 PHP
浅谈PHP变量作用域以及地址引用问题
2013/12/27 PHP
PHP生成不重复标识符的方法
2014/11/21 PHP
php ajax数据传输和响应方法
2018/08/21 PHP
在页面上点击任一链接时触发一个事件的代码
2007/04/07 Javascript
Jquery AutoComplete自动完成 的使用方法实例
2010/03/19 Javascript
jquery 扑捉回车键事件代码
2014/04/24 Javascript
node.js WEB开发中图片验证码的实现方法
2014/06/03 Javascript
JavaScript基础篇(6)之函数表达式闭包
2015/12/11 Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
2016/10/30 Javascript
jquery 实现复选框的全选操作实例代码
2017/01/24 Javascript
JS中type="button"和type="submit"的区别
2017/07/04 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(下)
2018/04/18 Javascript
深入浅析JS中的严格模式
2018/06/04 Javascript
ES6 Object方法扩展的应用实例分析
2019/06/25 Javascript
详解JavaScript中的数据类型,以及检测数据类型的方法
2020/09/17 Javascript
Vue 数据响应式相关总结
2021/01/28 Vue.js
使用Python开发SQLite代理服务器的方法
2018/12/07 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
2019/06/18 Python
Python Pandas中根据列的值选取多行数据
2019/07/08 Python
Python 2.6.6升级到Python2.7.15的详细步骤
2020/12/14 Python
HTML5新表单元素_动力节点Java学院整理
2017/07/12 HTML / CSS
华美博弈C/VC工程师笔试试题
2012/07/16 面试题
工程业务员岗位职责
2013/12/31 职场文书
教师职业道德事迹材料
2014/08/18 职场文书
优秀教师先进事迹材料
2014/12/15 职场文书
营销计划书范文
2015/01/17 职场文书
导游词范文
2015/02/13 职场文书
酒店人事专员岗位职责
2015/04/07 职场文书
面试通知单大全
2015/04/20 职场文书
英语专业毕业论文答辩开场白
2015/05/27 职场文书
花田少年史观后感
2015/06/16 职场文书
《葡萄沟》教学反思
2016/02/23 职场文书
postman中form-data、x-www-form-urlencoded、raw、binary的区别介绍
2022/01/18 HTML / CSS