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

Symfony 7.1 + Webpack Encore + Stimulus 按需加载控制器问题求助

Symfony 7.1 + Webpack Encore + Stimulus 按需加载控制器问题求助

各位大佬好,我最近碰到个棘手的问题,想请大家帮忙出出主意。我的项目基于Symfony 7.1,搭配Webpack Encore和Stimulus开发,项目里既有针对单个页面的自定义.js文件,也有不少Stimulus控制器。但现在遇到的问题是:所有Stimulus控制器都被打包进了app.js,每个页面都会加载它们——哪怕我已经给控制器加上了/* stimulusFetch: 'lazy' */的注释,情况也没有改善。

这真的很困扰我,因为很多控制器都是为特定页面设计的,并非全站通用。这样不仅平白增大了包体积,影响加载性能,而且有些控制器是给注册/登录用户准备的,不该被公开加载到所有页面。

我想请教下,怎么调整配置才能实现只在需要的页面加载对应的控制器呢?目前我的bootstrap.js是Symfony默认生成的代码:

import { startStimulusApp } from "@symfony/stimulus-bridge";

// Registers Stimulus controllers from controllers.json and in the controllers/
export const app = startStimulusApp(
  require.context(
    "@symfony/stimulus-bridge/lazy-controller-loader!./controllers",
    true,
    /\.[jt]sx?$/
  )
);

我试过把bootstrap.js从app.js里移到其他文件中加载,但这样所有控制器都加载不出来了。我还尝试过修改bootstrap.js,不让它自动注册任何控制器:

import { startStimulusApp } from "@symfony/stimulus-bridge";
const app = startStimulusApp();
export default app;

然后在单个页面的.js文件里手动调用app.register('', );来注册控制器,但这种方式也没能成功加载控制器。

备注:内容来源于stack exchange,提问作者Mecanik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 10:14:32