首页 文章 精选 留言 我的

精选列表

搜索[虚幻引擎],共10000篇文章
优秀的个人博客,低调大师

AI助力快速引入外部组件到TinyEngine低代码引擎

本文由羽毛笔记作者观默原创。 背景:低代码时代的开发挑战 TinyEngine作为一款优秀的低代码平台,以其强大的功能和快速迭代能力赢得了众多开发者的青睐。它让开发者能够通过可视化界面快速构建应用,大大提升了开发效率。 然而,就像一座美丽的花园需要更多花卉品种来装点一样,TinyEngine也面临着组件生态的挑战:官方提供的组件虽然精心设计,但数量有限,难以满足企业级项目的多样化需求。更具挑战性的是,要将私有组件库接入TinyEngine,必须先为每个组件生成对应的schema文件——这就像为每朵花制作专属的标签卡片。 从痛点到机遇:AI时代的解决方案 最近,我们公司面临着将私有组件库接入TinyEngine的需求。如果采用传统的人工方式为每个组件编写schema文件,不仅耗时费力,更重要的是缺乏那种让人兴奋的技术创新感。想象一下,如果有几十个组件需要处理,那将是一个令人望而却步的重复性工作。 这让我开始思考:在AI技术日新月异的今天,是否有更优雅的解决方案? 传统方案 VS AI方案 在AI时代之前,我可能会选择**Babel + AST(抽象语法树)**的技术路线: 解析Vue组件源码 遍历AST节点 提取props、events、slots信息 手工编写转换逻辑 这种方法虽然可行,但就像用显微镜逐个检查细胞一样繁琐。而现在,我们有了更强大的工具——AI大语言模型。 经过反复调试和优化,我成功开发出了一套与Claude Sonnet 4模型完美配合的Prompt,能够自动化生成高质量的组件schema文件。这就像拥有了一位经验丰富的架构师助手,能够理解组件的每一个细节并生成标准化的配置文件。 schema 生成 Prompt: > 注意:group/category/npm 这三个字段请根据实际情况调整,不要照抄! # 任务:Vue 组件 Schema 生成器 你是一位精通 Vue 3 Composition API、TypeScript 及低代码平台组件集成的资深架构师。你的任务是接收一个 Vue 组件的源代码及相关项目文件,然后生成一个完全符合指定规则、高度精确且信息丰富的 JSON Schema 文件,用于驱动低代码平台。 你的输出必须是一个**完整的、格式正确的 JSON 对象**,不包含任何额外的解释性文字。 --- ### 前置检查:验证输入信息 在开始生成 Schema 之前,你必须首先验证是否已收到所有必需的信息。 **以下项目是必需的:** 1. **`组件源代码`**: 目标 `.vue` 文件的完整内容。 2. **`package.json`**: 项目的 `package.json` 文件完整内容。 **可选的组件元数据**: * `中文名称 (zh_CN)`: 如果未提供,从组件的 `defineComponent({ name: '...' })` 中提取 `name` 值。 * `图标 (icon)`: 如果未提供,从组件的 `defineComponent({ name: '...' })` 中提取 `name` 值。 * `描述 (description)` * `标签 (tags)` * `关键词 (keywords)` * `文档链接 (doc_url)` **如果必需信息缺失,请不要继续。** 你的回应应该是一个清晰的请求,明确指出用户需要提供哪些缺失的具体内容。 只有在确认所有必需输入都已提供后,才能继续执行下面的生成步骤。 --- ### 第一步:分析输入 (假设已通过前置检查) 你将收到以下输入: 1. **`组件源代码`**: 一个完整的 Vue 组件 (`.vue`) 的文本内容。 2. **`package.json`**: 项目的 `package.json` 文件内容。 3. **`组件元数据` (可选)**: * `中文名称 (zh_CN)` * `图标 (icon)` * `描述 (description)` * `标签 (tags)` * `关键词 (keywords)` * `文档链接 (doc_url)` --- ### 第二步:执行生成规则 请严格按照以下规则,一步步构建最终的 JSON 对象: #### 1. **顶层字段填充** * `component`: 从组件的 `defineComponent({ name: '...' })` 中提取 `name` 值。 * **`name.zh_CN`**: - 如果 `组件元数据` 中提供了 `中文名称`,则使用该值 - 否则根据 `component` 名称进行智能推断和翻译: - `Button` -&gt; `"按钮"` - `LoginInfo` -&gt; `"登录信息"` - `SixAxisRobot` -&gt; `"六轴机械臂"` - `Chamber` -&gt; `"腔体"` - `Aligner` -&gt; `"对中器"` - `MainMenuButton` -&gt; `"主菜单按钮"` - `CdsState` -&gt; `"CDS状态"` - 其他名称按语义进行合理的中文翻译 * **`icon`**: - 如果 `组件元数据` 中提供了 `图标`,则使用该值 - 否则默认使用 `component` 名称(如 `"SixAxisRobot"` -&gt; `"SixAxisRobot"`) * **`group`**: 固定为 `"DCP"` * **`category`**: 固定为 `"DCP"` * `description`: 如果 `组件元数据` 中提供了 `description`,则使用该值;否则默认为 `""`。 * `tags`: 如果 `组件元数据` 中提供了 `tags`,则使用该值;否则默认为 `""`。 * `keywords`: 如果 `组件元数据` 中提供了 `keywords`,则使用该值;否则默认为 `""`。 * `doc_url`: 如果 `组件元数据` 中提供了 `doc_url`,则使用该值;否则默认为 `""`。 * `devMode`: 固定为 `"proCode"`。 #### 2. **`npm` 对象构建** 根据 `package.json` 的内容,动态构建 `npm` 对象: * `package`: 从 `package.json` 中读取 `name` 字段。 * `exportName`: **必须**与顶层 `component` 字段的值保持一致。 * `version`: 从 `package.json` 中读取 `version` 字段。 * `script`: 基于 `package.json` 的信息,拼接成固定格式:`"http://192.168.0.212:4874/{package}@{version}/js/web-component.mjs"`。 * `destructuring`: 固定为 `true`。 * `npmrc`: 1. 从 `package.json` 的 `name` 字段提取 scope (例如 `@dcp/component-library` -&gt; `@dcp`)。 2. 从 `package.json` 的 `publishConfig.registry` 字段提取 registry URL (并移除末尾的 `/`)。 3. 拼接成 `"{scope}:registry={registry_url}"` 的格式。 #### 3. **`configure` 对象构建** 生成完整的 `configure` 对象,包含以下所有字段: **基础行为控制**: * `loop`: 固定为 `true`(支持循环渲染) * `condition`: 固定为 `true`(支持条件渲染) * `styles`: 固定为 `true`(支持样式配置) **组件类型标识**: * `isContainer`: 根据组件分析决定: - 如果组件模板中包含 `<slot>` 标签,设置为 `true` - 如果组件名称暗示容器用途(如 Layout、Container、Wrapper),设置为 `true` - 否则设置为 `false` * `isModal`: 固定为 `false`(除非组件明确是模态框) * `isPopper`: 固定为 `false`(除非组件明确是弹出框) * `isNullNode`: 固定为 `false` * `isLayout`: 根据组件用途判断,Layout 类组件设置为 `true`,否则为 `false` **嵌套规则**: * `nestingRule`: 对象包含以下字段,通常设置为默认值: - `childWhitelist`: `""`(允许的子组件白名单,通常为空) - `parentWhitelist`: `""`(允许的父组件白名单,通常为空) - `descendantBlacklist`: `""`(禁止的后代组件黑名单,通常为空) - `ancestorWhitelist`: `""`(允许的祖先组件白名单,通常为空) **编辑器配置**: * `rootSelector`: 固定为 `""` * `shortcuts.properties`: 识别出组件最核心、最常用的 1-3 个 props,填入此数组 * `contextMenu`: 对象包含: - `actions`: 默认为 `["copy", "remove", "insert", "updateAttr", "bindEevent"]` - `disable`: 默认为 `[]` **交互行为** (可选字段,根据组件类型添加): * `clickCapture`: 对于按钮类、交互类组件设置为 `true`,其他组件可省略或设置为 `false` * `framework`: 如果是第三方组件库保持原值,自定义组件设置为 `"Vue"` #### 4. **`schema.properties` (Props 分组映射)** 将 Vue 组件的所有 props 按逻辑功能分组,生成一个**分组数组**: **分组策略**: * **基础属性**: 核心功能相关的 props(如 name、size、type 等) * **样式属性**: 外观、颜色、尺寸相关的 props(如 width、height、backgroundColor、color 等) * **行为属性**: 交互、事件、状态相关的 props(如 disabled、loading、onClick 等) * **高级属性**: 可选的、专业配置项(如复杂对象配置、高级选项等) **每个分组对象必须包含**: * `name`: 分组标识符,使用数字字符串(如 `"0"`, `"1"`, `"2"`) * `label.zh_CN`: 分组的中文显示名称(如 `"基础属性"`, `"样式属性"`) * `description.zh_CN`: 分组的中文描述 * `content`: 该分组下的具体属性配置数组 **`content` 数组中的每个属性对象必须包含以下固定字段**: * `property`: Prop 的名称 * `label.text.zh_CN`: 中文标签 * `description`: 中文描述 * `required`: 根据 Vue Prop 中的 `required` 字段决定,默认为 `false` * `readOnly`: 固定为 `false` * `disabled`: **固定为 `false`** * `cols`: **固定为 `12`** * `labelPosition`: 固定为 `"left"` * `type`: Vue 类型转换为小写字符串 * `defaultValue`: Vue Prop 的默认值 * `widget`: 根据以下规则推断 **Widget 推断规则 (按优先级顺序)**: 1. **validator 函数解析 (最高优先级)**: - 如果 Prop 定义中存在 `validator` 函数,解析函数体中的选项数组 - 设置 `widget.component` 为 `"SelectConfigurator"` - 设置 `widget.props.options` 为解析出的选项数组 2. **属性名称模式匹配**: - 名称包含 `color` 或默认值以 `#` 开头 -&gt; `"ColorConfigurator"`,props: `{}` - 名称包含 `icon` -&gt; `"InputConfigurator"`,props: `{ "placeholder": "请输入图标名称" }` 3. **Vue 类型 + 语义推断**: - `Boolean` 类型: - 开关语义 (show*, enable*, is*) -&gt; `"SwitchConfigurator"`,props: `{}` - 选项语义 (disabled, loading, plain, round, circle) -&gt; `"CheckBoxConfigurator"`,props: `{}` - `Number` 类型 -&gt; `"NumberConfigurator"`,根据属性名称设置 props: - 尺寸类 (width, height, size): `{ "min": 50, "max": 2000, "step": 10 }` - 角度类 (rotate, angle): `{ "min": 0, "max": 360, "step": 1 }` - 比例类 (scale): `{ "min": 0.1, "max": 5, "step": 0.1 }` - 时间类 (duration, delay): `{ "min": 0, "max": 50, "step": 0.1 }` - 默认: `{ "step": 1 }` - `String` 类型 -&gt; `"InputConfigurator"`,props: `{ "placeholder": "请输入..." }` - `Object`/`Array` 类型 -&gt; `"CodeConfigurator"`,props: `{ "language": "json", "height": 150 }` 4. **智能类型分析**: - 如果 Prop 类型为 `Array as PropType<someinterface[]>`,在 `description` 中补充接口结构信息 #### 5. **`schema.events` (事件映射)** * 在组件 `<script>` 中搜索所有 `emit('event-name', ...)` 的调用。 * 每一个 `event-name` (kebab-case) 都对应 `events` 对象中的一个键。 * 该键的命名规则为 **`'on' +` 将 `event-name` 转换为首字母大写的驼峰式 (CamelCase)**。例如,`emit('menu-item-click')` 映射为 `onMenuItemClick`。 * 分析 `emit` 的参数,为该事件生成 `functionInfo.params` 数组。 #### 6. **`schema.slots` (插槽分析)** * 扫描组件的 `<template>` 部分,寻找所有 `<slot>` 标签。 * 对于每一个**具名插槽** (例如 `<slot name="menu-items">`),在 `schema.slots` 对象中为其添加一个条目。 * 该条目的键为插槽名 (`menu-items`),值为一个包含 `label.zh_CN` 和 `description.zh_CN` 的对象,用于描述该插槽的用途。 #### 7. **`snippets` (智能代码片段生成)** * 生成一个只包含**单个默认 Snippet** 的数组 `[]`。 * `name.zh_CN`, `icon`, `snippetName` 与顶层字段保持一致。 * `schema.props`: * **优先策略**: 在工作区中查找与组件同名的 `.stories.ts` 文件。如果找到,请使用其 `args` 对象作为 `props` 的数据来源。 * **备用策略**: 如果找不到 Storybook 文件,请不要简单地使用 `defaultValue`。应根据每个 Prop 的语境,创建一组有意义、更具代表性的示例值(例如,`username` 使用 `'Admin'` 而不是 `'User'`)。 --- ### 第三步:输出最终 JSON 请整合以上所有分析结果,生成最终的 JSON 文件。 实战指南:从理论到实践 第一步:智能生成Schema 运用AI生成schema的过程就像与一位专业顾问的对话。让我们以Cursor编辑器为例,一步步地体验这个过程: 操作步骤: 打开组件项目:启动Cursor,进入你的Vue组件库项目 准备上下文材料:在聊天界面中添加以下关键文件: 项目根目录的package.json 目标组件的.vue源码文件 粘贴Prompt:将上文提供的完整Prompt复制到输入框 发起对话:按下回车键,等待AI的魔法发生 为什么选择Claude Sonnet 4? 经过测试对比,我发现Claude Sonnet 4在理解Vue组件结构和生成精准schema方面表现出色,像deepseek、qwen这些国内模型暂时无法: 精准的类型推断:能够正确识别Props的TypeScript类型并转换为对应的widget配置 智能的语义理解:根据属性名称自动推断合适的编辑器组件(颜色选择器、数字输入框等) 结构化输出:生成的JSON格式规范、完整,直接可用 实际效果展示 设想我们有一个名为CustomButton的Vue组件: <template> <button :class="buttonClass" :disabled="disabled" @click="handleClick" > <slot>{{ label }}</slot> </button> </template> <script setup lang="ts"> import { computed } from 'vue' interface Props { label?: string type?: 'primary' | 'secondary' | 'danger' size?: 'small' | 'medium' | 'large' disabled?: boolean loading?: boolean } const props = withDefaults(defineProps<Props>(), { label: '按钮', type: 'primary', size: 'medium', disabled: false, loading: false }) const emit = defineEmits<{ click: [event: MouseEvent] }>() const handleClick = (event: MouseEvent) => { if (!props.disabled && !props.loading) { emit('click', event) } } </script> 通过AI处理后,会生成一个包含以下关键信息的schema: Props分组:label、type、size被分类为“基础属性”,disabled、loading分类为“行为属性” 组件类型:type属性自动配置为下拉选择器,并包含正确的选项 事件映射:click事件被正确转换为onClick处理函数 第二步:添加物料 把上一步得到的json文件保存到TinyEngine项目根目录下的materials/components 文件夹下。 第三步:添加仓库 如果你没有添加过仓库配置,那么你需要在 项目根目录下的materials/packages.json 文件中添加你的仓库信息: { "name": "DCP组件库", "package": "@dcp/component-library", "version": "0.0.60", "script": "http://192.168.0.212:4874/@dcp/component-library@0.0.60/js/web-component.mjs", "destructuring": true, "npmrc": "@dcp:registry=http://192.168.0.212:4873" } 第四步:构建物料 现在你可以直接在终端执行pnpm buildMaterials ,等终端不再有新的输出时,可以ctrl + c 退出脚本。 一切就绪,启动项目验收 至此,你可以pnpm serve:frontend 后访问项目来使用新增的组件了。 问题排查指南 在实际开发过程中,即使按照上述步骤操作,也可能遇到组件未正常显示的情况,这里为您提供了系统化的排查方法。 关键检查点一:组件获取机制 首先检查TinyEngine的组件获取机制是否正常工作。在以下位置添加调试信息: 文件位置: packages/canvas/render/src/material-function/material-getter.ts#L109 export const getComponent = (name) =&gt; { // 添加调试信息 console.log(`正在获取组件: ${name}:${getNative(name)}`) const result = Mapper[name] || getNative(name) || getBlock(name) || (isHTMLTag(name) ? name : getBlockComponent(name)) console.log(`获取结果:`, result) return result } ℹ️ 排查要点:对于引入的组件,getNative(name)应该返回非空值。如果返回undefined,说明组件没有被正确注册。 关键检查点二:动态导入机制 如果上一步检查发现问题,接下来排查动态导入机制。在以下位置添加调试代码: 文件位置: packages/canvas/common/src/utils.ts#L100 const dynamicImportComponentLib = async ({ pkg, script }: DynamicImportParams): Promise<any> =&gt; { console.log(`开始导入组件库: ${pkg}`) if (window.TinyComponentLibs[pkg]) { console.log(`组件库已存在缓存中: ${pkg}`) return window.TinyComponentLibs[pkg] } if (!script) { console.warn(`组件库 ${pkg} 缺少 script 配置`) return {} } const href = window.parent.location.href || location.href const scriptUrl = script.startsWith('.') ? new URL(script, href).href : script console.log(`动态导入组件库脚本: ${scriptUrl}`) if (!window.TinyComponentLibs[pkg]) { try { const modules = await import(/* @vite-ignore */ scriptUrl) console.log(`组件库导入成功:`, modules) window.TinyComponentLibs[pkg] = modules } catch (error) { console.error(`组件库导入失败: ${pkg}`, error) return {} } } return window.TinyComponentLibs[pkg] } 常见问题及解决方案 📌 最常见问题:组件未正确导出 在我的实际经验中,这个问题出现频率最高。很多时候我们在组件库中开发了新组件,但忘记在入口文件中导出它。 ✅ 解决方案: 检查组件库的index.ts或index.js文件 确认目标组件已经被正确导出: export { default as YourComponent } from './YourComponent.vue' 📌 脚本路径错误 检查packages.json中的script字段是否正确。常见错误包括: 版本号不匹配 域名或端口错误 文件路径错误 通过以上系统化的排查步骤,绝大多数问题都能够得到快速解决。 如果您对AI开发感兴趣,欢迎关注我的公众号:观默视界 在这里,我会分享更多关于AI技术在实际开发中的实战经验和最新趋势。 关于OpenTiny 欢迎加入 OpenTiny 开源社区。添加微信小助手:opentiny-official 一起参与交流前端技术~ OpenTiny 官网:<https: opentiny.design> OpenTiny 代码仓库:<https: github.com opentiny> TinyVue 源码:<https: github.com opentiny tiny-vue> TinyEngine 源码: <https: github.com opentiny tiny-engine> 欢迎进入代码仓库 Star🌟TinyEngine、TinyVue、TinyNG、TinyCLI、TinyEditor~ 如果你也想要共建,可以进入代码仓库,找到 good first issue标签,一起参与开源贡献~</https:></https:></https:></https:></any></someinterface[]></slot>

优秀的个人博客,低调大师

🚀 erupt 1.12.21 高效低代码引擎,现已深度接入 AI

Erupt 低代码 + AI 全开源 Erupt 一个通用低代码框架,使用 Java 注解驱动,动态渲染构建页面与API。 零前端代码、零 CURD、自动建表,仅需 一个类文件 + 注解配置,快速开发企业级数据管理后台。 高扩展性,支持CURD自由扩展 @DataProxy 、自定义数据源、逻辑删除、LDAP、OSS。 本次更新内容 🐞 修复erupt-ai通义千问无法响应的 bug 🐞 修复erupt-ai带有上下文路径时404的问题 🐞 修复erupt-ai创建会话时内容太多会超过数据库长度的问题 🐞 修复erupt-ai智能体提示词动态处理器不可用的问题 🐞 修复代码生成功能无法正常显示的 bug 🐞 解决lambdaQuery listSelects中存在父类字段无无法提取的 bug 🐞 修复tableWidth配置px等单位无效的bug(注意:升级后需手动添加px单位) 🐞 修复Excel导入时ISO 8601规范的日期格式和数据库的TIMESTAMP格式导致异常#308,感谢hply 贡献的代码 🧩 erupt-ai优化大模型调用参数,提升模型效果与回复稳定性 🧩 erupt-tenant角色页面支持绑定用户 🧩 app.js支持logoFoldPath配置,用于展示折叠菜单后的图标 🧩 LambdaQuery 新增 distinct 方法,用于数据库维度的去重 🧩 数据库异常信息页面可视化,兼容 PG、Oracle、Sql Server 🧩 自定义按钮折叠时支持显示图标 🧩 主题切换区域支持拖动调整位置 🌟 左侧菜单折叠后支持配置折叠后的图标(app.js增加logoFoldPath配置) 🌟 自定义按钮支持显示纯文本而不是图标(仅需配置icon=""即可) 🌟 表格操作区支持自定义宽度(@layout注解增加tableOperatorWidth配置) 🌟 页面上方的全局自定义按钮支持自定义内容显示(r_tools 增加 render配置) 🌟 页面上方用户工具栏,支持自定义按钮(app.js增加userTools配置) 项目官网:www.erupt.xyz @Erupt( name = "简单的例子", power = @Power(importable = true, export = true) ) @Table(name = "t_simple") //数据库表名 @Entity public class Simple extends BaseModel { @EruptField( views = @View(title = "文本"), edit = @Edit(title = "文本", notNull = true, search = @Search) ) private String input; @EruptField( views = @View(title = "数值", sortable = true), edit = @Edit(title = "数值", search = @Search) ) private Float number; @EruptField( views = @View(title = "布尔"), edit = @Edit(title = "布尔", search = @Search) ) private Boolean bool; @EruptField( views = @View(title = "时间"), edit = @Edit(title = "时间", search = @Search(vague = true)) ) private Date date; @EruptField( views = @View(title = "滑动条"), edit = @Edit(title = "滑动条", type = EditType.SLIDER, search = @Search, sliderType = @SliderType(max = 90, markPoints = {0, 30, 60, 90}, dots = true)) ) private Integer slide; @EruptField( views = @View(title = "下拉选择"), edit = @Edit( search = @Search, title = "下拉选择", type = EditType.CHOICE, choiceType = @ChoiceType(fetchHandler = SqlChoiceFetchHandler.class, fetchHandlerParams = "select id,name from e_upms_menu" ) ) ) private Long choice; } 特性 | Features 透明的底层机制与高度可配置性: 注解驱动,配置灵活:通过@Erupt、@EruptField及其丰富的属性,开发者可以精细控制模型的行为、UI 的展现、数据的校验与处理方式。 开放的架构:Erupt 的核心模块设计清晰,鼓励开发者理解其工作原理,并在需要时进行针对性调整。 详细的日志与调试支持:方便开发者追踪问题,理解框架内部执行流程。 超越传统代码生成器的开发体验: 动态解释而非静态生成:Erupt 通过运行时解析注解来动态构建应用,避免了传统代码生成器因代码冗余、难以维护、合并困难等问题带来的困扰。修改注解即可实时生效,无需重新生成大量代码。 关注模型而非实现:开发者只需关注业务模型的定义与注解配置,Erupt 会自动处理大部分底层的 UI 渲染、数据绑定、API 调用,数据库交互等工作。 深度定制与扩展能力: 生命周期钩子:在 Erupt 核心流程的多个关键节点提供了钩子函数,方便开发者进行功能增强或行为调整。 @DataProxy接口**:允许开发者在数据操作的各个阶段(如新增前、编辑后、查询时)注入自定义逻辑,实现复杂的业务校验、数据转换、权限控制等。 自定义组件与视图:除了丰富的内置组件,Erupt 支持开发者创建和集成自定义的前端组件和视图模板,满足高度个性化的界面需求。 自定义数据源与方言:轻松扩展对特定数据库或数据存储的支持,甚至可以实现自定义的 SQL 方言适配。 拥抱 Spring Boot 生态,无缝集成: 非侵入式设计:Erupt 构建于 Spring Boot 之上,与 Spring Data JPA 深度集成,但不干涉开发者使用 Spring Boot 的其他功能或引入第三方库。 标准 JPA 实体:Erupt 实体类本身就是标准的 JPA 实体,可以被项目中的其他服务或模块复用。 易于整合现有项目:可以将 Erupt Cloud 渐进式地引入到已有的 Spring Boot 项目中,逐步替换或增强后台管理模块。 在线体验 | Demo 演示地址:https://www.erupt.xyz/demo 账号密码:guest / guest 支持主流 4 款现代浏览器,以及 Internet Explorer 11+,可直接运行在 Electron 等基于 Web 标准的环境上 演示截图 | Screenshot⛰

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册