webpack5 基本配置

文章介绍了如何将Webpack配置文件拆分为common、dev和prod,以及如何在不同环境下合并配置。内容涉及ES6转义、CSS和Less处理、图片优化、模块化和本地服务设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、拆分配置和merge

        将webpack配置文件拆分成三个。

        webpack.common.js: 用于设置基本配置。

        webpack.dev.js: 用于设置开发环境配置。

        webpack.prod.js: 用于设置生产环境配置。

        在dev和prod配置文件中引入基本配置

// ...
const webpackCommonConf = require('./webpack.common.js');
// ...

使用merge合并配置

module.exports = merge(webpackCommonConf, {
    // prod 或者 dev 环境下的配置

    // ...
},

二、启动本地服务

// ...
const webpackCommonConf = require('./webpack.common.js');
const { merge } = require('webpack-merge');

module.exports = merge(webpackCommonConf, {
    // ...

    devServer: {
        port: 8080,
        open: true,  // 自动打开浏览器
        client: {
            progress: true, // 开启进度条
        },
        compress: true,  // 启动 gzip 压缩
        // 设置代理
        proxy: {
            // 将本地 /api/xxx 代理到 localhost:9000/api/xxx
            '/api': 'http://localhost:9000',

            // 将本地 /api2/xxx 代理到 localhost:9000/xxx
            '/api2': {
                target: 'http://localhost:9000',
                pathRewrite: {
                    '/api2': ''
                }
            }
        }
    }
})

三、处理ES6

        不同浏览器对于新的ES语法兼容性不同,需要将高版本的ES语法转换为不同浏览器都能兼容的版本。

        在基本配置中配置babel-loader,需要先安装依赖,babel-loader会将es语法进行兼容性转化。

// ....

module.exports = {
    // ...
    module: {
        rules: [
            {
                test: /\.js$/,
                use: [
                    {
                        loader: 'babel-loader',
                    }
                ],
                include: srcPath,
                exclude: /node_modules/
            },
            // ...
        ]
    },
    // ....
}
四、处理样式

在基本配置文件中配置

// ....

module.exports = {
    // ...
    module: {
        rules: [
             {
                test: /\.css$/, // 处理css结尾的文件
                // loader 的执行顺序是:从后往前
                use: ['style-loader', 'css-loader', 'postcss-loader'] // 加了 postcss需要配置postcss.config.js
            },Ï
            // ...
        ]
    },
    // ....
}

loader 的执行顺序是:从后往前, css-loader用于处理css文件,将css文件打包到js中,配合style-loader使用,将css文件打包并插入到页面中。

postcss-loader用于给不同浏览器的css样式加上相应的前缀,需要配置postcss.config.js

如果使用的less,在css_loader前需要使用less-loader插件对less文件进行处理。

// ....

module.exports = {
    // ...
    module: {
        rules: [
             {
                Ïtest: /\.less$/i,
                use: [
                  // compiles Less to CSS
                  'style-loader',
                  'css-loader',
                  'less-loader',
                ],
            // ...
        ]
    },
    // ....
}

五、处理图片

如果是在测试的环境中, 需要安装对应插件file-loader或者url-loader

// webpack.dev.js

const webpackCommonConf = require('./webpack.common.js');

module.exports = merge(webpackCommonConf, {
    // ...

    module: {
        rules: [
            // 直接引入图片 url
            {
                test: /\.(png|jpg|jpeg|gif)$/,
                use: 'url-loader' // 也可以使用 file-loader, url-loader 更好
            }
        ]
    },

    // ...
})

如果是在生产环境中,可以配置的更加更详细

// webpack.prod.js

const webpackCommonConf = require('./webpack.common.js')

module.exports = merge(webpackCommonConf, {
    
    // ...
    
    module: {
        rules: [
            // 图片 - 考虑 base64 编码的情况  
            {
                test: /\.(png|jpg|jpeg|gif)$/,
                use: {
                    loader: 'url-loader', // file-loader
                    options: {
                        // 小于 12kb 的图片用 base64 格式产出
                        // 否则,依然延用 file-loader 的形式,产出 url 格式
                        limit: 12 * 1024,

                        // 打包到 img 目录下
                        outputPath: '/img1/',

                        // 设置图片的 cdn 地址(也可以统一在外面的 output 中设置,那将作用于所有静态资源)
                        // publicPath: 'http://cdn.baidu.com'
                    }
                }
            },
        ]
    },
    

    // ...
})

六、模块化

// webpack.prod.js

const distPath = path.join(__dirname, '..', 'dist');
module.exports = merge(webpackCommonConf, {

    // ...    

    output: {
        filename: '[name].[contenthash:8].js', // 截取8会哈希
        path: distPath,
       // publicPath: 'http://cdn.abc.com'  // 修改所有静态文件 url 的前缀(如 cdn 域名),这里暂时用不到
    },
   
  
    // ...
})

当内容不发生变化时,文件的哈希值不会发生改变,再次需要改文件时直接从缓存读取,如果内容发生了改变, 文件的哈希值也会发生改变,需要重新加载。

### Webpack基本配置方法 Webpack 是一种强大的模块打包工具,能够将前端的各种资源(JavaScript、JSON、CSS、图片等)视为模块并进行统一管理。以下是关于如何设置 Webpack 基本配置的方法: #### 1. 安装 Node.js 和 初始化项目 由于 Webpack 构建于 Node.js 环境之上,因此需要先安装 Node.js[^2]。接着通过 `npm init` 来初始化一个新的 npm 项目。 ```bash npm init -y ``` 这一步会在当前目录下生成一个默认的 `package.json` 文件。 --- #### 2. 安装 Webpack 及其 CLI 工具 为了使用 Webpack,需安装 Webpack 和它的命令行接口 (CLI)。推荐将其作为开发依赖项安装: ```bash npm install --save-dev webpack webpack-cli ``` 如果希望指定特定版本(如 v4),可以通过以下方式完成安装: ```bash npm install --save-dev webpack@4 webpack-cli@3 ``` --- #### 3. 创建基础文件结构 按照惯例,通常会创建以下几个主要目录和文件[^5]: - **src/**: 存放项目的源代码。 - **dist/**: 打包后的输出文件存放位置。 - **index.html**: HTML 页面入口。 - **webpack.config.js**: Webpack 配置文件。 例如,下面展示了一个简单的文件夹结构: ``` webpack_demo/ ┣ dist/ // 打包后生成的 ┃ ┗ main.js ┣ src/ ┃ ┣ components/ ┃ ┃ ┣ common.js ┃ ┃ ┗ util.js ┃ ┗ app.js ┣ index.html ┣ package.json ┗ webpack.config.js ``` --- #### 4. 编写 Webpack 配置文件 (`webpack.config.js`) Webpack 提供了一种基于 JavaScript 的配置机制,允许开发者定义各种选项来控制打包行为。最常用的几个字段包括 `entry`, `output`, 和 `mode`[^3]。 ##### 示例配置: ```javascript const path = require('path'); module.exports = { entry: './src/app.js', // 指定入口文件路径 output: { filename: 'main.js', // 输出文件名 path: path.resolve(__dirname, 'dist') // 输出目标目录 }, mode: 'development' // 设置模式为 development 或 production }; ``` 上述配置中: - `entry`: 表示应用的起点,默认值为 `'./src/index.js'`。 - `output.filename`: 定义最终打包文件的名字。 - `output.path`: 必须是一个绝对路径,表示打包文件存储的位置。 - `mode`: 支持两种模式——`production`(优化性能) 和 `development`(调试友好)。 --- #### 5. 添加脚本到 `package.json` 为了让用户更便捷地运行 Webpack,可以在 `package.json` 中添加自定义脚本。比如,在 `"scripts"` 字段里加入如下内容: ```json { "scripts": { "build": "webpack" } } ``` 之后只需执行以下命令即可启动打包过程: ```bash npm run build ``` --- #### 6. 处理其他类型的静态资源 除了 JavaScript 文件外,还可以利用加载器(Loaders)处理样式表、图像和其他资产。例如,若想支持 CSS,则需要额外引入 `style-loader` 和 `css-loader` 并更新配置[^4]。 ```bash npm install --save-dev style-loader css-loader ``` 随后修改 `webpack.config.js` 加入新规则: ```javascript module.exports = { ... module: { rules: [ { test: /\.css$/, // 匹配 .css 结尾的文件 use: ['style-loader', 'css-loader'] // 使用顺序从右向左依次调用 } ] } }; ``` --- #### 总结 以上便是 Webpack基本配置流程概述。通过合理运用这些基础知识,可以显著提升前端工程化的效率与质量。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值