ARTICLE DETAIL

资讯详情

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

nteract 2021/01/25 版本深度解析:笔记本 Cell ID 支持、Monaco 编辑器自定义命令与依赖清理

nteract 2021/01/25 版本深度解析:笔记本 Cell ID 支持、Monaco 编辑器自定义命令与依赖清理 开发工具数据科学【免费下载链接】archived-desktop-appThe old electron based nteract notebook项目地址https://gitcode.com/gh_mirrors/nt/archived-desktop-app点击查看免费下载本文以 nteract 仓库的 2021 年 1 月 25 日发布记录changelogs/01-2021.md为主线结合仓库源码深入剖析该版本中 desktop 应用与核心 SDK 包的关键变更如何在 notebook 元数据层面支持 Cell ID、nteract/monaco-editor 如何通过 command handler 注册自定义命令并修复内核补全问题以及 nteract/mythic-notifications 为何要从依赖中移除 electron。读完本文你将理解 nteract 对 nbformat 4.5 Cell ID 规范的落地方式以及 Monaco 编辑器集成层的可扩展点。版本总览一次聚焦桌面端与编辑体验的发布本次发布2021/01/25覆盖面集中于两个层面面向最终用户的nteract desktop app以及面向开发者的Core SDK Packages。其中值得关注的是发布说明明确提醒如果你在项目中以**传递依赖transitive dependency**的方式使用下述 Core SDK 包则需要同步升级其父级包否则可能无法获得修复。组件版本变更类型核心内容nteract desktop app—Bug Fixes为 notebook 增加 Cell ID 支持PR #5378nteract/commutable7.4.0New Features在 notebook 元数据中支持 Cell IDPR #5378nteract/mythic-notifications0.2.8Bug Fixes从依赖中移除 electron规避兼容性问题PR #5390nteract/monaco-editor3.3.0New Features支持通过 command handler 注册自定义命令PR #5418nteract/monaco-editor3.3.0Bug Fixes修复语言 cell magic 触发时的光标位置问题PR #5405修复内核补全处理问题PR #5407从当前仓库快照看各包后续演化版本为nteract/commutable 7.5.1、nteract/mythic-notifications 0.2.11、nteract/monaco-editor 5.0.7读者可对照了解该版本所处的时间线。Cell ID 支持从 ipynb 磁盘格式到内存数据结构的全链路为什么需要 Cell ID经典的 ipynbnbformat v4nbformat_minor 5文件中单元格没有稳定的唯一标识定位一个单元格只能依赖其在cells数组中的下标。这带来两个实际问题单元格插入、删除、移动后下标随之漂移跨会话或多人协同时的引用会失效应用内部无法把当前正在编辑的单元格与磁盘文件中的某个单元格稳定对应起来。nbformat 4.5 起规范为每个单元格增加了id字段nteract 在此版本PR #5378中完成了对这一规范的落地desktop app 读取、编辑、保存 notebook 时都能感知并保留 Cell IDnteract/commutable 则在数据结构层面正式支持该字段。磁盘格式三种单元格统一携带可选 id在 commutable 的磁盘格式类型定义中CodeCell、MarkdownCell、RawCell均声明了可选字段id?: string见 packages/commutable/src/v4.tsexport interface CodeCell { cell_type: code; id?: string; // nbformat 4.5 提供的可选字段 metadata: JSONObject; execution_count: ExecutionCount; source: MultiLineString; outputs: OnDiskOutput[]; }对应地内存中的 Immutable 记录同样增加了id?: string参数packages/commutable/src/cells.tsexport interface CodeCellParams { cell_type: code; id?: string; metadata: ImmutableMapstring, any; execution_count: ExecutionCount; source: string; outputs: ImmutableListImmutableOutput; }解析与序列化nbformat_minor 决定 id 是否参与nteract/commutable通过hasCellId()判定目标 notebook 是否启用 Cell IDpackages/commutable/src/v4.tsfunction hasCellId(notebook: NotebookV4 | NotebookRecordParams) { return notebook.nbformat 4 notebook.nbformat_minor 5; }这一判定贯穿两个方向磁盘 → 内存fromJS只有当 notebook 是 4.5 及以上版本时才把磁盘上的cell.id传入appendCell作为单元格在cellMap中的键否则传入undefined由 nteract 自行生成。见 packages/commutable/src/v4.ts。内存 → 磁盘toJS序列化时仅当shouldUseCellId为真才将内部维护的 cellId 写回cell[id]packages/commutable/src/v4.ts从而保证读写往返后 id 不丢失。const shouldUseCellId hasCellId(plainNotebook); const cells plainCellOrder .filter(...) .map((cellId: string) { const cell cellToJS(plainCellMap[cellId]); // if this notebook has cell ids, ensure // that the id is included in the cell output if (shouldUseCellId) { cell[id] cellId; } return cell; });内部模型cellMap cellOrder 双结构UUID 兜底nteract 在内存中并不依赖数组下标而是采用cellOrder有序 id 列表cellMapid → 单元格记录的双结构组织单元格见 packages/commutable/src/structures.ts。新增单元格时id 默认由createCellId()生成——底层是标准的 UUID v4packages/commutable/src/primitives.tsexport type CellId string; export function createCellId(): CellId { return uuid(); }从源码结构看该版本之后nteract 的单元格增删、插入appendCell、insertCellAt、deleteCell全部以 CellId 为操作依据配合cellOrder维护展示顺序这为后续多端协同、富文本引用等场景打下了基础。对使用者意味着什么用 nteract desktop app 打开 nbformat 4.5 的 notebook单元格 id 会被保留并在保存时写回使用nteract/commutable的fromJS/toJS做格式转换时4.5 文件的 id 信息完整往返低于 4.5 的旧文件不会强制注入 id兼容性得到保证。nteract/mythic-notifications 0.2.8移除 electron 依赖的兼容性修复本版本中nteract/mythic-notifications从 0.2.7 升至 0.2.8唯一变更是在依赖中移除 electronPR #5390。原因很直接通知模块本身是纯前端逻辑把 electron 写进 dependencies 会导致在浏览器环境安装/构建时拉入不必要的桌面端依赖进而引发版本兼容问题。这与此前另一项修复允许 mythic-configuration 在浏览器环境被 import属于同一类解耦运行时环境的工程化诉求。从当前仓库的 packages/mythic-notifications/package.json 看其依赖已不再包含 electron其通知后端也区分为浏览器风格的 blueprintjs 实现与控制台实现见 packages/mythic-notifications/src/backends/印证了该包面向多运行环境的定位。nteract/monaco-editor 3.3.0命令扩展点与内核补全修复新特性通过 commandHandler 注册自定义命令nteract/monaco-editor3.3.0 在IMonacoConfiguration中新增了commandHandler配置项PR #5418。它是一个形如(editor: monaco.editor.IStandaloneCodeEditor) void的回调在编辑器实例创建后componentDidMount以及 props 更新时componentDidUpdate被调用见 packages/monaco-editor/src/MonacoEditor.tsx 与 L365-L368// Handle custom commands if (this.editor this.props.commandHandler) { this.props.commandHandler(this.editor); }借助该回调上层应用可以在拿到编辑器实例后调用 Monaco 的editor.addCommand(...)/editor.addAction(...)注册自定义命令与快捷键。配合同版本已有的快捷键扩展shortcutsHandler、shortcutsOptions见 packages/monaco-editor/src/MonacoEditor.tsxnteract/monaco-editor从开箱即用的笔记本编辑器进一步演化为可深度定制命令体系的编辑器组件。Bug Fixes两处编辑体验修复语言 cell magic 的光标位置问题#5405当用户在代码单元中调用%magic之类的语言级命令时此前光标位置会出现错乱该修复保证 magic 触发后编辑器内部状态与用户可见光标一致。内核补全处理问题#5407nteract/monaco-editor内置的补全提供者通过completionProviderpackages/monaco-editor/src/completions/completionItemProvider.ts与 Jupyter kernel 的Channels通信用户输入时先调用completionRequest(code, cursorPos)向内核发起补全请求再把内核返回的补全项映射为 Monaco 的CompletionItemkind 映射见 packages/monaco-editor/src/completions/completionItemProvider.ts。该版本修复了此链路中补全项处理不当、甚至导致补全不可用的边缘情况。底层补全链路的关键是CompletionItemProvider通过setChannels()持有内核通道packages/monaco-editor/src/completions/completionItemProvider.ts仅当已连接内核isConnectedToKernel为真时才发起请求否则返回空建议列表——这保证了无内核环境下编辑器依然可用。升级与集成建议传递依赖注意若你的项目间接依赖nteract/commutable、nteract/mythic-notifications、nteract/monaco-editor请升级对应的父级包以将 7.4.0 / 0.2.8 / 3.3.0 中的修复传递进来。Cell ID 是感知优先的渐进能力commutable 仅在nbformat_minor 5时启用 id 读写旧文件不会被动改写适合逐步迁移。Monaco 定制入口需要为笔记本编辑器追加自定义快捷键或命令时优先使用commandHandler与shortcutsHandler两个配置项而非 fork 编辑器组件本身。运行环境隔离参考 mythic-notifications 的实践浏览器与桌面端共用的 SDK 包应避免将 electron 等桌面专属依赖放入运行时 dependencies。本次发布是 nteract 向规范兼容 编辑体验精细化推进的一步Cell ID 让 notebook 数据结构更贴近 nbformat 4.5 规范Monaco 命令体系让桌面端与 Web 端编辑器具备统一的扩展能力依赖清理则降低了 SDK 包在浏览器环境的接入成本。仓库中完整的变更历史与源码实现可继续查阅 changelogs/ 目录及 packages/ 下的各包源码。赞分享开发工具数据科学【免费下载链接】archived-desktop-appThe old electron based nteract notebook项目地址https://gitcode.com/gh_mirrors/nt/archived-desktop-app点击查看免费下载相关推荐思源笔记 v2.9.3 版本深度解读云端订阅、插件命令面板与编辑器内核更新思源笔记 v2.9.3 版本深度解读云端订阅、插件命令面板与编辑器内核更新 思源笔记 v2.9.3 是该开源知识工作空间在数据服务与插件体系上一次里程碑式的版知识管理知识库K9s v0.40.7 维护版本深度解析自定义视图加载修复与 dir 命令绝对路径支持K9s v0.40.7 维护版本深度解析自定义视图加载修复与 dir 命令绝对路径支持 K9s 是一个面向 Kubernetes 的终端 UI 管理工具用户云原生容器编排CLI运维nteract 2020/10/26 版本解析图片拖拽插入、ipywidgets 修复与 Monaco 编辑器性能优化nteract 2020/10/26 版本解析图片拖拽插入、ipywidgets 修复与 Monaco 编辑器性能优化 2020 年 10 月 26 日发布的开发工具数据科学上一篇Pundit策略重构工具自动化代码改进下一篇Easings.net代码重构提升可维护性的方法创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表