ARTICLE DETAIL

资讯详情

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

Docs 如何构建不含 GPL 组件的 MIT 合规前端镜像(PUBLISH_AS_MIT)

Docs 如何构建不含 GPL 组件的 MIT 合规前端镜像(PUBLISH_AS_MIT) Docs 如何构建不含 GPL 组件的 MIT 合规前端镜像PUBLISH_AS_MIT【免费下载链接】docsDocs is an open-source text editor: web-native, made for real-time collaboration, cleanly structured documents and sub-documents with full ownership of your data. Built to scale with Django and React.项目地址: https://gitcode.com/GitHub_Trending/docs150/docsDocs 主项目以 MIT 许可发布见 LICENSE 中 License 一节的说明但部分高级功能依赖 BlockNote 的 XL 系列包这些包是 GPL 许可、与 MIT 不兼容。如果你的分发形态要求整个产物保持 MIT 合规就需要在构建前端时用PUBLISH_AS_MIT把这几个包从产物中剔除。README.md的 Self-hosting 一节明确给出了这一做法PUBLISH_AS_MITtrueThis builds an image of Docs without non-MIT features.构建一个不含非 MIT 功能的 Docs 镜像。本文给出两条按文档可执行的构建路径Docker 构建镜像和 yarn 直接构建以及如何核对构建结果。PUBLISH_AS_MIT 会移除哪些包documentation/env.md 的 impress-frontend image 一节列出了与 MIT 许可不兼容的包xl-docx-exporterGPLxl-pdf-exporterGPLxl-multi-columnGPL。对应到产品功能就是 DOCX/PDF 导出和多栏布局README.md在警告框中举的例子正是 Export as PDF。PUBLISH_AS_MIT的默认值是trueenv.md 中该选项的默认值列即默认构建产物就是 MIT 合规的。需要注意官方 CI 构建发布镜像时是显式传了PUBLISH_AS_MITfalse的见 .github/workflows/ghcr.yml 和 .github/workflows/docker-publish.yml 中的build-args仓库自带的compose-e2e.yml与开发用compose.ymlfrontend-development服务同样传false。也就是说官方发布镜像和开发环境都是全功能版需要 MIT 合规产物时必须自己构建。路径一用 Docker 构建生产前端镜像PUBLISH_AS_MIT在 src/frontend/Dockerfile 的impress-builder阶段以ARG接收并转成 Next.js 的NEXT_PUBLIC_PUBLISH_AS_MIT环境变量后执行yarn buildARG PUBLISH_AS_MIT ENV NEXT_PUBLIC_PUBLISH_AS_MIT${PUBLISH_AS_MIT} RUN yarn build因此构建命令按 env.md 给出的形式在仓库根目录Dockerfile 的 COPY 路径./src/frontend/...都相对于仓库根Compose 文件也统一使用context: .执行docker build -f src/frontend/Dockerfile --target frontend-production --build-arg PUBLISH_AS_MITtrue docs-frontend:latest说明--target frontend-production是最终运行阶段nginxinc/nginx-unprivileged:alpine3.23把构建产物复制到/app并由 nginx 提供--build-arg只影响 builder 阶段的yarn build。env.md 中的官方示例命令写的是--build-arg PUBLISH_AS_MITfalse那是为了演示这个 build-arg 的用法要产出 MIT 合规镜像就传true与默认值一致。如果你要构建的是开发镜像target 换成impress-devcompose.yml中开发服务用的就是它且该服务固定传了PUBLISH_AS_MIT: false因为开发环境需要测试全部功能——env.md 也说明.env.development中该变量为false。路径二不用 Docker直接用 yarn 构建env.md 给出第二条路径构建前端应用时可以编辑 src/frontend/apps/impress/.env也可以用NEXT_PUBLIC_前缀的环境变量覆盖。生产构建用的.env中已经是NEXT_PUBLIC_PUBLISH_AS_MITtrue所以直接在仓库中执行生产构建即为 MIT 合规产物cd src/frontend/apps/impress NODE_ENVproduction yarn build如果你需要临时改成全功能版例如验证 GPL 功能行为按 env.md 的示例用环境变量覆盖cd src/frontend/apps/impress NODE_ENVproduction NEXT_PUBLIC_PUBLISH_AS_MITfalse yarn build.env.development与.env.test中该值均为false本地开发与测试默认全功能不需要改动。构建结果如何核对文档没有给出专门的检查命令但加载机制在前端源码里是明确的这些模块只有在NEXT_PUBLIC_PUBLISH_AS_MIT false时才会被打包进应用。以导出功能为例src/frontend/apps/impress/src/features/docs/doc-export/hooks/index.ts 的逻辑是let modulesExport undefined; if (process.env.NEXT_PUBLIC_PUBLISH_AS_MIT false) { modulesExport { ...useExportAGPL, }; }AI 模块doc-editor/components/AI/index.ts和多栏模块doc-editor/components/xl-multi-column/index.ts也是同样的条件加载。因此按文档描述的成功条件是PUBLISH_AS_MITtrue构建出的镜像/应用不含DOCX/PDF 导出、多栏布局以及这些 AI 入口——即 an image of Docs without non-MIT features。反过来功能界面上这些入口消失就是构建生效的表现而不是构建失败。边界与许可提醒如果你在生产环境使用PUBLISH_AS_MITfalse即保留 GPL 包的全功能镜像env.md 明确警告make sure you fulfill your BlockNote licensing or subscription obligations确保你履行 BlockNote 的许可或订阅义务。各文档对 XL 包的许可表述存在出入UPGRADE.md 3.3.0 条目写的是 licenced under AGPL-3.0而README.md与documentation/env.md写的是 GPL。两者指向的是同一组 XL 包具体许可文本以包自带的 LICENSE 为准env.md 中附了 BlockNote 仓库各包 LICENSE 的链接。本变量只作用于前端构建。Docs 的部署方式Kubernetes、Docker Compose、Scalingo 等见 documentation/installation/README.md选择哪种方式不影响上述构建参数的用法。【免费下载链接】docsDocs is an open-source text editor: web-native, made for real-time collaboration, cleanly structured documents and sub-documents with full ownership of your data. Built to scale with Django and React.项目地址: https://gitcode.com/GitHub_Trending/docs150/docs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表