本节主要介绍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. Intellij IDEA配置JDK、Maven和Tomcat

    一.配置JDK 1.File-->Project Structure 2.选择SDKs 3.点击+号添加自己本地jdk的安装目录,保存即可 二.配置Maven 1.File -> Othe ...

  2. 数据分析之路 第一篇 numpy

    第一篇 numpy 1.N维数组对象 :ndarray在Python中既然有了列表类型,为啥还要整个数组对象(类型)?那是因为:1.数组对象可以除去元素间运算所需要的循环,使得一维向量更像单个数据2. ...

  3. table的列固定

    <body onload="showFix(true,false,initTableId);"> <!doctype html> <html lang ...

  4. tensorflow中的学习率调整策略

    通常为了模型能更好的收敛,随着训练的进行,希望能够减小学习率,以使得模型能够更好地收敛,找到loss最低的那个点. tensorflow中提供了多种学习率的调整方式.在https://www.tens ...

  5. rabittmq详解

    交换机(exchange): 声明交换机: Name Durability (消息代理重启后,交换机是否还存在) Auto-delete (当所有与之绑定的消息队列都完成了对此交换机的使用后,删掉它) ...

  6. 并发编程-硬件加持的CAS操作够快么?

    Talk is cheap CAS(Compare And Swap),即比较并交换.是解决多线程并行情况下使用锁造成性能损耗的一种机制,CAS操作包含三个操作数--内存位置(V).预期原值(A)和新 ...

  7. 力扣(LeetCode)整数形式的整数加法 个人题解

    对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组.例如,如果 X = 1231,那么其数组形式为 [1,2,3,1]. 给定非负整数 X 的数组形式 A,返回整数 X+K 的 ...

  8. 软件测试的原则,软件测试计划:5W1H

    1.测试应该尽早介入.        2.所有的测试都应追溯到用户需求.        3.程序员应该避免检查自己的程序.除了单元测试.因为程序员对于自己的作品,思维具有局限性.无法保证测试质量.交给 ...

  9. C#解析XML之流模型-XMLTextReader类

    C#读取XML文档之XMLTextReader 类有一些构造程序来适应各种各样的情况,比如从一个已经存在的数据流或统一资源定位网址读取数据.最常见的是,你或许想从一个文件读取XML数据,那么也就有一个 ...

  10. python基础-面向对象编程之继承

    面向对象编程之继承 继承的定义:是一种新建类的方式,新建的类称之为子类或派生类,被继承的父类称之为基类或超类 继承的作用:子类会""遗传"父类的属性,从而解决代码重用问题 ...