-
-
Notifications
You must be signed in to change notification settings - Fork 737
Description
System Info
System:
OS: macOS 26.1
CPU: (12) arm64 Apple M4 Pro
Memory: 264.17 MB / 24.00 GB
Shell: 5.9 - /bin/zsh
Binaries:
Node: 22.18.0 - /Users/micooz/.local/state/fnm_multishells/67176_1763266678252/bin/node
Yarn: 1.22.22 - /opt/homebrew/bin/yarn
npm: 10.9.3 - /Users/micooz/.local/state/fnm_multishells/67176_1763266678252/bin/npm
pnpm: 10.20.0 - /opt/homebrew/bin/pnpm
Browsers:
Chrome: 142.0.7444.162
Safari: 26.1
npmPackages:
@rspack/cli: ^1.6.3 => 1.6.3
Details
output.iife: false 选项可能导致内联重复数据
Reproduce link
https://github.com/micooz/rspack-repro-12212
Reproduce Steps
package.json
{
"dependencies": {
"@rspack/cli": "^1.6.3"
}
}rspack.config.ts
import { defineConfig } from '@rspack/cli';
export default defineConfig({
output: { iife: false },
});源文件
// src/index.js
const SOME_BASE64_DATA = 'aiVBORw0KGgoA...';
atob(SOME_BASE64_DATA);
// atob(SOME_BASE64_DATA);构建产物
var __webpack_modules__ = {},
__webpack_module_cache__ = {};
function __webpack_require__(_) {
var e = __webpack_module_cache__[_];
if (void 0 !== e) return e.exports;
var r = (__webpack_module_cache__[_] = { exports: {} });
return __webpack_modules__[_](r, r.exports, __webpack_require__), r.exports;
}
(__webpack_require__.rv = () => '1.6.3'),
(__webpack_require__.ruid = '[email protected]');
const SOME_BASE64_DATA = 'aiVBORw0KGgoA...';
atob('aiVBORw0KGgoA...');
//# sourceMappingURL=main.js.map可以看到 SOME_BASE64_DATA 的值被内联到 atob 函数中,并且 SOME_BASE64_DATA 被保留且未被引用,出现了两份相同的数据。SOME_BASE64_DATA 的数据量可能很大,会对产物体积造成一定影响。
然而,如果设置 iife: true,或者再引用一次 SOME_BASE64_DATA,此问题会消失:
源文件
// src/index.js
const SOME_BASE64_DATA = 'aiVBORw0KGgoA...';
atob(SOME_BASE64_DATA);
atob(SOME_BASE64_DATA); // 再引用一次构建产物
var __webpack_modules__ = {},
__webpack_module_cache__ = {};
function __webpack_require__(_) {
var e = __webpack_module_cache__[_];
if (void 0 !== e) return e.exports;
var r = (__webpack_module_cache__[_] = { exports: {} });
return __webpack_modules__[_](r, r.exports, __webpack_require__), r.exports;
}
(__webpack_require__.rv = () => '1.6.3'),
(__webpack_require__.ruid = '[email protected]');
const SOME_BASE64_DATA = 'aiVBORw0KGgoA...';
atob(SOME_BASE64_DATA), atob(SOME_BASE64_DATA);
//# sourceMappingURL=main.js.map这个行为非常令人困惑,是 by design 还是 bug 呢,希望得到解答。