《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


目录
相关文章
|
1月前
|
JSON 前端开发 JavaScript
前端工程化:Webpack配置全攻略
【7月更文挑战第14天】
38 6
|
1月前
|
JSON 缓存 前端开发
前端工程化:Webpack配置全攻略
【7月更文挑战第18天】
26 1
|
2月前
|
缓存 JavaScript
webpack配置中的3种hash值
webpack配置中的3种hash值
|
2月前
|
缓存 前端开发 JavaScript
Webpack作为模块打包器,为前端项目提供了高度灵活和可配置的构建流程
【6月更文挑战第12天】本文探讨了优化TypeScript与Webpack构建性能的策略。理解Webpack的解析、构建和生成阶段是关键。优化包括:调整tsconfig.json(如关闭不必要的类型检查)和webpack.config.js选项,启用Webpack缓存,实现增量构建,代码拆分和懒加载。这些方法能提升构建速度,提高开发效率。
47 3
|
1月前
|
JavaScript
vue 配置【详解】 vue.config.js ( 含 webpack 配置 )
vue 配置【详解】 vue.config.js ( 含 webpack 配置 )
28 0
|
3月前
|
API 开发工具 开发者
webpack热更新原理
Webpack的Hot Module Replacement(HMR)提升开发效率,无需刷新页面即可更新模块。开启HMR需在配置中设`devServer.hot: true`。Webpack构建时插入HMR Runtime,通过WebSocket监听并处理文件变化。当模块改变,Webpack发送更新到浏览器,HMR Runtime找到对应模块进行热替换,保持应用状态。开发者可利用`module.hot` API处理热替换逻辑。
|
3月前
|
缓存 JavaScript 前端开发
webpack学习笔记--基本配置
webpack学习笔记--基本配置
|
3月前
|
前端开发
【专栏】`webpack` 的 `DefinePlugin` 插件用于在编译时动态定义全局变量,实现环境变量差异化、配置参数动态化和条件编译
【4月更文挑战第29天】`webpack` 的 `DefinePlugin` 插件用于在编译时动态定义全局变量,实现环境变量差异化、配置参数动态化和条件编译。通过配置键值对,如 `ENV: JSON.stringify(process.env.NODE_ENV)`,可以在代码中根据环境执行相应逻辑。实际应用包括动态加载资源、动态配置接口地址和条件编译优化代码。注意变量定义的合法性和避免覆盖,解决变量未定义或值错误的问题,以提升开发效率和项目质量。
172 3
|
3月前
|
前端开发 测试技术 开发者
深入理解 Webpack 热更新原理:提升开发效率的关键
深入理解 Webpack 热更新原理:提升开发效率的关键
|
3月前
|
JavaScript 前端开发
构建工具:配置Webpack打包Vue项目
【4月更文挑战第24天】本文介绍了如何配置Webpack来打包Vue项目。首先,Webpack作为模块打包器处理依赖并打包成可执行文件。接着,通过安装Node.js和npm,创建Vue项目,进入项目目录并配置Webpack的入口、输出、加载器和插件。最后,运行构建命令完成打包。理解Webpack基础并按需配置,能优化前端项目构建和开发体验。
53 0