You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
背景
目前文档是使用
markdown-doc-loader
和react-markdown-doc-loader
生成的,这两个 loader 目前来说可以满足项目需求,但也有点年久失修。最大的问题是文档中示例代码使用JavaScript
编写,不支持TypeScript
。Zent 组件库已经全面TypeScript
化,示例代码不可能一直使用JavaScript
,因此需要文档生成工具支持TypeScript
。整体设计
最重要的变化是将现有的示例代码文件从
.md
文件替换成.tsx
文件,从而让TypeScript
编译器能够识别。组件目录结构:
类型检查依赖
TypeScript
编译器的原生支持,所以demos
下的代码就是普通的TypeScript
代码,但是必须按照我们的规范编写。在编译阶段,将.md
文件转换成TypeScript
代码,同时将demos
下的示例插入到输出文件中。这里有几个关键点:
.md
文件编译后输出为TypeScript
代码,之前是JavaScript
代码demos
下的代码通过export
和import
机制插入到.md
文件的输出中,而不是将代码直接注入进去,避免作用域冲突问题技术方案设计
示例代码规范
在
.md
文件的编译阶段会插入一段动态获取i18n
值的代码,示例代码还是同一份。在
.md
文件编译阶段还需要对代码做一次国际化处理,以确保展示给用户的示例代码中不存在这些国际化逻辑。实现
和现有方案类似,依然通过
webpack
的loader
来实现,但是会合并markdown-doc-loader
和react-markdown-doc-loader
为一个loader
。.md
文件webpack
的机制去处理,不再放在.md
文件中Prism.js
,highlight.js
不支持jsx
高亮。高亮换到运行时做,编译时不做高亮,因为Prism.js
官方不支持Node.js
运行环境Beta Was this translation helpful? Give feedback.
All reactions