安装提取样式的插件
npm i mini-css-extract-plugin -D
npm i postcss-loader postcss -D
项目目录结构
F:\webpack-demo
├── dist/
| ├── index.html
| ├── main.css <!-- 通过mini-css-extract-plugin打包提取的css样式文件 -->
| └── main.js
├── package.json
├── postcss.config.js <!-- postcss配置文件 -->
├── public/
| └── index.html
├── README.md
├── src/
| ├── index.js
| ├── less.less
| ├── sass.sass
| ├── scss.scss
| ├── styl.styl
| └── style.css
├── webpack.common.js
├── webpack.dev.js
├── webpack.prod.js
└── webpack.test.js
配置webpack.common.js
const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin"); // 引入html-webpack-plugin插件
const MiniCssExtractPlugin = require("mini-css-extract-plugin"); // 引入mini-css-extract-plugin插件
module.exports = {
mode:"none", // 模式(mode):webpack 使用相应模式的内置优化
entry: "./src/index.js", // 入口(entry):webpack打包的入口
output: { // 输出(output):webpack编译打包后的文件输出的位置
filename: 'main.js',
path: path.resolve(__dirname, 'dist'),
clean: true, // 每次构建前清理 /dist 目录
},
plugins:[ // 插件(plugin):打包优化,资源管理,注入环境变量。
new HtmlWebpackPlugin({
title:"webpack-笔记", // 用于生成的HTML文档的标题
filename: "index.html", // 指定打包生成html文件的名称
template: "./public/index.html", // 指定使用哪个html文件为模板,如果不指定会使用默认配置
minify: { // 优化html-webpack-plugin生成的html文件
collapseWhitespace: true, // 设置为true 压缩html,去掉html文件中的空格,换行
},
inject: true, // 默认为true,打包和自动引入js、css等文件。 设置为false不会自动引入js、css等文件
// chunks: ["main"], 用于多入口,指定加载哪些入口文件(chunks),多页应用会用到
}),
new MiniCssExtractPlugin() // 配置MiniCssExtractPlugin后就不在需要style-loader了
],
module: { // loader:处理其他类型的文件,webpack只能处理JavaScript和JSON文件,要处理其他文件就需要loader
rules: [ // 处理css
{
test: /\.css$/i,
use: [MiniCssExtractPlugin.loader,
// 'style-loader',
'css-loader',
'postcss-loader'],
// 保证 loader 的先后顺序:'style-loader' 在前,而 'css-loader' 在后。
// css-loader先处理css文件,在处理css样式
},
{ // 处理less
test: /\.less$/i,
use: [
MiniCssExtractPlugin.loader,
{
loader: 'css-loader', // 转化 CSS 为 CommonJS
},
{
loader: 'postcss-loader',
},
{
loader: 'less-loader', // 编译 Less 为 CSS
},
],
},
{ // 处理sass/scss
test: /\.s[ac]ss$/i,
use: [
MiniCssExtractPlugin.loader,
'css-loader', // 将 CSS 转化成 CommonJS 模块,
'postcss-loader',
'sass-loader', // 将 Sass 编译成 CSS
],
},
{ // 处理styl
test: /\.styl$/,
use: [
MiniCssExtractPlugin.loader,
{
loader: "css-loader", // 将 CSS 转为 CommonJS
},
{
loader: 'postcss-loader',
},
{
loader: "stylus-loader", // 将 Stylus 编译为 CSS
},
],
},
],
}
};
loader参考: