Jiaxun Wei
Jiaxun Wei
有比较好的 API 设计形式吗?我这边希望的是: - 能够比较清晰的在 `themeConfig` 中知道是哪个 plugin 的 config,作用域明确; - 现在的 plugin 是基于 path 去拿的,相当于没有 id,这个可能是区分 config 作用域会遇到的一个阻力; - 另一点就是,新的设计如何不 break,是不是能够只做一个语法糖类型的东西。
你关联的 antd 的 pr 我看到了,我反而觉得现在 trick 的实现也不错。 按你的这个设计走的话,如果这么写的话,算非法行为吧。 ```js const plugins = [ { config: {a: 'b'}, use: "bisheng-plugin-xxx?a=b" } ]; ```
bisheng-core 做出来可以解决掉这个问题,等我们这边后续的进度吧
先说一下我的需求,最近一段时间做了一个渲染层使用[San](https://ecomfe.github.io/san/)的bisheng,出于不想重复造轮子的目的,希望将我的项目和bisheng相同的部分(也就是对markdown处理的相关逻辑)抽象成bisheng-core。这样避免了我在我的工具中留着一堆bisheng的代码,也能够让bisheng存在后续服务其他框架(如vue、ng)的可能。 我的思路是,目前bisheng的工作流程是,依赖配置文件的配置,将两个特定文件(data.js和ssr-data.js)通过特殊的loader处理,在loader中拿到配置所需的md文件。前端通过require特定的js文件来拿到md的数据。其实数据require到前端之前,和React的关系并不大,即md文件到数据这段逻辑是可以解耦出来的。 我的结论是,bisheng保留命令行相关、依据模板引擎生成entry相关、react处理相关;解耦util、loader、transformer这部分(其实我个人不是很想用jsonml不过这不重要)。 Router这部分我还没想好,各家router的API还是存在些差异的;bisheng-core是暴露操作对象还是暴露函数库我没有明确地意见。 你觉得怎么样?
这周末有时间会把我写的使用San渲染的工具放到github,供参考。 除了渲染层换了San、改了个工具名(我总不能也叫bisheng吧。。)、以及路由相关的东西进行了修改之外,我尽量不对bisheng的代码进行改动。
@cipchk 基于San的实现我后续会发出来,还在测试 具体进度看 @benjycui 这边了
@benjycui https://github.com/LeuisKen/eocky/commit/88effb04bd6c0a552cb22a16045c673640357b1a
@cipchk 我发这个出来主要是想给 @benjycui 一个拆解的参考。😂可以对比看,换成San渲染后,修改的文件其实很少。 可以说,不涉及ssr、Router相关的话,就只有模板上暴露数据到前端的方式的修改。 我预期的bisheng-core肯定也是不会再有其他依赖的,关键是这个拆解的方式,可能还需要讨论一下。目前我感觉主要问题就是index.js中依赖themeConfig.routes,而这个东西各家router各有各的实现。 :)
昨天晚上下班路上想了一个方案,抛砖引玉: `bisheng.config.js`加一个新字段,layer(意为渲染层render layer),该值接受一个字符串,如果不是`'react'`,则去node_modules找`bisheng-layer-${bishengConfig.layer}`这个包。 一个`'bisheng-layer-xxx'`就是对应渲染层所需要的nunjucks模板,至少包含`entry.nunjucks.js`和`routes.nunjucks.js`,如果在该目录下能找到`ssr.nunjucks.js`则允许使用`bisheng build --ssr`选项,否则执行`bisheng build --ssr`时报错。 `bishengThemeConfig`中的`routes `字段变成一个字符串,该字符串作为`themeRoutePath`输出到`routes.nunjucks.js`,这样routes对应的文件中可以随便使用不同router的API以及随便使用各种loader,反正对于后端只是个路径,所有的东西都暴露给前端了。 这个方案的breaking change比较少,感觉通过分支判断做到“几乎没有”: - themeConfig的route可以兼容对象,加个类型的分支判断就行; - layer默认值为'react'。 **待讨论** - 问题:如何处理`require('bisheng/router')`? - 方案:在`bisheng-layer-xxx`里面加东西。 - 问题:换Layer对webpack.config修改还是有些的,比如layer为san的时候,各个项目的`bisheng.config.js`里面都会有挺多的loader、plugin配置的冗余代码。 - 方案:都做到`bisheng`里 or `bisheng-layer-xxx`里面加一个`default.bisheng.config.js`文件?
嗯,那接下来还是回到最初的主题:拆分”必胜客“(bisheng-core)吧😄。