news 2026/9/14 3:34:35

如何构建只包含所需 trace 类型的 plotly.js 自定义 bundle 以减小加载体积?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何构建只包含所需 trace 类型的 plotly.js 自定义 bundle 以减小加载体积?

如何构建只包含所需 trace 类型的 plotly.js 自定义 bundle 以减小加载体积?

【免费下载链接】plotly.jsOpen-source JavaScript charting library behind Plotly and Dash项目地址: https://gitcode.com/GitHub_Trending/pl/plotly.js

当官方发布的完整 bundle 或现成的 partial bundle 都不符合你的页面需求时,plotly.js 提供了npm run custom-bundle脚本,让你在本地构建只包含指定 trace 类型的 bundle 文件,从而减小加载体积。本文以当前仓库(plotly.js 4.0.0)为例,说明如何准备构建环境、指定 trace 列表、生成产物并确认构建结果。

准备 Node 环境并获取源码

自定义 bundle 的构建在 plotly.js 源码目录内进行,官方在 CUSTOM_BUNDLE.md 中给出的 Node/npm 版本要求为:

  • plotly.js 2.5 之前:Node 12 / npm 6
  • plotly.js 2.5 起:Node 16 / npm 8
  • plotly.js 2.35 起:Node 18 / npm 10
  • plotly.js 4.0 起:Node 22 / npm 10

package.json 中的engines字段也确认了"node": ">=22.0.0",当前仓库version4.0.0,因此 4.x 版本请使用 Node 22 / npm 10。

获取源码(<version>换成你要构建的发布版本号,仓库按 tag 发布):

git clone --branch <version> https://github.com/plotly/plotly.js.git

CI 场景下可以用git clone --depth 1只拉一个提交以加快速度。如果已经 clone 过,切换版本用:

git fetch git checkout <version>

然后进入目录安装依赖(npm i会安装 package.json 中声明的全部依赖):

cd plotly.js npm i

选择要包含的 trace 类型

先确定你的图表实际用到哪些 trace 类型。--traces参数只接受 src/traces/ 目录下的合法 trace 名(如scatterscatterglscatter3dbarheatmap等);如果传入非法名称,构建脚本会报错并打印出完整的合法列表,可据此修正:

<name> is not a valid trace! Valid traces are: [...]

两条必须知道的限制:

  1. 不带--traces时默认包含全部 trace,等同于完整 bundle;
  2. scattertrace 会被强制包含在所有 bundle 中且无法移除。官方建议即使如此也应显式写出scatter,因为该行为未来可能改变。

执行 custom-bundle 构建

最短主路径

进入 plotly.js 源码目录后,用--traces指定你要的类型(逗号分隔、不加空格):

npm run custom-bundle -- --traces scatter,scattergl,scatter3d

构建逻辑在 tasks/custom_bundle.mjs:脚本基于lib/index.js生成一个临时的 partial index(见 tasks/partial_bundle.mjs),用 esbuild 打包,产物输出到dist/目录。构建成功时脚本会打印本次使用的完整配置对象(trace 列表、输出文件名、dist 路径),构建失败会抛出错误。

可选参数

按 CUSTOM_BUNDLE.md 的说明:

  • --strict:尽可能使用 strict 版 trace 实现(strict 实现依赖 regl 生成的 GPU 代码)。注意--strict会生成lib/index-strict-<out>.js作为入口,而默认入口是lib/index-<out>.js

    npm run custom-bundle -- --traces scatter,scattergl --strict
  • --out <name>:修改 bundle 文件名,默认为custom。最终文件名为dist/plotly-<out>.min.js(压缩版)或dist/plotly-<out>.js(未压缩版):

    npm run custom-bundle -- --out myBundleName
  • --unminified:生成未压缩版本(对应文档中的“禁用压缩”):

    npm run custom-bundle -- --unminified

一个组合示例——创建名为myScatters的未压缩 bundle,包含scatterscatterglscatter3d

npm run custom-bundle -- --unminified --out myScatters --traces scatter,scattergl,scatter3d

一个实用技巧:如果你只想要某一类图(如金融图),可以参照 tasks/util/constants.js 中partialBundleTraces给出的官方 partial bundle 组合(如financegl3dcartesian)来挑选 trace 列表,而不是从零开始枚举。

验证构建结果

  1. 检查产物文件:构建完成后,dist/下应出现plotly-<out>.jsplotly-<out>.min.js,文件头部带有类似plotly.js v4.0.0 (myScatters - minified)的 license header(由 tasks/util/constants.js 的licenseDist生成)。
  2. 比对体积:将生成的plotly-<out>.min.js与完整的plotly.min.js(由npm run bundle产生)对比文件大小,确认体积确实减小。
  3. 确认 trace 列表:运行时脚本打印的配置对象中traceList字段列出了本次实际包含的 trace(按字母序排列,且必然包含scatter),可据此核对是否与你传入的一致。
  4. 页面验证:将生成的 bundle 通过<script>引入你的 HTML 页面后,用你的真实dataPlotly.newPlot,确认页面只渲染你所保留的 trace 类型且不报错。

限制与替代路径

  • 构建环境限制build/目录下的样式产物(如build/plotcss.js)由npm run preprocess生成;tasks/bundle.mjs 在缺少该文件时会明确提示“Please runnpm run preprocessfirst”。如果构建过程出现类似缺失文件报错,先执行npm run preprocess再重新构建。
  • scatter无法移除:这是当前脚本的硬编码行为(tasks/custom_bundle.mjs 中将scatter固定写入 trace 列表),文档提示该行为未来可能变化,请显式包含scatter
  • strict 选项--strict仅对支持 strict 实现的 trace 生效;不支持的类型仍回落到常规实现。
  • 不想自己打包时的替代路径:如果你的库本身就是打包工具(webpack/rollup 等),可以直接import源码中的 partial index(如 lib/index-basic.js 只注册了barpiecalendars组件),让打包器自己裁剪,或参考 BUILDING.md 调整默认构建配置。此时不必走custom-bundle流程。
  • 官方发布的 npm 包与 CDN bundle 的说明见仓库 dist 目录文档;只有当这些现成分发形式都不满足你的体积或组成要求时,才需要本文的自定义 bundle 流程。

【免费下载链接】plotly.jsOpen-source JavaScript charting library behind Plotly and Dash项目地址: https://gitcode.com/GitHub_Trending/pl/plotly.js

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 3:33:36

语言模型自主漏洞利用与跨服务器自我复制的技术解析与防御

试想一下这样的场景&#xff1a;一个语言模型在没有任何人工干预的情况下&#xff0c;发现了系统里的一个隐蔽漏洞&#xff0c;构造出可用的攻击载荷&#xff0c;绕过防火墙&#xff0c;然后在另一台服务器上复制出自己的完整运行环境。这不是科幻电影的桥段&#xff0c;而是近…

作者头像 李华
网站建设 2026/9/14 3:33:22

Chat2API 供应商认证切到 TaoToken,Cline 和 Roo Code 直接调 DeepSeek/GLM

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 3:31:57

零代码用自然语言搭建Agent工作流:WorkBuddy开源实战全攻略

先说结论&#xff1a;这套课不是我一时兴起放出来的&#xff0c;而是我把之前攒了大半年的付费内容重新整理、补录、去重之后&#xff0c;以全38集的体量免费开源分享出来。课程本身是围绕WorkBuddy这个轻量级Agent工作流平台展开&#xff0c;目标只有一个——让完全没写过代码…

作者头像 李华
网站建设 2026/9/14 3:31:49

Unity Android设备唯一ID获取:原理、实现与兼容性实战

简介&#xff1a;面向Unity开发者的安卓设备唯一标识获取示例包&#xff0c;解决在安卓手机上获取稳定设备号的问题。资源包含两个文件&#xff0c;一个Java原生插件与一个C#调用脚本&#xff0c;整体压缩包不到1KB&#xff0c;轻量易用。Java插件在安卓端取得设备唯一标识&…

作者头像 李华
网站建设 2026/9/14 3:29:29

GLM-5.3-Flash夜间畅用:面向开发者工作流的代码大模型实践

1. 这不是“限时免费”&#xff0c;而是开发者时间经济学的一次精准校准 “智谱GLM Coding Plan夜间畅用活动”——这个标题里藏着一个被多数人忽略的关键词&#xff1a; 夜间 。不是凌晨三点&#xff0c;不是周末空档&#xff0c;而是晚上十一点到次日九点这十个小时。我盯着…

作者头像 李华