十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

GrapesJS CLI 使用指南:从零搭建生产级插件开发工作流

GrapesJS CLI 使用指南:从零搭建生产级插件开发工作流 GrapesJS CLI 使用指南从零搭建生产级插件开发工作流【免费下载链接】grapesjsFree and Open source Web Builder Framework. Next generation tool for building templates without coding项目地址: https://gitcode.com/GitHub_Trending/gr/grapesjs本指南基于仓库 packages/cli/README.md 展开系统讲解 GrapesJS 官方命令行工具grapesjs-cli的核心能力快速脚手架初始化、开发服务器、生产构建与 webpack 深度定制。读完本文你将掌握从空目录到发布一个完整 GrapesJS 插件的全流程并能通过参数与配置文件精确控制每一步的构建行为。一、grapesjs-cli 是什么GrapesJS 是一个免费开源的 Web Builder 框架用于无需编码地构建模板。当开发者需要为它编写自定义组件、块Block或国际化资源时往往要手动搭建 Babel、Webpack、开发服务器等一整套工程设施这既繁琐又容易出错。grapesjs-cli正是为了解决这一痛点而生的官方 CLI 库。根据 packages/cli/README.md 的定位说明它的目标是把插件开发过程中必要的步骤集中化、加速化让开发者无需接触 Babel 与 Webpack 配置就能开始编码其核心优势为快速项目脚手架一条命令生成规范的插件工程结构零配置开发与构建内置 Babel / Webpack 全链路无需手写配置按需定制提供 CLI 参数与webpack.config.js钩子支持深度扩展。从源码看该包通过 packages/cli/package.json 中的bin字段暴露grapesjs-cli可执行命令指向dist/cli.js依赖webpack、webpack-dev-server、babel/core、inquirer、yargs等成熟工具链命令入口与参数解析逻辑集中在 packages/cli/src/cli.ts。二、插件从 0 到 100完整实战流程1. 初始化项目骨架首先为插件创建独立目录并完成 Git 与 npm 的初步初始化mkdir grapesjs-my-plugin cd grapesjs-my-plugin npm init -y git init然后将grapesjs-cli安装为开发依赖npm i -D grapesjs-cli2. 使用 init 命令生成插件模板在项目根目录执行交互式初始化npx grapesjs-cli init命令会通过交互式提问收集项目信息。如果想跳过全部提问可使用-y选项也可以直接用选项传参完整选项列表可通过npx grapesjs-cli init --help查看npx grapesjs-cli init -y --userYOUR-GITHUB-USERNAME从 packages/cli/src/init.ts 的源码实现可以看到init支持的全部参数及含义如下参数别名类型默认值说明--yes-ybooleanfalse使用全部默认答案跳过提问--name—string目录名项目名称会由目录名自动推导为可读名称--rName—string目录名仓库名同时用作插件名--user—stringYOUR-USERNAME仓库用户名如 GitHub/Bitbucket--components—booleantrue是否包含自定义组件类型 API--blocks—booleantrue是否包含块BlocksAPI--i18n—booleantrue是否搭建国际化i18n结构--license—stringMIT项目许可证--verbose-vbooleanfalse输出详细日志初始化过程通过 listr 任务队列分步执行对应 packages/cli/src/init.ts先创建基础源码文件再按选项创建src/components.js、src/blocks.js、src/locale/en.js最后更新package.json并生成README.md、LICENSE许可证文本取自spdx-license-list并将年份替换为当前年份-current、.gitignore、.npmignore与tsconfig.json等配套文件。值得注意的是模板中的package.json见 packages/cli/src/template/package.json已经预置了三个常用脚本初始化后即可直接使用{ scripts: { start: grapesjs-cli serve, build: grapesjs-cli build, bump: npm version patch -m Bump v%s } }3. 认识模板生成的插件入口脚手架会在项目内生成src目录及若干文件其中src/index.js是插件的入口文件对应模板 packages/cli/src/template/src/index.js其结构根据初始化时勾选的components、blocks、i18n选项动态生成。勾选全部选项时模板大致如下import loadComponents from ./components; import loadBlocks from ./blocks; import en from ./locale/en; export default (editor, opts {}) { const options { ...{ i18n: {}, // default options }, ...opts }; // Add components loadComponents(editor, options); // Add blocks loadBlocks(editor, options); // Load i18n files editor.I18n editor.I18n.addMessages({ en, ...options.i18n, }); // TODO Remove editor.on(load, () editor.addComponents( div stylemargin:100px; padding:25px; Content loaded from the plugin /div, { at: 0 } )) };这段模板是插件开发的标准范式导出默认函数接收editor与可合并的opts配置对象通过editor.DomComponents、editor.BlockManager、editor.I18n等 API 注册组件、块与多语言消息。其中加载示例内容的editor.on(load, ...)段落带TODO Remove注释正式开发时通常需要删除。配套的组件与块模板也一并生成packages/cli/src/template/src/components.js演示如何通过editor.DomComponents.addType(MY-COMPONENT, {...})注册自定义组件类型packages/cli/src/template/src/blocks.js演示如何通过editor.BlockManager.add(MY-BLOCK, {...})注册块且块的content直接引用MY-COMPONENT类型形成块-组件联动国际化文件位于src/locale/en.js构建时会自动编译并输出到locale目录详见后文 build 流程。4. 启动开发服务器插件骨架就绪后运行开发服务器并打开终端打印的地址默认 http://localhost:8080npx grapesjs-cli serve需要自定义端口时使用-p选项npx grapesjs-cli serve -p 8081serve命令底层使用webpack-dev-server其配置可通过 CLI 以 JSON 字符串透传例如启用 HTTPSnpx grapesjs-cli serve --devServer{https: true}从 packages/cli/src/serve.ts 的实现可以看到devServer 配置默认强制开启open: true启动后自动打开浏览器并支持--host默认localhost、--port默认8080以及--htmlWebpackhtml-webpack-plugin 选项等参数非 8080 端口或非 localhost 主机时才会覆盖对应字段。开发模式下 packages/cli/src/webpack.config.ts 会借助HtmlWebpackPlugin生成index.html页面模板优先取项目根的_index.html其次是index.html最后回退到 CLI 包内置模板并将inject设为head同时在templateParameters中注入gjsVersion: latest便于页面按最新版 GrapesJS 进行加载调试。5. 生产构建开发完成后执行构建生成可发布的生产文件压缩后的dist/index.jsnpx grapesjs-cli buildbuild的完整参数表如下定义于 packages/cli/src/cli.ts参数类型默认值说明--configstring{}webpack 配置对象JSON--babelstring{}Babel 配置对象JSON--targetsstring 0.25%, not deadbrowserslist 浏览器兼容目标--entrystringsrc/index库入口文件--outputstringdist构建输出目录--statsstring{}webpack Stats 实例选项--statsOutputstring输出 webpack stats 文件路径如stats.json--patchbooleantrue构建前自动递增 patch 版本号--localePathstringsrc/locale语言文件目录路径--dtsstringinclude是否生成 TypeScript 声明文件include/skip/only--verbose-vbooleanfalse输出详细构建日志build的底层流程见 packages/cli/src/build.ts分为几个阶段webpack 打包以--entry为入口、--output为输出目录执行生产模式构建locale 编译buildLocale将src/locale下的语言文件编译为 ESM 模块并输出到locale目录同时自动生成locale/index.js汇总导出文件方便使用者按需引入类型声明生成buildDeclaration通过dts-bundle-generator依据tsconfig.json从src/index.ts生成dist/index.d.ts若设置--dtsonly则只生成声明文件跳过打包--dtsskip则跳过声明文件。构建产物遵循 UMD 规范输出filename固定为index.jslibrary取项目package.json的name并设置globalObject兼容浏览器与 Node 环境见 packages/cli/src/webpack.config.ts。此外压缩环节使用TerserPlugin并刻意关闭evaluate压缩避免破坏 GrapesJS 脚本输出文件头部会附上/*! name - version */的 banner 注释。6. 完善 README 与发布前准备官方文档明确提醒见 packages/cli/README.md发布前务必完善 README.md写清插件提供的所有选项、组件、块等能力。为提升用户参与度建议使用 JSFiddle、CodeSandbox、CodePen 等在线服务制作简单 live demo 并链接到 README——初始化模板生成的 README 中已包含演示所需的 HTML/CSS/JS 片段可直接复制粘贴到上述服务使用。三、深度定制自定义 webpack 配置CLI 内置了一套完整的 webpack 配置但实际插件往往需要追加自定义 loader、插件或规则。此时只需在项目根目录创建webpack.config.js导出一个函数函数接收包含默认配置的对象并返回新的配置对象// YOUR-PROJECT-DIR/webpack.config.js // config is the default configuration export default ({ config }) { // This is how you can distinguish the build command from the serve const isBuild config.mode production; return { ...config, module: { rules: [ { /* extra rule */ }, ...config.module.rules, ], }, }; };该钩子函数的实际调用逻辑位于 packages/cli/src/webpack.config.tsCLI 会检测项目根目录是否存在webpack.config.js若存在则加载它兼容default导出当导出为函数时以{ config, webpack, pkg }作为参数调用——其中webpack是 webpack 实例pkg是项目package.json对象返回对象则覆盖默认配置否则保留默认配置。借助config.mode production判断即可区分build与serve两种场景实现差异化配置。四、通用 CLI 用法速查无论哪个子命令都遵循统一的 yargs 风格参数约定入口见 packages/cli/src/cli.ts# 列出全部可用命令 grapesjs-cli # 查看某个命令的可用选项 grapesjs-cli COMMAND --help # 执行命令并传参布尔值直接跟选项其余用 --OPTVALUE 形式 grapesjs-cli COMMAND --OPT1 --OPT2VALUE全局通用选项包括--verbose, -v开启详细日志serve/build 场景下会打印 Webpack 配置、devServer 配置、stats 配置等调试信息所有命令均支持--config、--babel、--targets、--entry、--output这组 webpack 公共参数serve与build中所有 JSON 字符串选项如--devServer、--config、--stats、--htmlWebpack都会经 packages/cli/src/utils.ts 的normalizeJsonOpt解析为对象后合并进对应配置解析失败会打印错误并回退为空对象。五、常见问题与注意事项init之后没有生成src/components.js/src/blocks.js检查初始化时是否勾选了--components/--blocks这两个文件仅在对应选项为true时才会复制对应 packages/cli/src/init.ts 的按需创建逻辑入口文件用 JS 还是 TS脚手架默认生成src/index.js但build的--dts功能要求存在src/index.ts才会生成类型声明webpack 规则已内置ts-loader支持.tsx?文件因此完全可以在src/index.ts中开发并获得.d.ts产物构建时希望保留版本号不递增使用npx grapesjs-cli build --patchfalse关闭自动 patch需要分析构建产物体积使用--statsOutputstats.json输出 webpack stats 文件配合官方可视化工具分析模块占比多语言插件如何发布保持src/locale目录结构build会自动将其编译到根级locale目录并生成index.js汇总导出用户可按需import对应语言。六、Licensegrapesjs-cli遵循 MIT 协议见 packages/cli/README.md。【免费下载链接】grapesjsFree and Open source Web Builder Framework. Next generation tool for building templates without coding项目地址: https://gitcode.com/GitHub_Trending/gr/grapesjs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表