首页 > 其他分享 >【划重点】一文搞懂Webpack环境区分配置(12)

【划重点】一文搞懂Webpack环境区分配置(12)

时间:2024-11-12 22:20:15浏览次数:3  
标签:12 -- Webpack loader webpack abc env 搞懂 js

在实际开发中,我们经常需要针对生产环境和开发环境分别书写 webpack 配置。为了更好地适应这种需求,webpack 允许配置不仅可以是一个对象,还可以是一个函数。这样,开发者可以根据不同的环境返回不同的配置对象。

1. 使用函数作为配置

module.exports = env => {
  return {
    // 配置内容
  };
};

在开始构建时,如果 webpack 发现配置是一个函数,会调用该函数,并将函数返回的对象作为配置内容。因此,开发者可以根据不同的环境返回不同的对象。

2. 传递环境变量

在调用 webpack 时,可以通过 --env 参数传递环境变量。这些环境变量会被传递给配置函数的 env 参数。

npx webpack --env abc # env: "abc"

npx webpack --env.abc # env: {abc: true}
npx webpack --env.abc=1 # env: {abc: 1}
npx webpack --env.abc=1 --env.bcd=2 # env: {abc: 1, bcd: 2}

3. 示例

假设我们有一个项目,需要根据环境变量 production 来区分生产环境和开发环境。

项目结构

my-project/
├── src/
│   ├── index.js
├── dist/
├── package.json
└── webpack.config.js

webpack.config.js

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = env => {
  const isProduction = env.production;

  return {
    mode: isProduction ? 'production' : 'development',
    entry: './src/index.js',
    output: {
      filename: isProduction ? 'bundle.[contenthash:5].js' : 'bundle.js',
      path: path.resolve(__dirname, 'dist')
    },
    module: {
      rules: [
        {
          test: /\.js$/,
          exclude: /node_modules/,
          use: {
            loader: 'babel-loader',
            options: {
              presets: ['@babel/preset-env']
            }
          }
        },
        {
          test: /\.css$/,
          use: isProduction
            ? [MiniCssExtractPlugin.loader, 'css-loader']
            : ['style-loader', 'css-loader']
        }
      ]
    },
    plugins: [
      new HtmlWebpackPlugin({
        template: './src/index.html'
      }),
      ...(isProduction
        ? [new MiniCssExtractPlugin({ filename: '[name].[contenthash:5].css' })]
        : [])
    ],
    devServer: {
      contentBase: './dist',
      hot: true
    }
  };
};

安装依赖

npm install --save-dev webpack webpack-cli babel-loader @babel/core @babel/preset-env css-loader style-loader mini-css-extract-plugin html-webpack-plugin

运行构建

package.json 中添加两个脚本,分别用于开发环境和生产环境:

{
  "scripts": {
    "start": "webpack serve --env.development",
    "build": "webpack --env.production"
  }
}

然后运行:

npm start # 开发环境
npm run build # 生产环境

4. 解释

  • 开发环境:使用 style-loader 将 CSS 插入到 DOM 中,使用 HotModuleReplacementPlugin 实现热更新。
  • 生产环境:使用 MiniCssExtractPlugin 将 CSS 提取到单独的文件中,使用 [contenthash] 生成带有哈希值的文件名,以便浏览器缓存。

总结

通过本课程,你已经了解了如何使用函数作为 webpack 配置,以及如何通过 --env 参数传递环境变量。合理配置不同环境下的 webpack 配置可以提高开发效率和生产环境的性能。

标签:12,--,Webpack,loader,webpack,abc,env,搞懂,js
From: https://blog.csdn.net/weixin_53961451/article/details/143725503

相关文章

  • Solution - Codeforces 1217E Sum Queries?
    对于这个“好的”的判定条件看起来有点奇怪,不妨结合上题目要求的“最小\(sum\)”一起考虑。因为要最小化\(s_p\),所以一个比较直观的想法是先从选的数个数入手。考虑到如果选的只有\(1\)个数\(a_i\),那么\(sum=a_i\),一定是好的,排除。如果选的是\(2\)个数\(a_i,a_j\),......
  • SS241112A. 定向越野(walk)
    SS241112A.定向越野(walk)题意给你\(n\)个点,\(n\le12\),你可以从任意一个点出发以任意顺序依次遍历所有点燃火回到起点,你只能拐直角走,问最小路程。答案输出最小路程的平方,输出分数形式。可以证明最小路程的平方一定是有理数。思路显然枚举遍历顺序。首先需要明白为什么答案......
  • 11.12
    贺了好多道AT之后发现自己瞎猜的能力有所提升!!!11.11A.开场二十多分钟猜了个结论,感觉很对。由于只有一个小样例且题面没说有自环甚至暗示没有自环且数据故意造自环最后挂成了20分。最后环一定是每个点的读书都为\(2\),所以对于度数大于\(2\)的我们要对它进行一次拆,若度数......
  • 每日打开 11.12
    [AHOI2021初中组]超市购物题目背景AHOI2021初中组T1你可以选择跳过背景部分。春的一天,正是乍暖还寒时候,狂风乍起。小可可裹紧了单薄的外衣,往小雪家中赶去。“今天真不是个出门的时候啊!”小可可感叹道。“但是我还有东西要买……你就陪我去下超市吧?”在超市里,小雪一共买......
  • [考试记录] 2024.11.12 noip模拟赛11
    T1使用\(bfs\)记录走到\(tx,ty\)的路径的横边和竖边的数量,然后取\(\max\)。这里取\(\max\)的原因是,找到的路径必须是最短路,当\(k\)取的小的时候竖边就会变多,所以这条路径就不一定是最短路了。#include<bits/stdc++.h>usingnamespacestd;#defineppair<int,int>i......
  • 2024/11/12日 日志 关于Servlet ---- Request(请求)& Response(响应) 的补充
    Request(请求)&Response(响应)--·Request:获取请求数据--·Response:设置响应数据Request点击查看代码--Request继承体系--ServletRequestJava提供的请求对象根接口--HttpServletRequestJava提供的对Http协议封装的请求对象接口--RequestFacade......
  • 2024.11.12 1842版
    起于《海奥华预言》的思考◆地球管理结构和参考持续更新中...... 英文地址:https://github.com/zhuyongzhe/Earth/tags中文地址:https://www.cnblogs.com/zhuyongzhe85作者:朱永哲 ---------------------------------------------------------------------------------......
  • 20241112 模拟赛总结
    期望得分:100+100+0+10=210实际得分:100+80+0+10=190好困。。T1被硬控了很久。看着就像诈骗题,观察大样例发,答案就是\(a_1-a_2\),特判\(n=1\)的情况。证明的话,感觉就是后面的数,贡献成正数和负数应该是数量相同的,所以就抵消了,第一个数只能贡献成正数,第二个数只能贡献成负的。T......
  • 【PAT_Python解】1125 子串与子列
    原题链接:PTA|程序设计类实验辅助教学平台Tips:以下Python代码仅个人理解,非最优算法,仅供参考!多学习其他大佬的AC代码!测试点5超时:defmin_window_substring(s,p):len1=len(s)len2=len(p)mixn=0min_length=len1+1#设置为一个较大的值......
  • 2024.11.12随笔&联考总结
    前言心情不好,因为考试时T2T3全看错题了,导致T2没做出来,T3一份没得。然后下午打球眼镜架子坏了,回机房才发现被高二的盒了。但还是稍微写一下总结吧。总结感觉我今天做题状态还行,思路该想的都想到了。只不过我读题不仔细,主要去看完样例。然后题目中加粗加黑的字体没有注意,导......