千家信息网

vscode怎么实现脚手架插件

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容介绍了"vscode怎么实现脚手架插件"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!安装使用
千家信息网最后更新 2026年11月01日vscode怎么实现脚手架插件

本篇内容介绍了"vscode怎么实现脚手架插件"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

安装使用

vscode 安装 lowcode 插件,此插件是一个效率工具,脚手架只是其中一个功能

可以直接使用分享的脚手架,勾选选项后直接创建即可

制作脚手架

在模板项目根目录下创建 lowcode.scaffold.config.json 文件,将需要做内容动态替换的文件加上 .ejs 后缀。

配置

一个完整 lowcode.scaffold.config.json 配置:

{        "formSchema": {                "schema": {                        "type": "object",                        "ui:displayType": "row",                        "ui:showDescIcon": true,                        "properties": {                                "port": {                                        "title": "监听端口",                                        "type": "string",                                        "props": {},                                        "default": "3000"                                },                                "https": {                                        "title": "https",                                        "type": "boolean",                                        "ui:widget": "switch"                                },                                "lint": {                                        "title": "eslint + prettier",                                        "type": "boolean",                                        "ui:widget": "switch",                                        "default": true                                },                                "noREADME": {                                        "title": "移除README文件",                                        "type": "boolean",                                        "ui:widget": "switch",                                        "ui:width": "100%",                                        "ui:labelWidth": 0,                                        "ui:hidden": "{{rootValue.emptyREADME === true}}",                                        "default": false                                },                                "emptyREADME": {                                        "title": "空README文件",                                        "type": "boolean",                                        "ui:widget": "switch",                                        "ui:hidden": "{{rootValue.noREADME === true}}"                                }                        },                        "labelWidth": 120,                        "displayType": "row"                },                "formData": {                        "port": 3000,                        "https": false,                        "lint": true,                        "noREADME": false,                        "emptyREADME": false                }        },        "excludeCompile": ["codeTemplate/", "materials/"],        "conditionFiles": {                "noREADME": {                        "value": true,                        "exclude": ["README.md.ejs"]                },                "lint": {                        "value": false,                        "exclude": [".eslintrc.js", ".prettierrc.js"]                }        }}

formSchema:

formSchema.schema 为 x-render 表单设计器 导出的的 schema,会根据 schema 构建出表单界面,formSchema.formData 为表单默认数据

创建项目的时候会将表单数据传入 ejs 模板中进行编译。

excludeCompile:配置不需要经过 ejs 编译的文件夹或文件。

conditionFiles:根据表单项的值,在创建项目的时候将某些文件夹或文件删除,比如:

"conditionFiles": {        "noREADME": {                "value": true,                "exclude": ["README.md.ejs"]        },        "lint": {                "value": false,                "exclude": [".eslintrc.js", ".prettierrc.js"]        }}

当 lint 这个表单项的值为 false 的时候,配置的文件夹或文件 ".eslintrc.js",".prettierrc.js",将会在创建的项目中排除掉。

本地调试脚手架

发布脚手架

将脚手架提交到 git 仓库,注意开放项目的公开访问权限。

使用脚手架

直接使用 git 仓库地址

注意使用 clone 地址,支持指定分支,比如 -b master https://github.com/lowcode-scaffold/lowcode-mock.git,内部私有仓库也可以使用

分享到模板列表中快速创建

修改 仓库 中 index.json 内容,提交 pr。

实现原理

  • 打开 webview 的时候从 cdn 拉取记录了脚手架列表的 json 文件,渲染列表视图。

  • 点击某个脚手架,将脚手架的 git 仓库地址传到插件后台,插件后台根据 git 地址下载模版到临时工作目录,并且读取 lowcode.scaffold.config.json 文件中的 formSchema 返回给 webview。

export const downloadScaffoldFromGit = (remote: string) => {  fs.removeSync(tempDir.scaffold);  execa.sync('git', ['clone', ...remote.split(' '), tempDir.scaffold]);  fs.removeSync(path.join(tempDir.scaffold, '.git'));  if (    fs.existsSync(path.join(tempDir.scaffold, 'lowcode.scaffold.config.json'))  ) {    return fs.readJSONSync(      path.join(tempDir.scaffold, 'lowcode.scaffold.config.json'),    );  }  return {};};
  • webview 拿到 formSchema 后弹框渲染动态表单,点提交后将动态表单数据以及生成目录等信息传给插件后台。

  • 插件后台拿到表单数据后,到临时目录中根据 conditionFiles 配置删除掉不需要的文件。然后根据表单数据编译所有 ejs 文件,最后将所有文件拷贝到生成目录。

export const compileScaffold = async (model: any, createDir: string) => {  if (    fs.existsSync(path.join(tempDir.scaffold, 'lowcode.scaffold.config.json'))  ) {    const config = fs.readJSONSync(      path.join(tempDir.scaffold, 'lowcode.scaffold.config.json'),    );    const excludeCompile: string[] = config.excludeCompile || [];    if (config.conditionFiles) {      Object.keys(model).map((key) => {        if (          config.conditionFiles[key] &&          config.conditionFiles[key].value === model[key] &&          Array.isArray(config.conditionFiles[key].exclude)        ) {          config.conditionFiles[key].exclude.map((exclude: string) => {            fs.removeSync(path.join(tempDir.scaffold, exclude));          });        }      });    }    await renderEjsTemplates(model, tempDir.scaffold, excludeCompile);    fs.removeSync(path.join(tempDir.scaffold, 'lowcode.scaffold.config.json'));  }  fs.copySync(tempDir.scaffold, createDir);};

本地调试时,就是在步骤 2 中将选择的文件夹内容或者当前 vscode 打开的项目内容拷贝到临时工作目录。

"vscode怎么实现脚手架插件"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

文件 脚手架 插件 表单 内容 项目 仓库 数据 目录 配置 后台 地址 文件夹 时候 动态 模板 编译 单项 拷贝 更多 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技财经 盈实互联网科技 中国互联网科技发展 互联网科技上市公司 互联网科技公司有哪些 哈尔滨秒房互联网科技有限公司 互联网公司会议桌创意科技软装饰 广州慧亚互联网科技怎么样 互联网和黑科技的看法 知域互联网科技有限公司大骗子 杭州壁岐互联网科技有限公司 玉溪互联网科技怎么选 亳州好赞互联网科技有限公司 互联网科技人工智能实验室 工业互联网等科技实现智能化赋能 济南有互联网科技公司吗 科技互联网海报 九思连强互联网电子科技有限公司 容联科技互联网电商 伍佰万互联网科技是干嘛的 南京欣网互联网络科技有限公司 广州万易互联网科技有限公司 碳银互联网科技 郑州华宇互联网科技 衡水科技产业互联网平台 厦门比较好的科技互联网公司 昭通互联网科技选哪家 互联网行业科技股 领航科技大厦互联网公司 现代科技的标志之一的互联网
0