You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否移除Webpack生成代码中的(0,...)表达式?

问题:让Webpack移除导入函数调用的额外括号语法

Webpack会将以下ES模块代码:

import { useState } from 'react';

useState(0);

转换为:

(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0);
// 压缩后会变成
// (0,a.b)(0);

我的应用里有数百个导入语句,每次都会多生成4个符号。我知道Webpack这么做是为了让函数调用时this等于undefined,但我用的所有库导出的函数都不依赖this关键字。能不能让Webpack直接生成下面的代码?

react__WEBPACK_IMPORTED_MODULE_0__.useState(0);

解决方案

可以通过以下两种方式实现:

1. 使用Babel松散模式转换模块

在Babel配置文件(如.babelrc或babel.config.js)中,将ES模块转换为CommonJS时开启松散模式,Babel会生成直接的属性访问调用,Webpack就不会添加额外的逗号表达式语法:

// babel.config.js
module.exports = {
  presets: [
    ['@babel/preset-env', {
      modules: 'commonjs',
      loose: true
    }],
    '@babel/preset-react'
  ]
};

松散模式下,Babel会把import { useState } from 'react'转换为const { useState } = require('react'),调用时直接使用useState(0),Webpack处理这类代码时不会生成(0, fn)的绑定解除语法。

2. 启用Webpack模块合并优化

开启Webpack的optimization.concatenateModules(生产模式默认已启用),它会将多个模块合并到一个函数作用域中,导入的函数会被直接内联调用,自然消除(0, fn)的写法:

// webpack.config.js
module.exports = {
  optimization: {
    concatenateModules: true
  }
};

这种方式更安全,仅在模块合并时消除不必要的语法,不会改变模块原有行为,同时还能减少代码体积、提升运行性能。

内容的提问来源于stack exchange,提问作者Ivan Adanenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 08:17:31