《Webpack5 核心原理与应用实践》番外篇->webpack配置合并

简介: 《Webpack5 核心原理与应用实践》番外篇->webpack配置合并


这里是番外篇,下一篇是讲Vue项目怎么搭建,包括服务端渲染,但是这刚了解完jscss就直接上手vue,还有服务端渲染,这已经是项目上的配置了,有点节奏太快,所以这里就弄个番外,当做过渡。

番外主要学习(也是自己温习,其实之前的都会)webpack开发环境和生产环境的配置,重用配置。

webpack配置合并

在我们日常开发的过程中,总是会围绕着两个环境,一个是开发环境,一个是生产环境。

开发环境:是指“猿”天天修改bug的环境,开发环境是不存在bug的。

生产环境:是指天天给“猿”提bug的环境,只有生产环境才有bug。

上面说的都是玩笑话,反正大家都懂。


开发环境是不同于生产环境的,往往是为了提高开发效率,所以会引用很多额外的工具和配置来帮助“猿”们更加快速高效的进行开发。

生产环境更注重的是更快速和流畅的的访问,提高用户体验度,滞留住用户,所以也会使用额外的工具和配置来帮助“猿”们生成体积更小,访问更快的程序包。

所以就会有生产环境配置和开发环境配置这两个配置,但是他们大多数配置都是相似的,为了方便维护,所以他们相似的配置就需要合并,不同的配置就需要区分开。


webpack配置合并



  • 生产环境和开发环境搭建
  • 安装依赖:npm i -D webpack-merge

这里我们需要用到webpakc-merge来合并webpack的配置

  • 根目录下新建一个config的目录
  • 新建一个base.config.js的文件
  • 将之前写的webpack.config.js的内容全部复制过去,然后移除moderules.cssrules.less的那一段就好,如下
const path = require('path');
const EslintPlugin = require('eslint-webpack-plugin');
module.exports = {
    entry: {
        index: './src/index.js'
    },
    output: {
        filename: '[name].js',
        path: path.resolve(__dirname, '../dist')
    },
    module: {
        rules: [
            {
                test: /.js$/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: ['@babel/preset-env', '@babel/preset-typescript']
                    }
                }
            },
            {
                test: /.ts$/,
                use: {
                    loader: 'ts-loader'
                }
            }
        ]
    },
    resolve: {
        extensions: ['.ts', '.js'],
    },
    plugins: [
        new EslintPlugin({
            extensions: ['.ts', '.js']
        })
    ]
}
  • 然后新建一个开发环境的配置文件webpack.dev.config.js,内容如下
const {merge} = require('webpack-merge');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const baseConfig = require('./base.config')
module.exports = merge(baseConfig, {
    mode: 'development',
    module: {
        rules: [
            {
                test: /.css$/,
                use: [
                    'style-loader',
                    {
                        loader: "css-loader",
                        options: {
                            importLoaders: 1
                        }
                    },
                    'postcss-loader',
                ]
            },
            {
                test: /.less$/,
                use: [
                    'style-loader',
                    {
                        loader: "css-loader",
                        options: {
                            importLoaders: 1
                        }
                    },
                    'postcss-loader',
                    'less-loader',
                ]
            }
        ]
    },
    plugins: [
        new HtmlWebpackPlugin({
            filename:'index.html',
            template:'./public/index.html'
        })
    ]
})
  • 然后再新建一个生产环境的配置文件webpack.prod.config.js,内容如下
const {merge} = require('webpack-merge');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const baseConfig = require('./base.config')
module.exports = merge(baseConfig, {
   mode: 'production',
   module: {
       rules: [
           {
               test: /.css$/,
               use: [
                   MiniCssExtractPlugin.loader,
                   {
                       loader: "css-loader",
                       options: {
                           importLoaders: 1
                       }
                   },
                   'postcss-loader',
               ]
           },
           {
               test: /.less$/,
               use: [
                   MiniCssExtractPlugin.loader,
                   {
                       loader: "css-loader",
                       options: {
                           importLoaders: 1
                       }
                   },
                   'postcss-loader',
                   'less-loader',
               ]
           }
       ]
   },
   plugins: [
       new MiniCssExtractPlugin(),
       new HtmlWebpackPlugin({
           filename:'index.html', // 生成的文件名,其实默认就是index.html
           template:'./public/index.html' // 引用的模板文件地址
       })
   ]
})

这里解释一下,开发环境使用style-loader,将css生成在.js文件中,不用单独生成一个.css文件,这样能加快构建速度和开发时的访问速度,因为使用MiniCssExtractPlugin会单独生成一个.css文件,每次修改就会多一次请求。

生产环境则相反,使用MiniCssExtractPlugin单独生成.css文件可以让浏览器有缓存能力,加快二次访问速度。

然后接下来的开发环境还需要配合使用html-webpack-plugin,所以不能放到base.config.js中,因为插件是叠加的,会有冲突。


  • 根目录下面新建一个public目录,然后下面新建一个index.html文件,内容随意,不做要求。
  • 完了之后在package.json文件中的scripts属性下面增加配置,如下


{
    "scripts": {
      "dev": "npx webpack --config ./config/webpack.dev.config.js",
      "build": "npx webpack --config ./config/webpack.prod.config.js",
      "test": "echo "Error: no test specified" && exit 1"
    }
}


使用--config [配置文件]可以加载指定配置文件。

package.json文件的scripts属性下面配置命令可以使用npm run [xxx]的方式运行。


  • 然后就是大家熟悉的命令了:
  • 开发环境:npm run dev(生成的文件没有.css文件)
  • 生产环境:npm run build(生成的文件有.css文件)


正式的开发环境


上面介绍的开发环境还是敲命令,生成文件,不能每次修改都敲一次命令然后在查看页面吧,接下来的环节就是webpack-dev-server


  • 配置正式的生产环境
  • 安装依赖:npm i -D webpack-dev-server
  • 然后修改webpack.config.js的配置


module.exports = merge(baseConfig, {
    mode: 'development',
    module: {
        rules: []
    },
    // 关键代码
    devServer: {
        hot: true, // 是否热更新
        open: true // 是否自动打开浏览器
    },
    plugins: []
})
  • 接下来修改一下package.json文件的dev命令
"scripts": {
  "dev": "npx webpack serve --config ./config/webpack.dev.config.js"
},

就是多加了一个serve的命令,很简单的。


  • 命令行运行:npm run dev


这个时候如果一切ok就会自动打开浏览器,然后你可以选择修改一些页面样式试试热更新的功能。

总结

生产环境是不同于开发环境的,因为两者的需求差异,所以需要两套不同的配置来实现不同的需求。

生产环境追求快速的体验,所以会减小包的体积,会区分加载的资源,需要用到不同的技术来实现,这里只是简单的使用MiniCssExtractPlugin插件。

开发环境追求快速实时的更新,所以需要热更新,就简单的使用了一个webpack-dev-server


目录
相关文章
|
前端开发
在Webpack配置文件中,如何配置loader以处理其他类型的文件,如CSS或图片
在Webpack配置文件中,通过设置`module.rules`来配置loader处理不同类型的文件。例如,使用`css-loader`和`style-loader`处理CSS文件,使用`file-loader`或`url-loader`处理图片等资源文件。配置示例:在`rules`数组中添加对应规则,指定`test`匹配文件类型,`use`指定使用的loader。
|
缓存 前端开发 JavaScript
Webpack与Babel的进阶配置与优化
通过以上的进阶配置和优化策略,可以更好地发挥`Webpack`与`Babel`的功能,提高项目的性能和开发效率。
|
JavaScript 前端开发 UED
如何配置 Webpack 进行代码分离?
通过以上方法,可以有效地配置Webpack进行代码分离,根据项目的具体需求和场景选择合适的方式,能够显著提高应用的性能和用户体验。在实际应用中,还可以结合其他优化技术,进一步优化Webpack的打包结果和应用的加载速度。
379 5
|
前端开发 JavaScript
webpack相关配置
以上只是Webpack配置的一些常见部分,实际应用中还可以根据具体的项目需求和场景进行更复杂和细致的配置,以满足不同的构建和优化要求。
219 2
|
缓存 JavaScript 前端开发
配置 Webpack 进行代码分离的常见方法有哪些?
通过以上常见方法,可以根据项目的具体需求和场景,灵活地配置Webpack进行代码分离,从而提高应用的性能和加载速度,优化用户体验。
224 3
|
缓存 前端开发 JavaScript
前端性能优化:Webpack与Babel的进阶配置与优化策略
【10月更文挑战第28天】在现代Web开发中,Webpack和Babel是不可或缺的工具,分别负责模块打包和ES6+代码转换。本文探讨了它们的进阶配置与优化策略,包括Webpack的代码压缩、缓存优化和代码分割,以及Babel的按需引入polyfill和目标浏览器设置。通过这些优化,可以显著提升应用的加载速度和运行效率,从而改善用户体验。
299 6
|
缓存 监控 前端开发
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第26天】前端工程化是现代Web开发的重要趋势,通过将前端代码视为工程来管理,提高了开发效率和质量。本文详细对比了Webpack和Gulp两大主流构建工具的选择与配置优化,并提供了具体示例代码。Webpack擅长模块化打包和资源管理,而Gulp则在任务编写和自动化构建方面更具灵活性。两者各有优势,需根据项目需求进行选择和优化。
325 7
|
前端开发
配置 Webpack 实现热更新
【10月更文挑战第23天】还可以进一步深入探讨热更新的具体实现细节、不同场景下的应用案例,以及如何针对特定需求进行优化等方面的内容。通过全面、系统地了解 Webpack 热更新的配置方法,能够更好地利用这一功能,提升项目的开发效率和性能表现。同时,要不断关注 Webpack 及相关技术的发展动态,以便及时掌握最新的热更新技术和最佳实践。
|
监控 前端开发 JavaScript
Webpack 中 HMR 插件的工作原理
【10月更文挑战第23天】可以进一步深入探讨 HMR 工作原理的具体细节、不同场景下的应用案例,以及与其他相关技术的结合应用等方面的内容。通过全面、系统地了解 HMR 插件的工作原理,能够更好地利用这一功能,为项目的成功开发提供有力保障。同时,要不断关注技术的发展动态,以便及时掌握最新的 HMR 技术和最佳实践。
|
缓存 前端开发 JavaScript
Webpack 动态加载的原理
【10月更文挑战第23天】Webpack 动态加载通过巧妙的机制和策略,实现了模块的按需加载和高效运行,提升了应用程序的性能和用户体验。同时,它也为前端开发提供了更大的灵活性和可扩展性,适应了不断变化的业务需求和技术发展。