【问题标题】:How to Use Assetic for requireJs如何为 requireJs 使用 Assetic
【发布时间】:2012-05-09 20:01:43
【问题描述】:

我正在尝试在 synfony2 项目中使用 require.js。

这里是主树枝文件中的代码:

<script 
        data-main="{{ asset('bundles/web/js/main.js') }}" 
        src="{{ asset('vendor/js/require.js') }}">
</script>

文件vendor/js/require.js 已正确加载,但对于文件bundles/web/js/main.js 我收到消息:

未捕获的错误:模块加载超时:mainApp.js?201205021855 http://requirejs.org/docs/errors.html#timeout

我正在使用 RequireJS 1.0.8。 知道如何解决问题吗?谢谢。


如果我查看源页面,它看起来像:

<script 
      data-main="/~myName/myProject/web/bundles/web/js/main.js?101205021855"       
      src="/~myName/myProject/web/vendor/js/require.js?101205021855">
</script>

所以路径是正确的,但在 javascript 控制台上我收到以下消息:

获取 http://localhost/~myName/myProject/web/app_dev.php/main.js?201205021855 404(未找到)

【问题讨论】:

    标签: javascript symfony requirejs


    【解决方案1】:

    添加到@dgabriel 响应。您可以使用切片过滤器来做到这一点,

    <script 
            data-main="{{ asset('bundles/web/js/main.js') | slice(0, -3) }}" 
            src="{{ asset('vendor/js/require.js') }}">
    </script>
    

    【讨论】:

    • 嗯,您已经为资产启用了asset_version 选项。发生 404 是因为 web 目录中的 .htaccess 将此路径视为路由,而不是文件路径。
    • twig 中也没有正则表达式替换过滤器。你必须创建一个树枝扩展来做到这一点。
    【解决方案2】:
    1. 确保从您的资产中去掉“.js”文件扩展名。它应该是 data-main="{{ 资产('bundles/web/js/main') }}"

    2. 确保文件路径正确。

    3. 确保 main.js 中没有 javascript 错误

    【讨论】:

    • 感谢 @dgabriel 和 m2mdas,我编辑了我的问题,添加了更多细节。
    【解决方案3】:

    404 看起来是因为在您的应用程序的其他地方需要“main” - 它与您的 data-main 中的路径不匹配。在这种情况下,很可能是您的 baseUrl 或路径配置存在问题(这两种方式都是告诉 RequireJS 您的模块所在位置的不同方式)。在您的示例中,您的 baseUrl 需要是 '/~myName/myProject/web/bundles/web/js'。

    您可能想尝试使用https://github.com/hearsayit/HearsayRequireJSBundle。它会自动为您处理这些配置细节,并与 Assetic 很好地集成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-04
      • 2012-12-04
      • 2017-07-20
      • 2012-11-05
      • 2013-02-22
      • 2012-06-27
      • 1970-01-01
      相关资源
      最近更新 更多