From b7909ea7c5ea06abffccaea8074921a5f8a3f764 Mon Sep 17 00:00:00 2001 From: WeilinerL <2207284210@qq.com> Date: Thu, 21 Nov 2024 17:05:34 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E2=9C=8F=EF=B8=8F=20=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo/docs/guide/intro.md | 297 +++++++++++++++++- packages/website/template/docs/guide/intro.md | 297 +++++++++++++++++- 2 files changed, 592 insertions(+), 2 deletions(-) diff --git a/demo/docs/guide/intro.md b/demo/docs/guide/intro.md index 30d06b4..02889f1 100644 --- a/demo/docs/guide/intro.md +++ b/demo/docs/guide/intro.md @@ -1,2 +1,297 @@ # 介绍 -这里写点啥... \ No newline at end of file +本项目 fork 自 [vuese](https://vuese.github.io/website/zh/),用于 [mpx](https://www.mpxjs.cn/) 项目的文档定制化生成。(感谢 [vuese](https://vuese.github.io/website/zh/) 的相关开发者) + +## 快速上手 + + + +### 安装 + +```bash +npm install @mpxjs/vuese-website -g +``` + +### 项目配置 + +假设你所在的目录为基于组件库搭建的`example`目录,这个目录主要是为了演示组件库组件的用法,启动后的效果如右边模拟器所示。👉 + +在`example`目录下新建`website.js`,并写入以下内容: +```javascript +const path = require('path') +const website = require('@mpxjs/vuese-website').default + +website({ + srcDirPath: path.resolve(__dirname, '组件库src目录下的components目录'), + exampleDirPath: path.resolve(__dirname, './pages'), + outputPath: path.resolve(__dirname, './docs/components'), + doscPath: path.resolve(__dirname, './docs'), +}) + +``` + +其中`组件库src目录下的components目录`结构如下所示: +```plaintext +src/components +├── button +| ├── index.mpx +| ├── index.ts +└── button-group + ├── index.mpx + └── index.ts +``` +`exampleDirPath`中的`pages`目录结构如下所示: +```plaintext +example/pages +├── button +| ├── README.md +| ├── btn-bolder.mpx +| ├── btn-choose-avatar.mpx +| ├── btn-contact.mpx +| ├── btn-disabled.mpx +| ├── btn-follow-lifestyle.mpx +| ├── btn-get-phone-number.mpx +| ├── btn-get-user-info.mpx +| ├── btn-icon.mpx +| ├── btn-inline-icon.mpx +| ├── btn-inline-outline.mpx +| ├── btn-inline-primary.mpx +| ├── btn-inline.mpx +| ├── btn-launch-app.mpx +| ├── btn-light-active.mpx +| ├── btn-light-disabled.mpx +| ├── btn-light.mpx +| ├── btn-loading.mpx +| ├── btn-open-setting.mpx +| ├── btn-outline-active.mpx +| ├── btn-outline-disabled.mpx +| ├── btn-outline-loading.mpx +| ├── btn-outline-primary-active.mpx +| ├── btn-outline-primary-disabled.mpx +| ├── btn-outline-primary.mpx +| ├── btn-outline.mpx +| ├── btn-primary-active.mpx +| ├── btn-primary-disabled.mpx +| ├── btn-primary.mpx +| ├── btn-secondary-active.mpx +| ├── btn-secondary.mpx +| ├── btn-share.mpx +| ├── btn-with-tip.mpx +| └── index.mpx +├── button-group +| ├── README.md +| ├── button-group-one.mpx +| ├── button-group-two.mpx +| ├── button-group-vertical-two.mpx +| ├── button-group-with-context.mpx +| └── index.mpx +├── index.mpx +└── index.ts +``` + +### 文档生成 + +文档由[vitepress](https://vitepress.dev/zh/guide/what-is-vitepress)驱动,需要在`example`目录中安装对应的依赖: +```bash +npm install vitepress@^1.2.3 +``` + +然后在`example`目录下执行以下命令: + +```bash +vuese-website +``` +即可在项目根目录下生成基础的docs配置: +```plaintext +docs +├── .vitepress +| ├── config.mjs +| ├── sidebar +| | └── sidebar.js +| └── theme +| └── index.mjs +├── components +| ├── button-group.md +| └── button.md +├── guide +| └── intro.md +└── index.md +``` + +在`example`的`package.json`中添加一条命令: +```diff ++ "serve:doc": "node website.js" +``` + +然后在目录下执行以下命令即可构建文档。 + +```bash +npm run serve:doc +``` + +文档启动后,默认的访问路径为: +```bash +http://localhost:5173/mpx-ui/guide/intro.html +``` + +### 模拟器 + +模拟器的默认路由为`http://localhost:8090`,可以通过更改`docs/.vitepress/config.mjs`中的`iframeConfig`来配置预览路径: +```javascript +iframeConfig: { + path: { + dev: 'http://localhost:8090', + prod: '8090' + } +} +``` + +**注意:这里的端口要和你的`example`项目`vue.config.js`中配置的端口号一致** +```javascript +devServer: { + port: 8090 +} +``` + +检查无误后启动example项目即可完成文档中模拟器的展示。 + +### 父子路由同步 + +父子路由同步涉及到`iframe`通信,为此我们提供了以下方法来进行路由同步: +```javascript +declare module '@mpxjs/vuese-website/iframe-sync' { +/** + * 监听子路由的变化 + * @param callback + * @returns + */ +export const onPathchange: (callback?: (path: string) => void) => () => void; +/** + * 同步路由到子窗口 + * @param to + */ +export const syncPathToChild: (to: string) => void; +} +``` + +你需要在项目的`app.ts`中,监听主窗口路由的变化: +```typescript +import mpx, { createApp } from '@mpxjs/core' +import { onPathchange } from '@mpxjs/vuese-website/dist/iframe-sync' + +const isIframe = __mpx_mode__ === 'web' && window.parent !== window +if (isIframe) { + onPathchange((to) => { + mpx.redirectTo({ + // 这里需要适配你的项目路径 + url: `/pages/${to && to !== 'intro' ? `${to}/` : ''}index` + }) + }) +} +``` + +同时如果`example`中涉及到路由变化,也需要同步给主窗口: +```typescript +const isIframe = __mpx_mode__ === 'web' && window.parent !== window +if (isIframe) { + syncPathToChild(componentName) +} +``` + +### markdown扩展语法 +为了完成[文档示例一体化](https://www.mpxjs.cn/mpx-cube-ui/guide/intro.html#%E6%96%87%E6%A1%A3%E7%A4%BA%E4%BE%8B%E4%B8%80%E4%BD%93%E5%8C%96)的目标,我们制定了一些语法来提取模块儿源代码。 + +假设你的`example`目录有如下结构: +```plaintext +example/pages +├── button +| ├── README.md +| ├── btn-icon.mpx +| ├── btn-inline.mpx +| ├── btn-light.mpx +| ├── btn-loading.mpx +| ├── btn-outline.mpx +| ├── btn-primary.mpx +| ├── btn-secondary.mpx +| └── index.mpx +├── button-group +| ├── README.md +| ├── button-group-one.mpx +| ├── button-group-two.mpx +| ├── button-group-vertical-two.mpx +| ├── button-group-with-context.mpx +| └── index.mpx +├── index.mpx +└── index.ts +``` + +基本的替换语法如下: + +```markdown + +``` + + +#### 提取文件代码 +用于提取目标文件的所有代码 + +```markdown + +``` + +#### 提取`template`代码 +用于提取目标文件中的`template`代码 + +```markdown + +``` + +#### 提取`script`代码 +用于提取目标文件中的`script`代码 + +```markdown + +``` + +#### 提取`style`代码 +用于提取目标文件中的`style`代码 + +```markdown + +``` + +#### 代码成组 +用于把不同文件的代码提取到同一个代码块儿中 + +```markdown + + + + + + + +``` + +其中`no-wrap`会去掉代码块的包裹,如: + +```markdown + +``` + +渲染结果如下: + +```html +主要按钮 +``` + +而去掉`no-wrap`后,则会渲染如下代码: + +```html + +``` + +这样能够更好的将多个模块儿的代码组织到一起。 + + diff --git a/packages/website/template/docs/guide/intro.md b/packages/website/template/docs/guide/intro.md index 30d06b4..02889f1 100644 --- a/packages/website/template/docs/guide/intro.md +++ b/packages/website/template/docs/guide/intro.md @@ -1,2 +1,297 @@ # 介绍 -这里写点啥... \ No newline at end of file +本项目 fork 自 [vuese](https://vuese.github.io/website/zh/),用于 [mpx](https://www.mpxjs.cn/) 项目的文档定制化生成。(感谢 [vuese](https://vuese.github.io/website/zh/) 的相关开发者) + +## 快速上手 + + + +### 安装 + +```bash +npm install @mpxjs/vuese-website -g +``` + +### 项目配置 + +假设你所在的目录为基于组件库搭建的`example`目录,这个目录主要是为了演示组件库组件的用法,启动后的效果如右边模拟器所示。👉 + +在`example`目录下新建`website.js`,并写入以下内容: +```javascript +const path = require('path') +const website = require('@mpxjs/vuese-website').default + +website({ + srcDirPath: path.resolve(__dirname, '组件库src目录下的components目录'), + exampleDirPath: path.resolve(__dirname, './pages'), + outputPath: path.resolve(__dirname, './docs/components'), + doscPath: path.resolve(__dirname, './docs'), +}) + +``` + +其中`组件库src目录下的components目录`结构如下所示: +```plaintext +src/components +├── button +| ├── index.mpx +| ├── index.ts +└── button-group + ├── index.mpx + └── index.ts +``` +`exampleDirPath`中的`pages`目录结构如下所示: +```plaintext +example/pages +├── button +| ├── README.md +| ├── btn-bolder.mpx +| ├── btn-choose-avatar.mpx +| ├── btn-contact.mpx +| ├── btn-disabled.mpx +| ├── btn-follow-lifestyle.mpx +| ├── btn-get-phone-number.mpx +| ├── btn-get-user-info.mpx +| ├── btn-icon.mpx +| ├── btn-inline-icon.mpx +| ├── btn-inline-outline.mpx +| ├── btn-inline-primary.mpx +| ├── btn-inline.mpx +| ├── btn-launch-app.mpx +| ├── btn-light-active.mpx +| ├── btn-light-disabled.mpx +| ├── btn-light.mpx +| ├── btn-loading.mpx +| ├── btn-open-setting.mpx +| ├── btn-outline-active.mpx +| ├── btn-outline-disabled.mpx +| ├── btn-outline-loading.mpx +| ├── btn-outline-primary-active.mpx +| ├── btn-outline-primary-disabled.mpx +| ├── btn-outline-primary.mpx +| ├── btn-outline.mpx +| ├── btn-primary-active.mpx +| ├── btn-primary-disabled.mpx +| ├── btn-primary.mpx +| ├── btn-secondary-active.mpx +| ├── btn-secondary.mpx +| ├── btn-share.mpx +| ├── btn-with-tip.mpx +| └── index.mpx +├── button-group +| ├── README.md +| ├── button-group-one.mpx +| ├── button-group-two.mpx +| ├── button-group-vertical-two.mpx +| ├── button-group-with-context.mpx +| └── index.mpx +├── index.mpx +└── index.ts +``` + +### 文档生成 + +文档由[vitepress](https://vitepress.dev/zh/guide/what-is-vitepress)驱动,需要在`example`目录中安装对应的依赖: +```bash +npm install vitepress@^1.2.3 +``` + +然后在`example`目录下执行以下命令: + +```bash +vuese-website +``` +即可在项目根目录下生成基础的docs配置: +```plaintext +docs +├── .vitepress +| ├── config.mjs +| ├── sidebar +| | └── sidebar.js +| └── theme +| └── index.mjs +├── components +| ├── button-group.md +| └── button.md +├── guide +| └── intro.md +└── index.md +``` + +在`example`的`package.json`中添加一条命令: +```diff ++ "serve:doc": "node website.js" +``` + +然后在目录下执行以下命令即可构建文档。 + +```bash +npm run serve:doc +``` + +文档启动后,默认的访问路径为: +```bash +http://localhost:5173/mpx-ui/guide/intro.html +``` + +### 模拟器 + +模拟器的默认路由为`http://localhost:8090`,可以通过更改`docs/.vitepress/config.mjs`中的`iframeConfig`来配置预览路径: +```javascript +iframeConfig: { + path: { + dev: 'http://localhost:8090', + prod: '8090' + } +} +``` + +**注意:这里的端口要和你的`example`项目`vue.config.js`中配置的端口号一致** +```javascript +devServer: { + port: 8090 +} +``` + +检查无误后启动example项目即可完成文档中模拟器的展示。 + +### 父子路由同步 + +父子路由同步涉及到`iframe`通信,为此我们提供了以下方法来进行路由同步: +```javascript +declare module '@mpxjs/vuese-website/iframe-sync' { +/** + * 监听子路由的变化 + * @param callback + * @returns + */ +export const onPathchange: (callback?: (path: string) => void) => () => void; +/** + * 同步路由到子窗口 + * @param to + */ +export const syncPathToChild: (to: string) => void; +} +``` + +你需要在项目的`app.ts`中,监听主窗口路由的变化: +```typescript +import mpx, { createApp } from '@mpxjs/core' +import { onPathchange } from '@mpxjs/vuese-website/dist/iframe-sync' + +const isIframe = __mpx_mode__ === 'web' && window.parent !== window +if (isIframe) { + onPathchange((to) => { + mpx.redirectTo({ + // 这里需要适配你的项目路径 + url: `/pages/${to && to !== 'intro' ? `${to}/` : ''}index` + }) + }) +} +``` + +同时如果`example`中涉及到路由变化,也需要同步给主窗口: +```typescript +const isIframe = __mpx_mode__ === 'web' && window.parent !== window +if (isIframe) { + syncPathToChild(componentName) +} +``` + +### markdown扩展语法 +为了完成[文档示例一体化](https://www.mpxjs.cn/mpx-cube-ui/guide/intro.html#%E6%96%87%E6%A1%A3%E7%A4%BA%E4%BE%8B%E4%B8%80%E4%BD%93%E5%8C%96)的目标,我们制定了一些语法来提取模块儿源代码。 + +假设你的`example`目录有如下结构: +```plaintext +example/pages +├── button +| ├── README.md +| ├── btn-icon.mpx +| ├── btn-inline.mpx +| ├── btn-light.mpx +| ├── btn-loading.mpx +| ├── btn-outline.mpx +| ├── btn-primary.mpx +| ├── btn-secondary.mpx +| └── index.mpx +├── button-group +| ├── README.md +| ├── button-group-one.mpx +| ├── button-group-two.mpx +| ├── button-group-vertical-two.mpx +| ├── button-group-with-context.mpx +| └── index.mpx +├── index.mpx +└── index.ts +``` + +基本的替换语法如下: + +```markdown + +``` + + +#### 提取文件代码 +用于提取目标文件的所有代码 + +```markdown + +``` + +#### 提取`template`代码 +用于提取目标文件中的`template`代码 + +```markdown + +``` + +#### 提取`script`代码 +用于提取目标文件中的`script`代码 + +```markdown + +``` + +#### 提取`style`代码 +用于提取目标文件中的`style`代码 + +```markdown + +``` + +#### 代码成组 +用于把不同文件的代码提取到同一个代码块儿中 + +```markdown + + + + + + + +``` + +其中`no-wrap`会去掉代码块的包裹,如: + +```markdown + +``` + +渲染结果如下: + +```html +主要按钮 +``` + +而去掉`no-wrap`后,则会渲染如下代码: + +```html + +``` + +这样能够更好的将多个模块儿的代码组织到一起。 + +