【专项学习】 —— Webpack5基础配置详细教程学习(三)

一、提取css成单独文件

1、先用以往的开发模式来打包。创建以下文件夹,build里的内容是打包后生成的。

 index.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="box1"></div>
    <div id="box2"></div>

</body>

</html>

index.js  

import '../css/text1.css';
import '../css/text2.css'

webpack.config.js  

const { resolve } = require('path');
const HtmlwebpackPlugin = require('html-webpack-plugin')
module.exports = {
    entry: './js/index.js',
    output: {
        filename: 'built.js',
        path: resolve(__dirname, 'build'),
    },
    module: {
        rules:
            [
                {
                    test: /\.css$/,
                    use: ['style-loader', 'css-loader']
                }
            ]
    },
    plugins: [
        new HtmlwebpackPlugin(
            {
                template: './index.html'
            }
        )
    ]
}

text1.css

#box1 {
    width: 100px;
    height: 100px;
    background-color: pink;
}

text2.css  

#box2 {
    width: 200px;
    height: 200px;
    background-color: deeppink;
}

2、随后打开终端输入:

npm init
webpack_css_code
npm i webpack webpack-cli -D
npm i css-loader style-loader -D
npm i html-webpack-plugin -D

3、在下载好相关包后,打开package.json,修改内部的scripts代码。 

 "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "webpack --mode development",
    "build": "webpack --mode production"
 },

4、然后终端输入:  

npm run dev

5、最后打开build文件夹下生成的index.html查看效果 

那么此时我们使用传统的手法打包成功了。

打开生成的built.js发现,之前的css样式被写在了这里面,现在想提取出来,使成为单独的文件。

6、下载插件npm i mini-css-extract-plugin -D

7、然后修改webpack.config.js内的代码,使用该插件:

const { resolve } = require('path');
const HtmlwebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
module.exports = {
    entry: './js/index.js',
    output: {
        filename: 'built.js',
        path: resolve(__dirname, 'build'),
    },
    module: {
        rules:
            [
                {
                    test: /\.css$/,
                    use:
                        [
                            // 创建style标签,将样式放入
                            // 'style-loader',所以想提取css成单独文件时,这里不能把css样式放入
                            // 使用下边的插件进行取代,提取js中的css成单独文件
                            MiniCssExtractPlugin.loader,
                            // 将css文件整合到js文件中
                            'css-loader'
                        ]
                }
            ]
    },
    plugins: [
        new HtmlwebpackPlugin(
            {
                template: './index.html'
            }
        ),
        new MiniCssExtractPlugin(
            {
                // 对输出的文件重命名
                filename: 'built.css'
            }
        )
    ]
}

8、那么此时,运行npm run dev,build文件夹下有一个built.css生成。

同文件夹下的index.html引入样式的方法变为了通过link标签引入。

最后在打开index.html查看效果。  

 

二、css的兼容性处理

1、将上一节代码全部复制过来,重命名。

然后只修改config配置。

css兼容性处理: postcss --> 需要插件postcss-loader 、postcss-preset-env。

终端中输入下述命令下载。 

npm i postcss-loader postcss-preset-env -D

2、webpack.config.js代码

const { resolve } = require('path');
const HtmlwebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
// 设置node.js环境变量,使其默认是处于开发环境development,不是生产环境
process.env.NODE_ENV = 'development'
module.exports = {
    entry: './js/index.js',
    output: {
        filename: 'built.js',
        path: resolve(__dirname, 'build'),
    },
    module: {
        rules:
            [
                {
                    test: /\.css$/,
                    use:
                        [
                            // 创建style标签,将样式放入
                            // 'style-loader',所以想提取css成单独文件时,这里不能把css样式放入
                            // 使用下边的插件进行取代,提取js中的css成单独文件
                            MiniCssExtractPlugin.loader,
                            // 将css文件整合到js文件中
                            'css-loader',
                            //css兼容性处理: postcss --> 插件postcss-loader 、postcss-preset-env
                            //这些插件帮postcss找到package.json中browserslist里面的配置,通过配置加载指定的css兼容性样式
                            //使用loader的默认配置
                            //"postcss-loader',
                            //修改loader的配置
                            {
                                loader: 'postcss-loader',
                                options: {
                                    postcssOptions: {
                                        plugins: [require('postcss-preset-env')()]
                                    }
                                }
                            }
                        ]
                }
            ]
    },
    plugins: [
        new HtmlwebpackPlugin(
            {
                template: './index.html'
            }
        ),
        new MiniCssExtractPlugin(
            {
                // 对输出的文件重命名
                filename: 'built.css'
            }
        )
    ]
}

3、在pachage.json中修改browserslist配置。

其中browserslist的development部分表示兼容最近一个版本的浏览器,production中表示兼容百分之99.8的浏览器,不要兼容已经停用的浏览器。  

{
  "name": "webpack_css",
  "version": "1.0.0",
  "description": "",
  "main": "webpack.config.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "webpack --mode development",
    "build": "webpack --mode production"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "css-loader": "^6.5.1",
    "html-webpack-plugin": "^5.5.0",
    "mini-css-extract-plugin": "^2.4.5",
    "postcss-loader": "^6.2.1",
    "postcss-preset-env": "^7.1.0",
    "style-loader": "^3.3.1",
    "webpack": "^5.65.0",
    "webpack-cli": "^4.9.1"
  },
  "browserslist": {
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ],
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ]
  }
}

4、修改text1.css的内容,增加新样式。  

#box1 {
    width: 100px;
    height: 100px;
    background-color: pink;
    /* 增加两个在特定浏览器有兼容性问题的样式 */
    display: flex;
    backface-visibility: hidden;
}

5、随后输入npm run dev

打开生成的build文件夹下的built.js,发现对刚刚新增加的两个样式做了兼容处理。  

三、压缩css

1、复制上一节全部代码,在基础上进行修改。

压缩css需要引入一个插件css-minimizer-webpack-plugin。

2、终端输入命令npm i css-minimizer-webpack-plugin -D进行下载(这是webpack5中的插件)。

3、修改webpack.config.js配置

const { resolve } = require('path');
const HtmlwebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const CssMinimizerWebpackPlugin = require('css-minimizer-webpack-plugin')
// 设置node.js环境变量,使其默认是处于开发环境development,不是生产环境
//压缩css的插件css-minimizer-webpack-plugin

process.env.NODE_ENV = 'development'
module.exports = {
    entry: './js/index.js',
    output: {
        filename: 'built.js',
        path: resolve(__dirname, 'build'),
    },
    module: {
        rules:
            [
                {
                    test: /\.css$/,
                    use:
                        [
                            // 创建style标签,将样式放入
                            // 'style-loader',所以想提取css成单独文件时,这里不能把css样式放入
                            // 使用下边的插件进行取代,提取js中的css成单独文件
                            MiniCssExtractPlugin.loader,
                            // 将css文件整合到js文件中
                            'css-loader',
                            //css兼容性处理: postcss --> 插件postcss-loader 、postcss-preset-env
                            //这些插件帮postcss找到package.json中browserslist里面的配置,通过配置加载指定的css兼容性样式
                            //使用loader的默认配置
                            //"postcss-loader',
                            //修改loader的配置
                            {
                                loader: 'postcss-loader',
                                options: {
                                    postcssOptions: {
                                        plugins: [require('postcss-preset-env')()]
                                    }
                                }
                            }
                        ]
                }
            ]
    },
    plugins: [
        new HtmlwebpackPlugin(
            {
                template: './index.html'
            }
        ),
        new MiniCssExtractPlugin(
            {
                // 对输出的文件重命名
                filename: 'built.css'
            }
        ),
        new CssMinimizerWebpackPlugin(
            {
                // 压缩css的插件
            }
        )
    ]
}

4、终端输入npm run dev,随后就可以查看build文件夹下的built.css文件的大小。  


注:教程转载自疯子的梦想@博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
从引用中可以得知,webpack从4版本开始就支持根据项目设定的mode来执行不同的优化策略。而且,webpack也支持自定义的优化策略。所以,你可以根据具体项目的需求来配置webpack的优化策略。 引用中提到,掌握一些基础配置对于工作、面试以及各种脚手架中webpack的调试都有不小的作用。在学习配置过程中,可能会遇到一些坑和心得。因此,对于webpack5.0版本的最优配置,可以根据具体项目的需求和学习中的经验来进行配置。 需要注意的是,由于你提供的引用内容比较零散,并没有具体提及webpack5的最优配置,所以需要更多的上下文信息来获得更准确的答案。具体来说,我们需要了解你的项目类型(是React还是Vue、是单页面应用还是多页面应用等)、期望的构建结果(文件大小、开发环境还是生产环境等)以及其他特殊需求(如代码分割、懒加载等)等。只有在了解了这些信息之后,才能为你提供更具体的webpack5最优配置建议。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [webpack5.0基础配置(全面)](https://blog.csdn.net/weixin_40756663/article/details/123074161)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [zz-webpack-react:webpack打包工具(React版本)](https://download.csdn.net/download/weixin_42165712/18809700)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值