【问题标题】:Pushing Assets to the Browser - Your Own Theme Module将资产推送到浏览器 - 您自己的主题模块
【发布时间】:2018-06-13 09:56:38
【问题描述】:

对于包括我自己在内的一些初学者来说,仍在研究如何制作我们自己的主题模块。但这就是我自己找到解决方案的方式。请注意:我不知道这是否会影响 ApostropheCMS 的性能问题,但我将把它作为我们所有人的解决方案。让我们开始 ! (见下面的答案):

【问题讨论】:

  • 嗨,Amin,感谢您发布此内容,我相信这对其他人会有所帮助。话虽如此,你不应该在你的 nunjucks 模板中链接你的资产,因为这已经被 pushAssets 处理了。如果事情没有出现,也许你没有重新启动你的节点服务器?
  • 嗨@Tortilaman,感谢您澄清这一点。我测试了您不必包含在我的 nunjucks 模板中的解决方案。但是,当我测试一个简单的 body{background-color : #000} 并重新启动我的节点服务器时。它不输出我的页面主体颜色!当我将它们包含在 nunjucks 模板中时,它可以工作!
  • 您不应在问题正文中发布问题的答案。如果您想回答自己的问题,请将其作为单独的答案进行,以便清楚问题是什么以及该问题的答案是什么。此外,通过这种方式,人们在浏览时会看到问题的答案已被接受。
  • 谢谢@MihaiChelaru。我是这个 Stack Overflow 的初学者。稍后会修改。

标签: apostrophe-cms


【解决方案1】:

没有必要也不建议编写自己的linkscript 标签,因为这会阻止 Apostrophe 在生产中缩小您的资产,并阻止将您的 LESS 文件编译为具有共享 mixins 等优势的单个单元.

但是,apostrophe-samples project 现在包含“主题”模块的工作示例。我已将有时在 apostrophe-assets 中的项目级别找到的资产移动到 theme 模块,以演示如何正确完成此操作。

关键要素是:

  • 别忘了在 app.js 中启用 theme 模块。
  • lib/modules/theme/index.js,将你需要的资产推送到construct,或者从construct调用的方法。
  • 将这些资产放在theme 模块的public/csspublic/js 子目录中。

查看apostrophe-samples project 了解确切的工作代码。

要了解生产环境中的撇号以及如何在无需额外代码的情况下缩小资产,请参阅Apostrophe in production

感谢您推动将此用例带入示例项目。

【讨论】:

    【解决方案2】:

    针对所有 APOSTROPHE 开发人员初学者的更新答案

    我们遵循了来自 Pushing Assets to the Browser 的教程,但不知何故,仍然无法找到资产的原因有一个缺失的情节。假设我们在这里基于该教程创建了自己的主题模块。我以我的为例:

    my-theme
      - public/
         - css/
             - bootstrap/
                 - bootstrap.min.css
             - font-awesome/
                 - font-awesome.min.css
         - js/
             - bootstrap/
                 - bootstrap.min.js
       - index.js

    然后,你必须把它放在 app.js 来加载模块:

      modules: {
          // in app.js
          // other config above
          // include my own-theme-module
          'my-theme' : {},

    然后,在我们的 my-theme/index.js 中,这些是我的 pushAsset 方法:

    module.exports = {
        construct : function(self,options){
            // Every asset you have in public folder
            self.pushAsset('script', 'bootstrap/bootstrap.min');
            self.pushAsset('stylesheet', 'bootstrap/bootstrap.min');
            self.pushAsset('stylesheet', 'custom');
        }
    }

    重要提示:您不必在 nunjucks 模板中包含链接或脚本标记,因为这会使您在 ApostropheCMS 上出现性能问题,如果您放置链接/ nunjucks 模板中的脚本标签。让撇号为你做,你的工作只是 pushAsset ;)

    现在,如果你有太多的资产,而且每次上传新资产都懒得写代码,我有一个使用 lodash 的快捷方式,很简单! .在 my-theme/index.js 中:

    var _ = require('lodash');
    module.exports = {
        stylesheets : [
            {   // Make sure your directory after css folder is correct for specific search
                name : 'bootstrap/bootstrap.min'
            },
            {
                name : 'custom'
            },
            {
                name : 'font-awesome/css/font-awesome.min'
            }
        ],
        scripts : [
            {
                name : 'bootstrap/bootstrap.min'
            }
        ],
        construct : function(self,options){
            // Every asset you have in public folder
            _.each(options.stylesheets || [] , function(item){
                self.pushAsset('stylesheet', item.name);
            });
            _.each(options.scripts || [] , function(item){
                self.pushAsset('script' , item.name)
            });
        }
    }

    例如,如果我想用我的自定义资产 PNG 标记 <img> 怎么办?我也需要 pushAsset 吗?

    答案:不,您不必推送资产,因为它仅适用于 Stylesheets 和 Scripts 。在 app.js 中加载模块后,撇号会自动将资产上传到 /modules/module-name/path-to-asset/ 的 URL。例如:<img src="/modules/my-theme/img/icon.png"> 简单!



    你已经完成了!

    另一个注意事项:如果您只需要通过 CSS 为使用 url() 或 font-face 的背景图像调用资产,则需要使用自己的模块名称进行调用:@987654329 @ .简单的 ! !

    并记住,不要放置 LINKSCRIPT 标签来链接您推送的资产。 Apostrophe 已为您提供强大的性能!同样,您的工作只是推送资产。

    【讨论】:

    • 嗨,Amin,编写自己的链接/脚本标签并推送资产是没有意义的。事实上,编写你自己的链接和脚本标签完全复制了推送资产的功能,所以如果你打算这样做,你最好不要推送它们。您还将失去生产中的缩小优势并发出额外的 HTTP 请求。我将在 apostrophe-examples 项目中添加一个自定义“主题模块”的示例,以阐明如何成功完成此操作。
    • 知道了@TomBoutell。更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    相关资源
    最近更新 更多