本节主要介绍webpack打包的时候CSS的处理方式

一、解决什么问题

     1、CSS打包

     2、CSS处理浏览器兼容

     3、SASS支持

     4、CSS分离成单独的文件

二、创建目录结构

  

创建项目目录结构:参照上图创建即可

三、需要安装的包

  style-loader:将 JS 字符串生成为 style 节点;

      css-loader: 将 CSS 转化成 CommonJS 模块;  这两个合到一个命令:npm install --save-dev style-loader css-loader

  postcss-loader:处理浏览器兼容;命令:npm install --save-dev  postcss-loader autoprefixer postcss

  extract-text-webpack-plugin:将CSS分离到单独的文件;因webpack4.0以上不支持,所以需要安装next版本,命令:npm install --save-dev extract-text-webpack-plugin@next  

  html-webpack-plugin:根据模板生成文件,插入.js或.css文件;命令:npm install --save-dev html-webpack-plugin

四、webpack配置

  1、首先在根目录下新建webpack.config.js文件;

   代码如下:

 const path=require('path');

 const extractTextPlugin = require("extract-text-webpack-plugin");
const HtmlWebpackPlugin = require('html-webpack-plugin') module.exports={
//配置多个入口
entry:{
'index':'./src/pages/index/index.js',
'home':'./src/pages/home/index.js',
},
output:{
//__dirname node.js的一个全局环境变量,用于指向当前执行脚本(dirname.js)所在的目录路径,而且是绝对路径
path: path.resolve(__dirname, 'dist'),
// 多入口打包后的文件名
publicPath: '/',
filename: 'assets/js/[name].[hash:8].js',
},
module: {
rules: [
{
test: /\.(css|scss|sass)$/,
use: extractTextPlugin.extract({
fallback: "style-loader",// 将 JS 字符串生成为 style 节点,不打包成单独文件
use: [
"css-loader", // 将 CSS 转化成 CommonJS 模块
"sass-loader", // 将 Sass 编译成 CSS
"postcss-loader"], //autoprefixer postcss处理浏览器兼容
// css中的基础路径
publicPath: "/"
})
}
]
},
plugins: [
new extractTextPlugin({
// filename: 'css/[name].[hash:8].min.css',
filename: path.posix.join('assets', '/css/[name].[hash:8].min.css'),
}),
new HtmlWebpackPlugin({
title:'多页面开发框架',
template: './src/pages/index/index.html', // 源模板文件
filename: './index/index.html', // 输出文件【注意:这里的根路径是module.exports.output.path】
showErrors: true,
inject: 'true', //所有JavaScript资源插入到body元素的底部
chunks: ["common",'index'] //配置写入哪些js和css
}),
new HtmlWebpackPlugin({
title:'多页面开发框架',
template: './src/pages/home/index.html', // 源模板文件
filename: './home/index.html', // 输出文件【注意:这里的根路径是module.exports.output.path】
showErrors: true,
inject: 'true', //所有JavaScript资源插入到body元素的底部
chunks: ["common",'home'] //配置写入哪些js和css
})
],
}

  2、增加postcss.config.js配置文件;

  代码如下:  

 module.exports = {
plugins: [
require('autoprefixer')({overrideBrowserslist: ['> 0.15% in CN']})// 自动添加css前缀
]
}

  配置文件注释写的很清楚,大家可以自己尝试一下哈~~!

五、打包完的目录结构

 

注意:当入口没有定义为多个时,CSS文件会始终合并成一个main文件

源码目录:https://github.com/James-14/webpack4_multi_page_demo

写的不对之处请大家批评指正~~~~!!!!!!

文章原创,转载请注明出处,谢谢!

基于webpack实现多html页面开发框架二 css打包、支持scss、文件分离的更多相关文章

  1. 基于webpack实现多html页面开发框架一 准备工作

    本系列主要介绍如何基于webpack实现多html页面开发框架,这里不讲webpack的基本概念,废话不多说,直奔主题! 前置条件: 1.安装node环境,自己去官网下载安装 2.新建文件夹webpa ...

  2. 基于webpack实现多html页面开发框架五 开发环境配置 babel配置

    一.解决什么问题      1.开发环境js.css不压缩,可在浏览器选中代码调试      2.开发环境运行http服务指向打包后的文件夹      3.babel输出浏览器兼容的js代码 二.需要 ...

  3. 基于webpack实现多html页面开发框架六 提取公共代码

    一.解决什么问题 1.如果a.js和b.js都引用了common.js,那在打包的时候common.js会被重复打入到a.js和b.js,造成重复打包 2.单独打包common.js对性能有帮助,浏览 ...

  4. 基于webpack实现多html页面开发框架四 自动写入多入口,自动插入多个htmlWebpackPlugin插件

    一.解决什么问题      1.手写页面多入口,一个一个输入太麻烦,通过代码实现      2.手写多个htmlWebpackPlugin插件太麻烦,通过代码实现 二.多入口代码实现 //读取所有.j ...

  5. 基于webpack实现多html页面开发框架三 图片等文件路径替换、并输出到打包目录

    一.解决什么问题      1.图片路径替换.并输出到打包目录      2.输出目录清理 二.需要安装的包 file-loader:html.css中图片路径替换,图片输出到打包目录:命令:npm ...

  6. 基于webpack实现多html页面开发框架七 引入第三方库如jquery

    一.解决什么问题 1.如何引入第三方库,如jquery等 二.引入jquery方法 1.下载jquery.min.js放到assets/lib下面 2.安装copy-webpack-plugin,将已 ...

  7. 基于webpack实现多html页面开发框架八 html引入图片打包和公共页面模块复用

    一.解决什么问题 1.html中img引入的图片地址没有被替换,找不到图片 2.html公共部分复用问题,如头部.底部.浮动层等 二.html中img引入图片问题解决 1.在index.html插入i ...

  8. 基于webpack的Vue.js开发环境快速搭建

    1. 安装node node下载地址 2. 安装淘宝 NPM npm 是node.js 的包管理工具. 镜像命令地址 #命令行: npm install -g cnpm 3. 安装vue # 全局安装 ...

  9. 基于webpack的React项目搭建(二)

    前言 前面我们已经搭建了基础环境,现在将开发环境更完善一些. devtool 在开发的过程,我们会经常调试,so,为了方便我们在chrome中调试源代码,需要更改webpack.config.js,然 ...

随机推荐

  1. java数组、字符串拼接

    1. 数组实现拼接 int[] arr ={11,22,33,44,55,66}; System.out.print("["); for (int i = 0; i <arr ...

  2. python——切片

    切片 格式:[start : end : step] start:起始索引,从0开始,-1表示结束 end:结束索引 step:步长 # 字符串,列表,元组等都可以支持切片截取的操作# 切片必须依赖于 ...

  3. 本地通知-UILocalNotification

    第一步:创建本地推送 本地通知 UILocalNotification // 创建⼀一个本地推送 UILocalNotification * notification = [[UILocalNotif ...

  4. 问题:做EsayUI分页报错 $(...).pagination is not a function之后我把<jsp:include page="top.jsp"/>去掉就好了,有大神知道为什么吗?另外分页按键放在那里好些,我放到form表单下,就开始显示,点一下后就没有了

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...

  5. Spring Bean的定义及作用域

    目录: 了解Spring的基本概念 Spring简单的示例 Bean的定义 简单地说Bean是被Spring容器管理的Java对象,Spring容器会自动完成对Bean的实例化. 那么什么是容器呢?如 ...

  6. nyoj 45-棋盘覆盖 (高精度, Java)

    棋盘覆盖 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 在一个2k×2k(1<=k<=100)的棋盘中恰有一方格被覆盖,如图1(k=2时),现用一缺角的 ...

  7. nyoj 263-精 挑 细 选 (sort(P, P+m, cmp); bool cmp(node a, node b)...)

    263-精 挑 细 选 内存限制:64MB 时间限制:3000ms 特判: No 通过数:14 提交数:26 难度:1 题目描述: 小王是公司的仓库管理员,一天,他接到了这样一个任务:从仓库中找出一根 ...

  8. opencv 6 图像轮廓与图像分割修复 1 查找并绘制轮廓 寻找物体的凸包

    查找并绘制轮廓 寻找轮廓(findContours)函数 绘制轮廓(drawContours()函数) 基础实例程序:轮廓查找 #include <opencv2/opencv.hpp> ...

  9. PHP 的面向对象 与 类

    面向对象 == OO 学习面向对象 == XXOO;[学习使我快乐!] <!--附一个demo类的实例化--> http://note.youdao.com/noteshare?id=38 ...

  10. vue跨域处理

    本人对于vue跨域处理流程不是很清楚,特此理顺一遍. 1.在config中进行配置,该文件不是都存在,需要自己建: proxyTable,这个参数主要是一个地址映射表,你可以通过设置将复杂的url简化 ...