Laravel Vite压缩JS后函数名被修改,如何保留原函数名?
Vite压缩JS时保留指定函数名的配置方案
Vite生产构建时的混淆压缩会缩短函数名,导致外部无法调用目标函数,你可以通过以下两种方式解决:
方式一:配置Vite的压缩规则(推荐)
修改Vite配置文件,添加build配置项,通过terserOptions指定需要保留的函数名:
export default defineConfig({ plugins: [ laravel({ input: ['resources/css/admin.css', 'resources/js/admin.js'], refresh: false, }), ], build: { minify: 'terser', terserOptions: { mangle: { // 把需要保留的函数名列在这里,多个用逗号分隔 reserved: ['targetFunc', 'anotherPublicFunc'] } } } });
- 这里切换到
terser是因为它的混淆规则配置更灵活,Vite默认用esbuild,如果想继续用esbuild,可以配置build.esbuild.minifyOptions,但terser对保留特定标识符的支持更成熟。 - 只保留需要对外暴露的函数名,避免关闭全部混淆导致打包体积过大。
方式二:显式挂载全局函数
如果你的函数需要全局调用,在JS代码里把它挂载到window对象上:
// 定义你的函数 function targetFunc() { // 函数逻辑 } // 挂载到window window.targetFunc = targetFunc;
这种方式下,即便函数名被混淆,通过window.targetFunc依然能正常调用。
内容的提问来源于stack exchange,提问作者mehran_s_w
相关产品推荐
相关产品推荐

