测试交投低代码平台控件开发
Go to file
gentianxing 459315d7bb first 2025-04-24 16:23:13 +08:00
.husky first commit 2025-04-23 11:13:02 +08:00
.storybook first 2025-04-24 16:23:13 +08:00
.vscode first commit 2025-04-23 11:13:02 +08:00
build/plugins first commit 2025-04-23 11:13:02 +08:00
examples first 2025-04-24 16:23:13 +08:00
public first 2025-04-24 16:23:13 +08:00
src first 2025-04-24 16:23:13 +08:00
stories first 2025-04-24 16:23:13 +08:00
types first commit 2025-04-23 11:13:02 +08:00
.browserslistrc first commit 2025-04-23 11:13:02 +08:00
.eslintignore first commit 2025-04-23 11:13:02 +08:00
.eslintrc.js first commit 2025-04-23 11:13:02 +08:00
.gitignore first commit 2025-04-23 11:13:02 +08:00
CHANGELOG.md first commit 2025-04-23 11:13:02 +08:00
README.md first commit 2025-04-23 11:13:02 +08:00
commitlint.config.js first commit 2025-04-23 11:13:02 +08:00
gcp-config.js first 2025-04-24 16:23:13 +08:00
package-lock.json first commit 2025-04-23 11:13:02 +08:00
package.json first 2025-04-24 16:23:13 +08:00

README.md

某组织团队Web端业务控件库服务

基于元子组件库公共控件库封装的控件库可输出Vue组件、JS模块、工具函数等。

目录结构

某组织团队Web端业务控件库
├─ .storybook storybook配置目录
│  ├─ main.js storybook 主配置
│  ├─ preview-head.html 自定义预览页面<head></head>
│  └─ preview.js 预览页面配置文件
├─ gcp-config.js GCP-CLI配置文件 类似 vue.config.js
├─ package.json 
├─ examples 示例目录
│  └─ gcp-meta-json.ts 控件库元数据配置示例
├─ public 公共资源目录,部署时会把目录下所有文件原样放到根目录
│  └─ gcp-meta.json 打包后,提供给界面设计器使用的配置文件
├─ src
│  ├─ assets  存放字体图标、图片 等
│  ├─ index.js 启动入口
│  ├─ utils 存放一些工具函数
│  └─ widgets 需要exposes的控件
│     ├─ action 操作按钮类控件,也包含按钮发起弹窗类
│     │  └─ RefreshAction.vue
│     ├─ form 表单类控件; 如editor, formTable等
│     ├─ layout 布局类控件
│     ├─ view 视图类控件,一般为路由页面根组件 
│     ├─ normal-vue 普通Vue类控件
│     │  └─ CompositionApiSample.vue
│     └─ others 除以上类型之外的统一归为others
├─ stories storybook 组件文档及用例
│   └─ action
│     └─ RefreshAction.stories.js
└─ types TS声明文件目录
    └─ widgetLibTypes.d.ts 控件库元数据Schema定义

开发流程

一、修改默认配置

脚手架中有些配置的关键词需要手动修改包名、库名、publicPath、元数据等。

1. 脚手架配置修改

根目录下gcp-config.js中的包名、库名、publicPath需要修改cdnBaseUrl、框架版本号选择性修改。

// ...
// 根据“工作空间+业务领域+Widgets+目标终端”对库名进行修改,全局唯一
const name = 'WorkspaceBusinessWidgetsWeb'
// 需要部署的静态服务域名推荐使用CDN以达到最佳性能与体验
const cdnBaseUrl = 'https://cdn.developer.glodon.com'
// ...
module.exports = defineConfig(({ mode, env }) => {
  // ...
  // 根据工作空间、业务领域配置静态资源路径
  const publicPath = `${host}/workspace/business-widgets-web/${libVersion}/`

  return {
      // ...
      remotes: {
        // 开发框架引用;使用框架最新稳定版本
        '@gcbp/web-framework': `promise GcpCliAsyncRemotesConfig.getByName('GCPWebFramework')`
      },
      shareLib: {
        // Vue版本不可修改
        vue: 'Vue@https://cdn.staticfile.org/vue/2.6.14/vue.min.js',
        // Vuex版本不可修改
        vuex: 'Vuex@https://cdn.staticfile.org/vuex/3.6.2/vuex.min.js',
        // 基础组件库引用默认使用latest最新版可修改为固定版本更加稳定
        '@geip/basic-components': [
          `GCPDesignPro@${cdnBaseUrl}/gcp/gcp-design-pro/latest/index.js`,
          `${cdnBaseUrl}/gcp/gcp-design-pro/latest/theme-default/index.css`
        ]
      }
    }
  }
})

2. 修改package.json包配置

根目录下package.json中包名需要修改,可根据“工作空间+业务领域+Widgets+目标终端”命名,保证全局唯一

{
  "name": "@workspace/business-widgets-web", // 控件库包名
  "description": "某组织团队Web端业务控件库描述", // 描述控件库的用途、适用范围等。
  // ... 
  "devDependencies": {
    // ...
    // 按需安装依赖
  },
  "dependencies": {
    // ...
    // 按需安装依赖
  }
}

3. 修改控件库元数据配置

元数据文件./public/gcp-meta.json默认配置需要修改。

{
  "name": "WorkspaceBusinessWidgetsWeb", // 库名要求与gcp-config.js中库名保持一致
  "packageName": "@workspace/business-widgets-web", // 包名要求与package.js中包名保持一致
  "description": "某组织团队Web端业务控件库描述", // 可与package.js中的描述一致
  "widgets": {
    "action": [],
    "layout": [],
    "form": [],
    "normalVue": [],
    "others": []
  }
}

二、编写Vue控件

编写Vue控件需要对平台控件库、开发框架有一定了解否则请先进入文档学习元子组件库公共控件库

1. 安装依赖

如果要编写的控件需要依赖第三方的库实现,可以预先安装好备用,如:

npm install lodash

2. 控件源码编写

基于平台提供的元子组件库公共控件库 进行Vue组件的开发

可参考控件示例GcdpOpenModalAction

更多详细使用可参考前端开发框架文档

3. 增加控件输出

在控件库配置gcp-config.js中增加控件输出,如:

// ...
module.exports = defineConfig(({ mode, env }) => {
  // ...
  return {
      // ...
      exposes: {
        // 导出 SampleAction 控件
        './action/SampleAction': './src/widgets/action/SampleAction.vue'
      },
      // ...
    }
  }
})

4. 删除示例控件及输出配置

开发完一个控件后删除脚手架中的示例控件,以免产生不必要的空间占用、下载流量,进而影响性能(虽然影响不大);

  • 删除控件./src/widgets/action/RefreshAction.vue,./src/widgets/normal-vue/CompositionApiSample.vue
  • gcp-config.js中删除输出配置:
    // ...
    module.exports = defineConfig(({ mode, env }) => {
      // ...
      return {
          // ...
          exposes: {
            // ...
            // 删除以下控件输出
            './action/GcdpOpenModalAction': './src/widgets/action/GcdpOpenModalAction.vue',
            './normal-vue/CompositionApiSample': './src/widgets/normal-vue/CompositionApiSample.vue'
          },
          // ...
        }
      }
    })
    

三、编写控件元数据

编写控件元数据是为了提供开发平台界面设计器在控件库面板中正常展示控件,以及属性面板中正常展示其属性。

具体如何编写请查阅控件库元数据编写规范

另外可参考元数据配置示例

四、开发调试

1. 安装依赖

安装控件库的npm依赖包

npm install

如果未进行Git初始的新项目需要先执行git init再进行依赖的安装否则Git hooks会报错

2. 启动storybook文档

启动storybook文档后可在浏览器里实时进行控件预览、文档预览、开发调试等。

npm run storybook

启动后会在浏览器自动打开 http://localhost:6008

五、构建部署

可通过Jenkins或其它CICD工具按以下步骤进行配置保证部署到一个可访问的静态服务地址。

1. 版本升级

如果代码有变动,强烈建议升级版本号,避免对上个版本产生影响

npm version patch # patch/minor/major/prepatch/preminor/premajor/prerelease/from-git

根据修改内容,选择如下指令更新版本号:
patch: 一般只修复了Bugminor: 增加了功能major: 核心变更,重构等
执行此命令后同时生成CHANGELOG并push到Git远程仓库

2. 构建打包

执行以下命令将控件库打包,以备部署使用 npm run build

3. 部署到服务器

将打包输出目录./dist下的静态文件部署到一个静态文件服务器OSS 推荐采用静态文件服务 + CDN的部署方案提供一个CDN控件库资源URL以达到最佳的性能与体验

六、控件库注册

1. 资源库继承体系

资源库包括:控件库、图标库 开发平台为资源库提供了三层注册途径,继承关系如下:

租户 ——> 组件 ——> 模板

对象管理下的页面设计器,是从模板开始依次向上查找资源库,将匹配到的所有控件库在控件库面板中展示;

2. 控件库注册

开发者可根据实际情况选择在哪一层进行注册,详细操作步骤请查阅资源库注册说明文档 注册完成后,即可在开发平台的页面设计器中使用了。

翻译平台多语言配置

// package.json

    "scripts": {
      "write:i18n": "i18n-tool write gcp-cli-seed-plugins-web 1*****************", // gcp-cli-seed-plugins-web 需要查找翻译文件的目录,此项目定义为根文件目录
      "publish:i18n": "i18n-tool publish gcp-cli-seed-plugins-web 1*****************" // 1***************** 翻译网站分组的id
    }

write 将翻译网站的内容写入到locales文件中 publish 将locales文件夹下的所有需要翻译的多语言占位符推送到翻译网站