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 相关文章推荐
jQuery在IE下使用未闭合的xml代码创建元素时的Bug介绍
Jan 10 Javascript
屏蔽IE弹出"您查看的网页正在试图关闭窗口,是否关闭此窗口"的方法
Dec 31 Javascript
jquery对单选框,多选框,文本框等常见操作小结
Jan 08 Javascript
jQuery 获取、设置HTML或TEXT内容的两种方法
May 23 Javascript
Javascript的setTimeout()使用闭包特性时需要注意的问题
Sep 23 Javascript
Bootstrap3制作自己的导航栏
May 12 Javascript
VueJs使用Amaze ui调整列表和内容页面
Nov 30 Javascript
vue中使用refs定位dom出现undefined的解决方法
Dec 21 Javascript
JS计算两个时间相差分钟数的方法示例
Jan 10 Javascript
mpvue 如何使用腾讯视频插件的方法
Jul 16 Javascript
JavaScript常见事件处理程序实例总结
Jan 05 Javascript
微信小程序如何实现在线客服功能
Oct 16 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与C#分别格式化文件大小的代码
2011/05/14 PHP
mysql 查询指定日期时间内sql语句实现原理与代码
2012/12/16 PHP
解析PHP正则提取或替换img标记属性
2013/06/26 PHP
php去除头尾空格的2种方法
2015/03/16 PHP
PHP获取指定时间段之间的 年,月,天,时,分,秒
2016/06/05 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
2016/06/30 PHP
PHP判断一个数组是另一个数组子集的方法详解
2017/07/31 PHP
Yii框架getter与setter方法功能与用法分析
2019/10/22 PHP
phpstudy后门rce批量利用脚本的实现
2019/12/12 PHP
js jquery数组介绍
2012/07/15 Javascript
file模式访问网页时iframe高度自适应解决方案
2013/01/16 Javascript
不同Jquery版本引发的问题解决
2013/10/14 Javascript
jQuery实现首页顶部可伸缩广告特效代码
2015/04/15 Javascript
jquery实现百叶窗效果
2017/01/12 Javascript
JavaScript用200行代码制作打飞机小游戏实例
2017/06/21 Javascript
详解vue express启动数据服务
2017/07/05 Javascript
浅析Vue下的components模板使用及应用
2019/11/27 Javascript
JavaScript异步操作的几种常见处理方法实例总结
2020/05/11 Javascript
[01:14]TI珍贵瞬间系列(六):冠军
2020/08/30 DOTA
Python使用xlrd模块操作Excel数据导入的方法
2015/05/26 Python
Eclipse中Python开发环境搭建简单教程
2016/03/23 Python
python利用rsa库做公钥解密的方法教程
2017/12/10 Python
python爬取拉勾网职位数据的方法
2018/01/24 Python
详解Python3 对象组合zip()和回退方式*zip
2019/05/15 Python
python中update的基本使用方法详解
2019/07/17 Python
Python 使用多属性来进行排序
2019/09/01 Python
python sorted方法和列表使用解析
2019/11/18 Python
python实现实时视频流播放代码实例
2020/01/11 Python
python中time tzset()函数实例用法
2021/02/18 Python
详解pandas apply 并行处理的几种方法
2021/02/24 Python
手机配件第一品牌:ZAGG
2017/05/28 全球购物
Sport-Thieme荷兰:购买体育用品
2019/08/25 全球购物
沙特阿拉伯家用电器和电子产品购物网站:Sheta and Saif
2020/04/03 全球购物
国际花店:Pickup Flowers
2020/04/10 全球购物
恒华伟业笔试面试题
2015/02/26 面试题
毕业设计论文评语
2014/12/31 职场文书