Webpack打包破坏FiveM全局对象问题求助
FiveM Webpack压缩导致全局exports失效的解决办法
最可靠的配置方案:强制Webpack保留全局标识符
直接修改Webpack配置,从两个层面阻止exports和global被压缩重命名:
添加externals声明
在webpack.config.js里,把exports和global标记为外部依赖,让Webpack完全不处理它们:module.exports = { // 其他已有配置 externals: { exports: 'exports', global: 'global' } };配置Terser压缩插件保留指定变量
Webpack默认用Terser做代码压缩,需要在插件配置里把exports和global加入保留名单:const TerserPlugin = require('terser-webpack-plugin'); module.exports = { // 其他已有配置 optimization: { minimizer: [ new TerserPlugin({ terserOptions: { mangle: { // 强制保留这些变量名不被混淆 reserved: ['exports', 'global'] } } }) ] } };
备选写法:避开Webpack的压缩检测
如果不想改配置,也可以换一种写法绑定导出,用字符串索引的方式让Webpack不会重命名键名:
// 替代原来的exports("name", fn) (window as any).exports['name'] = function() { // 你的函数逻辑 };
这种写法不管bundle大小,都能让游戏引擎正常识别导出的函数。
验证方法
打包完成后打开输出的bundle文件,搜索exports或global.exports,确认它们没有被改成e、t这类短名字,然后测试跨资源的函数调用是否正常。
内容的提问来源于stack exchange,提问作者Pau Ibáñez
相关产品推荐
相关产品推荐

