Loving Tina? us on GitHub0.0k
TinaCMS中的动态插件
December 9, 2019
By Nolan Phillips

TinaCMS最重要的方面之一是其动态插件系统。

通常,插件系统是静态的。我们在配置中列出所有需要的插件,并在应用程序运行时使用它们。TinaCMS并非如此。相反,我们在应用程序的生命周期中添加和移除CMS中的插件。

以下定义的postCreatorPlugin会在侧边栏添加一个按钮,以便您可以创建新的博客文章:

import slugify from 'slugify';
const postCreatorPlugin = new RemarkCreatorPlugin({
label: 'Post',
fields: [{ name: 'title', label: 'Post', component: 'text' }],
filename({ title }) {
return `content/posts/${slugify(title).toLowerCase()}.md}`;
},
frontmatter({ title }) {
return { title };
},
});

在大多数系统中,我们会在启动时添加插件,并在整个会话期间保持不变。无论您在网站的哪个位置,您都可以创建一个“Post”。(注意:您可以通过让插件隐藏自身来解决这个问题,但增加的责任会使API复杂化。)

在TinaCMS中,我们可以通过编程方式添加和移除插件。这一特性赋予开发者很大的权力——他们可以根据上下文决定如何从CMS中添加和移除功能。

usePlugins钩子是React网站可用的API,仅在BlogIndex渲染时注册postCreatorPlugin:

import { usePlugins } from "tinacms"
import { postCreatorPlugin } from "./post-creator-plugin"
function BlogIndex(props) {
usePlugins(postCreatorPlugin)
return ( ... )
}

您的网站是多语言的吗?如果有人在浏览法语版本,让CMS将新页面添加到法语网站,而不是英语网站。

您有文章和活动吗?仅在/blog中提供创建文章的功能,而仅在/events中提供创建活动的功能。

这个插件系统展示了控制反转原则如何影响TinaCMS。决定何时启用CMS的某些功能是一项复杂的责任。静态插件系统将其交给系统本身或插件开发者。TinaCMS将这一责任交给插件用户。

这种方法对双方都有利:插件作者不必担心实现复杂的配置方案,开发者可以在简单和复杂的用例中应用插件,而无需使用变通方法。

有兴趣创建自己的插件吗?请查看贡献指南。欢迎在Tina Discord上提出任何问题或评论。