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代码
Jan 13 Javascript
jquery实现简单实用的打分程序实例
Jul 23 Javascript
Jquery跨域获得Json的简单实例
May 18 Javascript
jQuery限制图片大小的方法
May 25 Javascript
JavaScript中动态向表格添加数据
Jan 24 Javascript
Angular2利用组件与指令实现图片轮播组件
Mar 27 Javascript
简单的JS控制button颜色随点击更改的实现方法
Apr 17 Javascript
对 Vue-Router 进行单元测试的方法
Nov 05 Javascript
ES6 Set结构的应用实例分析
Jun 26 Javascript
基于layui的table插件进行复选框联动功能的实现方法
Sep 19 Javascript
基于html+css+js实现简易计算器代码实例
Feb 28 Javascript
Flexible.js可伸缩布局实现方法详解
Nov 13 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
解析centos中Apache、php、mysql 默认安装路径
2013/06/25 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
2014/11/05 PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
2015/05/12 PHP
PHP处理postfix邮件内容的方法
2015/06/16 PHP
js 手机号码合法性验证代码集合
2012/09/29 Javascript
基于KMP算法JavaScript的实现方法分析
2013/05/03 Javascript
jquery遍历checkbox介绍
2014/02/21 Javascript
离开当前页面前使用js判断条件提示是否要离开页面
2014/05/02 Javascript
jQuery弹出层插件popShow用法示例
2017/01/23 Javascript
js中setTimeout的妙用--防止循环超时
2017/03/06 Javascript
常用的9个JavaScript图表库详解
2017/12/19 Javascript
浅谈Vue Element中Select下拉框选取值的问题
2018/03/01 Javascript
解决在vue项目中,发版之后,背景图片报错,路径不对的问题
2018/03/06 Javascript
vue实现codemirror代码编辑器中的SQL代码格式化功能
2019/08/27 Javascript
使用vue制作滑动标签
2019/09/21 Javascript
一篇超完整的Vue新手入门指导教程
2020/11/18 Vue.js
python 实现文件的递归拷贝实现代码
2012/08/02 Python
Python中datetime常用时间处理方法
2015/06/15 Python
python文件名和文件路径操作实例
2017/09/29 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
2018/06/27 Python
python实现二维插值的三维显示
2018/12/17 Python
python中的句柄操作的方法示例
2019/06/20 Python
Python continue语句实例用法
2020/02/06 Python
10张动图学会python循环与递归问题
2021/02/06 Python
Belvilla德国:在线预订度假屋
2018/04/10 全球购物
英国太阳镜品牌:Taylor Morris Eyewear
2018/04/18 全球购物
美国杰西潘尼官网:JCPenney
2019/06/12 全球购物
小米乌克兰网上商店:Xiaomi.UA
2019/10/29 全球购物
Jdbc数据访问技术面试题
2012/03/30 面试题
党校自我鉴定范文
2013/10/02 职场文书
英语专业学生个人求职信范文
2014/01/06 职场文书
2014庆六一活动方案
2014/03/02 职场文书
2014年外贸业务员工作总结
2014/12/11 职场文书
Python绘制地图神器folium的新人入门指南
2021/05/23 Python
「月刊Action」2022年5月号封面公开
2022/03/21 日漫
使用Postman测试需要授权的接口问题
2022/06/21 Java/Android