YunYouJun / valaxy

🌌 Next Generation Static Blog Framework (Beta) 下一代静态博客框架(支持页面/配置热重载)
https://valaxy.site
MIT License
724 stars 87 forks source link

bug: addon unable to set valaxy parameter #171

Closed hairyf closed 9 months ago

hairyf commented 1 year ago

由于 defineAddon 参数变更,resolveAddonConfig 中 index.ts 变得不在适用于更改 valaxy 参数。

68d074f7298e5a4f33de71f58198d79

建议 addon 包可在目录设置 valaxy.config.ts

YunYouJun commented 1 year ago

我认为 addon 不应该可以修改 valaxy.config.ts,这当用户自己设置 valaxy.config 时会产生困扰。

存在必须修改 valaxy.config 的 addon 吗?我认为那应该在 README 中告诉用户如何设置,而不是 addon 修改 valaxy.config,同时 valaxy.config 又加载了 addon,这产生了一个循环依赖的关系。

hairyf commented 1 year ago

我可以认可 addon 不修改 valaxy.config 的理念,事实上这对我不重要,但如果能支持,这个组合可以做的事情会变得更多。

但我已经不想(没有耐心),对 addon 的设计问题进行辩论比赛了,让我感觉很没有意义。

其重要的是 valaxy.config 可以对不同的功能进行组合,而不是全部由 valaxy/theme 承包所有工作。

我所看重是 valaxy.config 的多样性,正是因为多样性,所以 valaxy 才不可能做的十全十美, 所以才会需要第三方功能的加持,使得 valaxy 使用起来更加方便和快捷。

例如用户希望能够自定义图标,如果用户使用的 valaxy/theme 没有支持,它能做的只有自己添加代码。

所以你知道的,这让我感到浑身不自在。

以及各种各种的情况,我是 valaxy theme 开发者和其他框架的使用者,我并不希望 valaxy 为了所谓的合理性,牺牲博客框架的多样性扩展功能。

YunYouJun commented 1 year ago

我对不能满足大多数要求这一点存疑。Valaxy 支持 Vue 与 Vite 的插件,以借助已有的生态完成大部分需求。 对于开发者来说,Vue/Vite 的插件应该已经足以满足大部分功能的实现。

譬如自定义图标,unocss 的 preset-icons 或 unplugin-icons 已可以满足用户的大部分自定义需求。

我们要做的是寻找其无法解决的痛点,再思考其最佳解决办法。

在项目的初期,提供更复杂的 API 和混乱的加载机制,会让项目的可维护性变得更加糟糕。

hairyf commented 1 year ago

譬如自定义图标,unocss 的 preset-icons 或 unplugin-icons 已可以满足用户的大部分自定义需求。

这让我感觉目前 valaxy 是更面向于前端程序员的框架,如果我是前端小白,对 unocss 或者其他你所用的框架根本不了解(这没什么可笑的,不了解 unocss、vite 的人,甚至前端可太多了)

如果是这样的话,我觉得挺失望的,我会建议后端、其他行业朋友使用其他框架,而不是使用 valaxy,它有一定的前端门槛。

hairyf commented 1 year ago

在项目的初期,提供更复杂的 API 和混乱的加载机制,会让项目的可维护性变得更加糟糕。

我可以认可这个观点,但我感觉现在所做的是只在把糟糕的可维护性转嫁到 user/theme 上,这在 theme 和 user 群体在增加的时候会越来越明显。

YunYouJun commented 1 year ago

这让我感觉目前 valaxy 是更面向于程序员的框架,如果我是前端小白,对 unocss 或者其他你所用的框架根本不了解(这没什么可笑的,不了解 unocss 的人,甚至前端可太多了)

静态博客框架本身确实是更偏向于开发者的框架,对于小白来说,如果想要易用性,可能会更倾向于 Wordpress 等动态博客框架。 小白用户可能确实并不了解相关可使用的插件,与此同时,他们往往也并不存在如开发者一样更深度的定制需求。 此外,我们也可以在文档中补充可参考的示例,使用户可以更快速地获取最佳实现方案。 帮助用户学习了解前端已有的插件工具,这份经验对于用户开发自己的其他项目也是有益的。

而提供一个其他插件可以实现的功能,随着定制需求不断增加,可能会导致不得不重新实现一遍相似的功能,类似的重复造轮子是不必要的。(此时,addon 相比用户配置第三方插件的便捷性未必是划算的。)

我可以认可这个观点,但我感觉现在所做的是只在把糟糕的可维护性转嫁到 user/theme 上,这在 theme 和 user 群体在增加的时候会越来越明显。

用户配置 addon 与配置第三方插件(在有文档示例时)的成本是接近的,维护工作则等价于转嫁给了第三方插件。 当用户需要的自定义功能不断增多时,他已经几乎是一名开发者了,使用不经过 addon 的方式实现自己的功能可能更为顺手。

目前可能存在一些 Vue/Vite 插件和现有的 addon 无法实现的功能,我们只需要先找到这部分的痛点,抛出来寻找最佳解决方案即可。如果此时增加 API 是必要的,valaxy 仍然可以继续增加。

hairyf commented 1 year ago

当用户需要的自定义功能不断增多时,他已经几乎是一名开发者了,使用不经过 addon 的方式实现自己的功能可能更为顺手。

你说的很对,但如果我是开发者,我想我应该会自定义开发一个 addon,而不是去修改我现有的博客中的 valaxy.config.ts。

这样的确是会有重复造轮子的情况发生,但这带来的收益我认为更加可观,我更希望 valaxy 的生态会更加庞大,你说 Vue/Vite 能够实现,这是确实的,但具有一定门槛是不可否认的。

我很喜欢 hexo 的插件设计,你可以简单想象一下,

如果你需要文章或站点字数及阅读时间统计,你只需要安装 hexo-symbols-count-time 插件

你可以说统计只要在 extendsMd 上用 fs.read 添加读取文章的各种信息,但我相信绝大多数的只会沮丧的放弃这个功能

如果你想要同步 qiniu 图片,你只需要安装 hexo-qiniu-sync 插件

hexo 的插件生态非常完善,这不单单可以让 theme 开发人员更方便的添加功能,还可以让用户可以随心所欲的利用插件魔改自己的主题。

https://hexo.io/plugins/

hairyf commented 1 year ago

目前 valaxy-theme-hairy(我开发的主题上)valaxy.config 代码工作量是明显还是很多的。

主要原因还是因为 valaxy 新版没有一个很好的插件系统,无法对 valaxy.config 的配置进行有效抽离。

只能一股脑的将功能全部塞到 theme 的 valaxy.config 里了,这也是为什么我很讨厌让所有工作都交给 valaxy/theme 的原因。

后续我还要添加很多功能,我还是只能在 theme.config 里增加代码(难过),我并不想用只有组件功能的 addon(我为什么不直接用组件??)

image

hairyf commented 1 year ago

另外,如果这个功能没有修复,那么 https://github.com/YunYouJun/valaxy/pull/103

无法实现,或者其他更好的想法

hairyf commented 1 year ago

如果你认为这根本不算什么痛点,那我觉得这个 iss 可以在此进行关闭了,如果你觉得的确如此,那可以接着往下看。

我们要做的是寻找其无法解决的痛点,再思考其最佳解决办法。

按照我的想法(不一定对

最简单的:

看起来更合理的:

更麻烦的:

其他的:

而不是 addon 修改 valaxy.config,同时 valaxy.config 又加载了 addon,这产生了一个循环依赖的关系。

如果是这个问题,前几个版本已经定制好规则了不是吗,addon 中不能配置 addons,我觉得这应该算不上理由,因为我们可以阻断循环链。

YunYouJun commented 9 months ago

由于 valaxy addon 此前也合并了 valaxy.config.ts,我想我们可以停止此处的讨论了。

https://github.com/YunYouJun/valaxy/blob/main/packages/valaxy-addon-lightgallery/valaxy.config.ts