webpack分离css单独打包的方法


Posted in Javascript onJune 12, 2018

本文介绍了webpack分离css单独打包的方法,分享给大家,具体如下:

CHANGELOG

2018-02-08 14:46:06

刚看了下,网上查了 webpack单独打包css,找到的文章,本文比较靠前,但是由于写的比较混乱,因此重新整理一下内容,更通俗易懂一点。

2018-02-01 14:45:23

由于这篇文章只写了如何把CSS打包成一个CSS文件,没有讲解如何打包成多个CSS文件,经简友提点,这里添加上了 打包成多个CSS文件的方法。

2016-05-17 11:55

刚学习webpack,记录一下webpack如何单独打包css

零、介绍

以下是个人项目中总结出来的一些基本知识,记录在这里,加深自己的印象,也让大家能够更快速方便的了解webpack,并且使用它。能力所限,有错误或者问题,请帮忙指出。

webpack 把所有的资源都当成了一个模块, CSS,Image, JS 字体文件 都是资源, 都可以打包到一个 bundle.js 文件中.

webpack分离css单独打包的方法

webpack基本的使用很简单,但是要方方面面都讲解的话内容很多,因此这边主要讲解一下 如何使用webpack单独打包css。

至于打包出来,怎么加hash值,怎么替换html中的引用路径,怎么上传到CND可以使用gulp来实现。【有兴趣后面在写一篇文章】

一、extract-text-webpack-plugin 用法

单独打包css,在webpack需要使用一个插件,extract-text-webpack-plugin

1. 安装extract-text-webpack-plugin

// use npm 
npm install extract-text-webpack-plugin --save-dev

// or use yarn 
yarn add extract-text-webpack-plugin

2. 配置

加载器里面写好插件的配置(使用什么加载器),在webpack的 plugins 里面设置抽离出来的CSS文件名叫什么。

var Ex = require('extract-text-webpack-plugin');
// ...省略
module: {
 loaders: [{
  test: /\.less/,
  loader: Ex.extract('style-loader', 'css-loader','less-loader') // 单独打包出CSS,这里配置注意下
 }]
},
plugins: [
 new Ex("【name】.css")
]

稍微详细点,可以参考这个《extract-text-webpack-plugin 的使用及安装》

下面放两个实际使用例子,方便大家理解

二、单页面应用,把JS里面的CSS单独打包

打包一个文件,只需要常规的在入口的js文件引用 css文件即可, 打包成多个CSS文件,可以设置多个CSS入口,让webpack用 loader去打包。 和分割单独打包js文件一样。下面有两个例子。

// webpack 1.x 配置  【早期使用的配置,那时候是1.x】
/*  webpack.config.js  */
var precss = require('precss');
var cssnext = require('cssnext');
var autoprefixer = require('autoprefixer');
var cssnano = require('cssnano');
var Ex = require('extract-text-webpack-plugin');
module.exports = {
  entry: './index.js',
  output: {
   filename: 'index.js'
  },
  module: {
   loaders: [{
    test: /\.less/,
    loader: Ex.extract('style-loader', 'css-loader','less-loader') // 单独打包出CSS,这里配置注意下
   }]
  },
  plugins: [
   new Ex("【name】.css")
  ]
 }

三、webpack如何打包多个CSS文件

2. 配置文件添加对应配置

下面直接提供一个完成的多入口CSS打包配置

// webpack 3.x 的配置
var path = require('path')
var glob = require('globby') 
var webpack = require('webpack')
var ExtractTextPlugin = require('extract-text-webpack-plugin')

// CSS入口配置
var CSS_PATH = {
 css: {
  pattern: ['./src/**/[^_]*.less', '!./src/old/**/*.less'],
  src: path.join(__dirname, 'src'),
  dst: path.resolve(__dirname, 'static/build/webpack'),
 }
}

// 遍历除所有需要打包的CSS文件路径
function getCSSEntries(config) {
 var fileList = glob.sync(config.pattern)
 return fileList.reduce(function (previous, current) {
  var filePath = path.parse(path.relative(config.src, current))
  var withoutSuffix = path.join(filePath.dir, filePath.name)
  previous[withoutSuffix] = path.resolve(__dirname, current)
  return previous
 }, {})
}

module.exports = [
 {
  devtool: 'cheap-module-eval-source-map',
  context: path.resolve(__dirname),
  entry: getCSSEntries(CSS_PATH.css),
  output: {
   path: CSS_PATH.css.dst,
   filename: '[name].css'
  },
  module: {
   rules: [
    {
     test: /\.less$/,
     use: ExtractTextPlugin.extract({
      use: ['css-loader', 'postcss-loader', 'less-loader']
     })
    }
   ]
  },
  resolve: {
   extensions: ['.less']
  },
  plugins: [
   new ExtractTextPlugin('[name].css'),
  ]
 },
// 如果还需要打包js,则可以在这里增加一个单独打包js的处理【根据自己需求来】
// {
//  entry:{},
//  output:{},
//  ... 省略
// }
]

可能有同学还在使用webpack1.x,所以这里在贴一下webpack1.x 的简单配置

// webpack 1.x 版本
// ...其他配置和webpack3.x一样
module: {
  loaders: [
    {
      test: /\.less$/,
      loader: ExtractTextPlugin.extract("style-loader","css-loader","postcss-loader","less-loader")
    },
  ]
}
plugins: [
 new ExtractTextPlugin('[name].css'),
]
// ...其他配置和webpack3.x一样

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ExtJs默认的字体大小改变的几种方法(自己整理)
Apr 18 Javascript
jquery入门必备的基本认识及实例(整理)
Jun 24 Javascript
js 获取、清空input type="file"的值(示例代码)
Dec 24 Javascript
JavaScript保留两位小数的2个自定义函数
May 05 Javascript
js实现仿百度汽车频道选择汽车图片展示实例
May 06 Javascript
javascript实现的简单计时器
Jul 19 Javascript
JavaScript中使用数组方法汇总
Feb 16 Javascript
学习Node.js模块机制
Oct 17 Javascript
jQuery UI仿淘宝搜索下拉列表功能
Jan 10 Javascript
layer.open 按钮的点击事件关闭方法
Aug 17 Javascript
深入理解Angularjs 脏值检测
Oct 12 Javascript
微信小程序textarea层级过高的解决方法
Mar 04 Javascript
详解extract-text-webpack-plugin 的使用及安装
Jun 12 #Javascript
webpack 样式加载的实现原理
Jun 12 #Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
Jun 12 #Javascript
webpack项目轻松混用css module的方法
Jun 12 #Javascript
微信小程序js文件改变参数并在视图上及时更新【推荐】
Jun 11 #Javascript
用vue快速开发app的脚手架工具
Jun 11 #Javascript
详解React Native 屏幕适配(炒鸡简单的方法)
Jun 11 #Javascript
You might like
PHP中防止SQL注入实现代码
2011/02/19 PHP
php常用数学函数汇总
2014/11/21 PHP
PHP邮件群发机实现代码
2016/02/16 PHP
检测是否已安装 .NET Framework 3.5的js脚本
2009/02/14 Javascript
自写简单JS判断是否已经弹出页面
2010/10/20 Javascript
$.format,jquery.format 使用说明
2011/07/13 Javascript
JS 打印功能代码可实现打印预览、打印设置等
2014/10/31 Javascript
14款经典网页图片和文字特效的jQuery插件-前端开发必备
2015/08/25 Javascript
学习JavaScript设计模式之单例模式
2016/01/19 Javascript
AngularJS Bootstrap详细介绍及实例代码
2016/07/28 Javascript
使用BootStrap实现悬浮窗口的效果
2016/12/13 Javascript
jQuery为某个div加入行样式
2017/06/09 jQuery
十大 Node.js 的 Web 框架(快速提升工作效率)
2017/06/30 Javascript
vue 的点击事件获取当前点击的元素方法
2018/09/15 Javascript
angular中子控制器向父控制器传值的实例
2018/10/08 Javascript
JavaScript实现捕获鼠标坐标
2020/04/12 Javascript
使用Vant完成DatetimePicker 日期的选择器操作
2020/11/12 Javascript
微信小程序实现登录注册功能
2020/12/29 Javascript
[01:15:44]首部DOTA2纪录片今日23时全网上映
2014/03/19 DOTA
Python中dictionary items()系列函数的用法实例
2014/08/21 Python
浅谈python3 构造函数和析构函数
2020/03/12 Python
Keras使用ImageNet上预训练的模型方式
2020/05/23 Python
HTML5实现应用程序缓存(Application Cache)
2020/06/16 HTML / CSS
什么是ARP(Address Resolution Protocol)地址解析协议
2013/10/31 面试题
迟到检讨书800字
2014/01/13 职场文书
班主任经验交流会主持词
2014/04/01 职场文书
十佳护士先进事迹
2014/05/08 职场文书
群众路线教育实践活动对照检查材料
2014/09/22 职场文书
2014年办公室主任工作总结
2014/11/12 职场文书
搞笑老公保证书
2015/02/26 职场文书
利用html+css实现菜单栏缓慢下拉效果的示例代码
2021/03/30 HTML / CSS
PyTorch 实现L2正则化以及Dropout的操作
2021/05/27 Python
js实现自动锁屏功能
2021/06/02 Javascript
java中重写父类方法加不加@Override详解
2021/06/21 Java/Android
javascript之Object.assign()的痛点分析
2022/03/03 Javascript
Python如何快速找到多个字典中的公共键(key)
2022/04/29 Python