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 相关文章推荐
JS简单限制textarea内输入字符数量的方法
Oct 14 Javascript
通过sails和阿里大于实现短信验证
Jan 04 Javascript
JavaScript实现移动端轮播效果
Jun 06 Javascript
使用Vue.js和Flask来构建一个单页的App的示例
Mar 21 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
Aug 25 Javascript
vue监听input标签的value值方法
Aug 27 Javascript
详解原生JS回到顶部
Mar 25 Javascript
JS实现动态添加外部js、css到head标签的方法
Jun 05 Javascript
微信小程序文字显示换行问题
Jul 28 Javascript
微信小程序HTTP接口请求封装代码实例
Sep 05 Javascript
JavaScript对象属性操作实例解析
Feb 04 Javascript
通过实例解析json与jsonp原理及使用方法
Sep 27 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生成静态页面教程
2012/01/10 PHP
PHP中将网页导出为Word文档的代码
2012/05/25 PHP
PHP实现的简单分页类及用法示例
2016/05/06 PHP
如何用PHP做到页面注册审核
2017/03/02 PHP
PHP实现驼峰样式字符串(首字母大写)转换成下划线样式字符串的方法示例
2017/08/10 PHP
PHP实现的日历功能示例
2018/09/01 PHP
js的延迟执行问题分析
2014/06/23 Javascript
js实现获取焦点后光标在字符串后
2014/09/17 Javascript
javascript中获取元素标签中间的内容的实现方法
2016/10/08 Javascript
ionic中列表项增加和删除的实现方法
2017/01/22 Javascript
数组Array的一些方法(总结)
2017/02/17 Javascript
Bootstrap里的文件分别代表什么意思及其引用方法
2017/05/01 Javascript
bootstrap3使用bootstrap datetimepicker日期插件
2017/05/24 Javascript
详解vue组件通信的三种方式
2017/06/30 Javascript
VUE中使用Vue-resource完成交互
2017/07/21 Javascript
vue组件中使用iframe元素的示例代码
2017/12/13 Javascript
详解如何优雅地在React项目中使用Redux
2017/12/28 Javascript
通过实例解析javascript Date对象属性及方法
2020/11/04 Javascript
Python实现检测服务器是否可以ping通的2种方法
2015/01/01 Python
python 删除字符串中连续多个空格并保留一个的方法
2018/12/22 Python
Python实现大数据收集至excel的思路详解
2020/01/03 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
2020/06/17 Python
Python分析最近大火的网剧《隐秘的角落》
2020/07/02 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
2020/07/14 Python
html5简介及新增功能介绍
2020/05/18 HTML / CSS
Abbacino官网:包、钱包和女士配饰
2019/04/15 全球购物
MyBag中文网:英国著名的时尚包袋电商零售网站
2020/07/31 全球购物
工厂厂长岗位职责
2013/11/08 职场文书
群众路线教育党课主持词
2014/04/01 职场文书
初中班级口号
2014/06/09 职场文书
山东省召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
统计员岗位职责范本
2015/04/14 职场文书
企业年会祝酒词
2015/08/11 职场文书
2016年读书月活动总结范文
2016/04/06 职场文书
CSS3实现三角形不断放大效果
2021/04/13 HTML / CSS
Python探索生命起源 matplotlib细胞自动机动画演示
2022/04/21 Python