【问题标题】:Template overriding in custom npm-modules in Apostrophe CMSApostrophe CMS 中自定义 npm 模块中的模板覆盖
【发布时间】:2023-04-03 00:43:01
【问题描述】:

为了在我的大多数 Apostrophe 项目中使用通用设置,我计划构建一些自定义 npm 模块来捆绑它们并将它们添加到我的项目中。除了添加小部件和后端功能之外,我想在其中执行的一些功能是编辑官方撇号模块的设置(例如,为apostrophe-pages 设置默认页面类型)并覆盖 nunjuck 块和/或模板。

使用 Apostrophe 的隐式子类化机制可以轻松地在项目级配置上覆盖这两件事,因此我可以使用自定义样板来实现为不同项目共享通用基础设置的目标,尽管我会失去升级我的能力默认通过发布我的节点模块的新版本。

总而言之,我在考虑这样一个 Maven 风格的依赖层次结构:

Apostrophe npm modules <- custom npm modules <- project modules

从基于 Java 和 Maven 的 CMS 开始,我知道我需要在很多事情上改变我的思维方式,所以:我正在尝试做的事情是否可行,在 Apostrophe 世界中是否有意义?什么是“撇号方式”来实现这样的目标?我是否需要为要扩展的每个模块使用 moog 选项 improve 创建自定义 npm 模块?

提前致谢。

【问题讨论】:

    标签: apostrophe-cms


    【解决方案1】:

    即使在npm_modules 目录中,撇号将首先搭建基础模块,然后扩展这些模块的模块,这意味着您的自定义 npm 模块将遵循与官方撇号模块相同的继承链。您可以像使用任何其他撇号模块一样覆盖它们。

    meta module (apostrophe-pieces) > custom-pieces (piece extension, custom npm module) > custom-pieces (project-level overrides)

    您只需选择性地覆盖 lib/modules/ 中的文件和方法,就像覆盖 apostrophe-blog 的部分内容一样,例如 lib/modules/custom-pieces/views/widget.html

    我是否正确理解您想要覆盖事物的方式?

    【讨论】:

    • 这很有意义。所以我可以有一个模块@acme/apostrophe-pages´ extending apostrophe-pages` 并包括default.html,并且在我的实际项目中,我需要在àpp.js 中引用这两个模块?覆盖根views 文件夹中的视图怎么样? (是的,我还在努力弄清楚所有的布局,outerlayout 和 outerlayoutbase 层次结构,对不起!)
    • 要与apostrophe-pages 这样的核心模块进行交互,您确实需要创建改进模块,这些模块可以更改基本设置或提供新模板。这些将有自己的命名空间(@acme/acme-apostrophe-pages)。然后,您将通过覆盖原始核心模块 (lib/modules/apostrophe-pages/views/layout.html) 在项目级别覆盖它们。查看针对撇号页面github.com/apostrophecms/apostrophe-personas/blob/… 的官方改进模块示例
    • 好的,所以我需要改进它而不是扩展基本模块并使用子模块,以便将更改直接应用于基本模块及其所有子模块。很好的例子!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多