RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1590624
Accepted
johnymkp
johnymkp
Asked:2024-08-14 17:26:05 +0000 UTC2024-08-14 17:26:05 +0000 UTC 2024-08-14 17:26:05 +0000 UTC

执行构建脚本时如何正确地将参数传递给 webpack 配置?

  • 772

我无法理解如何将参数传递给 webpack 配置(webpack 版本 5)。一些奇怪的行为。

这是 webpack 配置,webpack.config.js:

const path = require('path');

module.exports = (env, argv) => {
  return {
    mode: env.mode,
    entry: './src/index.js',
    output: {
      filename: 'main.js',
      path: path.resolve(__dirname, 'dist'),
      clean: true
    }
  }
};

这是节点项目本身的配置,package.json:

{
  "name": "mywebpack",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build": "webpack"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "webpack": "^5.93.0",
    "webpack-cli": "^5.1.4"
  }
}

这就是我调用构建脚本的方式:

npm run build --env mode=development

预期的行为是 webpack 配置中的函数中的 env 参数将有一个 mode 字段,其值将是字符串“development”。但实际上这不会发生,我收到错误

[webpack-cli] Unknown command or entry 'mode=development'

从中可以清楚地看出没有 env.mode。

如果您向构建脚本添加任意参数,例如如下所示:

"scripts": {
    "build": "webpack --env foo=bar"
  }

再次运行npm run build --env mode=development,env.mode就被填满了。我可以通过最终 main.js 文件中的更改来判断这一点;其中出现开发“tinsel”,如果将其转移到生产环境,那么它就会相应消失。

那些。看起来如果脚本描述没有描述单个参数,则根本不会创建参数的对象。但是如果我们在脚本描述中描述至少一个参数,那么在调用这个脚本时我们将能够传递至少10个参数,并且所有这些参数都将成为第一个参数(env)的字段。那么它有效吗?这是第一个问题。

另外,第二个参数 argv 的用途尚不清楚。从文档来看,它应该在运行脚本时收集我们传递的所有参数--(而不是通过 --env)。那些。例如,如果npm run build --hello="Hello, world!",则 argv.hello 将包含字符串“Hello, world!”。然而,事实并非如此:

const path = require('path');

module.exports = (settings, argv) => {
  console.log("argv.hello=" + argv.hello);  // argv.hello=undefined

  return {
    mode: argv.mode,
    entry: './src/index.js',
    output: {
      filename: 'main.js',
      path: path.resolve(__dirname, 'dist'),
      clean: true
    }
  }
};

该文件传达了事实--mode=production,即你可能会认为这种方式不能传递任意参数,而只能传递 webpack 已知的参数,比如 mode。但是,我尝试像这样传递--mode,它也是未定义的。最终如何正确使用第二个argv参数?这是第二个问题。

webpack
  • 1 1 个回答
  • 15 Views

1 个回答

  • Voted
  1. Best Answer
    johnymkp
    2024-08-15T15:33:45Z2024-08-15T15:33:45Z

    问题原来是npm自己拿了参数,所以报错了。因此,如果脚本描述没有描述单个参数,那么您需要--在开始时使用附加参数来运行脚本,如下所示:

    npm run build -- --env mode=development
    

    然后它就会起作用。

    从版本 5 开始,argv 在 webpack 中对于自定义参数根本不起作用。那些。只有 webpack 已知的参数才能通过 argv 传递,例如 mode。这个故事--也适用于此:

    npm run build -- --env message="Hello, webpack!" --mode=development
    

    --mode我们不仅可以在 env 之后通过,还可以在 env 之前通过。

    • 0

相关问题

  • Webpack 不编译样式类(Vuetify)

  • 通过 webpack 构建时连接图像、样式、html 中的字体、css 文件时路径中断

  • 如何为 webpack-dev-server 正确设置 publicPath 的路径

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5