runopencode/assets-injection

dev-master 2015-09-30 15:44 UTC

This package is auto-updated.

Last update: 2024-09-17 10:04:07 UTC


README

资产注入库缺少资产管理组件,该组件将依赖注入和Assetic结合在一个库中,帮助全栈开发者/前端开发者在不担心依赖和包含顺序的情况下,将必要的javascript和stylesheets包含到模板中。

如果Bower或Components(或其他类似项目)可以帮助您从GitHub将资产拉取到您的项目目录中,此组件将帮助您将这些资产包含到模板中。

如何?通过示例学习...

在这个示例中,我们将假设您使用Twig。所以,在您的模板

<html>
    <head>
        <!-- ... your code ... -->
        {% css %}
        <!-- ... your code ... -->
    </head>
    <body>
    
        <!-- ... your code ... -->
        {% inject 'my-asset-library' %}
        <!-- ... your code ... -->
        
        {% js %}
    </body>
</html>

假设您的库 my-asset-library 依赖于 jquery-ui,而 jquery-ui 需要 jquery,这意味着您必须按照正确的顺序将此代码添加到 HEAD/BODY 标签中。

此库解决了这个问题,解决所有这些依赖关系,根据库的定义加载和注入所有必需的javascript和stylesheets。因此,您的结果可能如下所示

<html>
    <head>
        <!-- ... your code ... -->
        <link rel="stylesheet" type="text/css" href="lib/jquery-ui/jquery-ui.min.css" />
        <link rel="stylesheet" type="text/css" href="app/my-app.css" />
        <!-- ... your code ... -->
    </head>
    <body>
    
        <!-- ... your code ... -->
        <!-- ... your code ... -->
        
        <script type="text/javascript" href="lib/jquery/jquery.min.css"></script>
        <script type="text/javascript" href="lib/jquery-ui/jquery-ui.min.css"></script>
        <script type="text/javascript" href="app/my-app.js"></script>
    </body>
</html>

一个单独的 {% inject "library-name" %} 将帮您摆脱所有这些麻烦...!

而且,这还不是全部 - 您可以配置库将所有这些资产合并并压缩到一个文件中,因此,在生产环境中,您的结果可能如下所示

<html>
    <head>
        <!-- ... your code ... -->
        <link rel="stylesheet" type="text/css" href="cache/app.css" />
        <!-- ... your code ... -->
    </head>
    <body>
    
        <!-- ... your code ... -->
        <!-- ... your code ... -->
        
        <script type="text/javascript" href="cache/app.js"></script>
    </body>
</html>

您看到魔法了吗?

您是否看到在 HEAD 中的 LINK 标签被正确渲染,即使资产是在渲染逻辑之后注入的?我们没有使用 str_replace,也没有使用一些令人讨厌的技巧 - 我们让Twig缓冲其输出并延迟执行模板的部分,以实现此结果。

这不是一项容易的任务,请参阅: Sonata基本布局,注意底部的 {{ sonata_block_include_stylesheets('screen', app.request.basePath) }} - 样式表不是在它们应该的位置加载的 - 在 HEAD 标签中。

我们找到了克服上述问题的方法,并在这个库的开发中考虑了Sonata和Drupal动态块内容。

开发中

请注意,这个库仍在积极开发中,预计2015年10月将发布第一个版本,以及Symfony包。