基于webpack实现多html页面开发框架二 css打包、支持scss、文件分离
本节主要介绍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、文件分离的更多相关文章
- 基于webpack实现多html页面开发框架一 准备工作
本系列主要介绍如何基于webpack实现多html页面开发框架,这里不讲webpack的基本概念,废话不多说,直奔主题! 前置条件: 1.安装node环境,自己去官网下载安装 2.新建文件夹webpa ...
- 基于webpack实现多html页面开发框架五 开发环境配置 babel配置
一.解决什么问题 1.开发环境js.css不压缩,可在浏览器选中代码调试 2.开发环境运行http服务指向打包后的文件夹 3.babel输出浏览器兼容的js代码 二.需要 ...
- 基于webpack实现多html页面开发框架六 提取公共代码
一.解决什么问题 1.如果a.js和b.js都引用了common.js,那在打包的时候common.js会被重复打入到a.js和b.js,造成重复打包 2.单独打包common.js对性能有帮助,浏览 ...
- 基于webpack实现多html页面开发框架四 自动写入多入口,自动插入多个htmlWebpackPlugin插件
一.解决什么问题 1.手写页面多入口,一个一个输入太麻烦,通过代码实现 2.手写多个htmlWebpackPlugin插件太麻烦,通过代码实现 二.多入口代码实现 //读取所有.j ...
- 基于webpack实现多html页面开发框架三 图片等文件路径替换、并输出到打包目录
一.解决什么问题 1.图片路径替换.并输出到打包目录 2.输出目录清理 二.需要安装的包 file-loader:html.css中图片路径替换,图片输出到打包目录:命令:npm ...
- 基于webpack实现多html页面开发框架七 引入第三方库如jquery
一.解决什么问题 1.如何引入第三方库,如jquery等 二.引入jquery方法 1.下载jquery.min.js放到assets/lib下面 2.安装copy-webpack-plugin,将已 ...
- 基于webpack实现多html页面开发框架八 html引入图片打包和公共页面模块复用
一.解决什么问题 1.html中img引入的图片地址没有被替换,找不到图片 2.html公共部分复用问题,如头部.底部.浮动层等 二.html中img引入图片问题解决 1.在index.html插入i ...
- 基于webpack的Vue.js开发环境快速搭建
1. 安装node node下载地址 2. 安装淘宝 NPM npm 是node.js 的包管理工具. 镜像命令地址 #命令行: npm install -g cnpm 3. 安装vue # 全局安装 ...
- 基于webpack的React项目搭建(二)
前言 前面我们已经搭建了基础环境,现在将开发环境更完善一些. devtool 在开发的过程,我们会经常调试,so,为了方便我们在chrome中调试源代码,需要更改webpack.config.js,然 ...
随机推荐
- CSS(5)---通俗讲解盒子模型
CSS(5)---盒子模型 盒子模型四个关键字:内容(content).填充(padding).边框(border).边界(margin), CSS盒子模式都具备这些属性. 一.概念 1. 概念 盒子 ...
- [springboot 开发单体web shop] 5. 用户登录及首页展示
用户登录及前端展示 用户登录 在之前的文章中我们实现了用户注册和验证功能,接下来我们继续实现它的登录,以及登录成功之后要在页面上显示的信息. 接下来,我们来编写代码. 实现service 在com.l ...
- 「Luogu 1525」关押罪犯
更好的阅读体验 Portal Portal1: Luogu Portal2: LibreOJ Description \(S\)城现有两座监狱,一共关押着\(N\)名罪犯,编号分别为\(1 - N\) ...
- 项目——基于httpd镜像演示Dockerfile所有的指令
基于httpd镜像演示Dockerfile所有的指令: 第一步:创建Dockerfile工作目录 [root@localhost harbor]# mkdir /test [root@localhos ...
- java 实现一个死锁
/** * 死锁:两个或多个线程在执行过程中,相互争夺资源而造成的一种互相等待的现象 * 实现一个死锁 * <p> * <p> * 查看死锁 * 1. 在当前类的文件夹下,打开 ...
- JVM 运行参数 & 代码监控
1.Java代码监控 JDK提供java.lang.management包, 其实就是基于JMX技术规范,提供一套完整的MBean,动态获取JVM的运行时数据,达到监控JVM性能的目的. packag ...
- MySQL InnoDB 实现高并发原理
MySQL 原理篇 MySQL 索引机制 MySQL 体系结构及存储引擎 MySQL 语句执行过程详解 MySQL 执行计划详解 MySQL InnoDB 缓冲池 MySQL InnoDB 事务 My ...
- vue根据不同环境进行编译打包
工作中我们在开发过程中,有很多的开发环境,如果我们不进行统一配置,那么我们只能手动进行更改,这样会给我们带来诸多不便,所以我们要配置根据不同的环境来进行编译打包. 先看一下我的项目目录: 在confi ...
- hdu 1269 迷宫城堡 (tarjan)
迷宫城堡Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- 从零开始入门 | Kubernetes 中的服务发现与负载均衡
作者 | 阿里巴巴技术专家 溪恒 一.需求来源 为什么需要服务发现 在 K8s 集群里面会通过 pod 去部署应用,与传统的应用部署不同,传统应用部署在给定的机器上面去部署,我们知道怎么去调用别的机 ...