HN讨论 · 身份未知
在 Python 进程中执行 JavaScript 代码以复用 JS 库
Python DOM 库作者在移植 JS 库测试 DOM 兼容性时,为避免继续把手写移植塞进核心库,将 Acorn 解析器翻译成纯 Python,意外让 JS 代码在 Python 进程中执行。这展示了一种无需独立 JS 运行时即可复用 JS 生态的解法形态。
查看原始信号hn:49579498
目标用户
维护 Python DOM 实现、希望复用或测试现有 JavaScript 库(如 d3、jQuery)的 Python 开发者
潜在需求
作者需要在不把各类 JS 库手动移植进核心库的前提下,在 Python 环境中运行 JavaScript 代码,以测试 DOM 兼容性并复用 JS 生态库。
发生场景
作者维护纯 Python DOM 实现 domonic,为验证 DOM 兼容性会把真实 JS 库移植成 Python 版本;移植 d3 和 jQuery 后不希望继续污染核心代码,于是另建 domonic-libs 存放移植库,并在移植 Acorn 后意外让 JS 代码在 Python 进程中运行。
来源证据
作者把 Acorn 解析器移植为纯 Python 后,与 domonic 的 JavaScript 和 DOM 节点映射,发现 JS 代码可以在 Python 进程中执行。
domonic-libs: https://github.com/byteface/domonic-libs/ Anyways a couple of days ago while porting some js libraries faithfully to run against dom.py and javascript.py I came across Acorn (a Javascript parser) and coverted it into pure python. Once Acorn.py was producing an AST, I mapped that against domonic's Javascript and DOM nodes and to my surprise... actual JS code started executing inside the Python process! Give it a try: pipx install myjs Would love to hear your thoughts, edge cases tohttps://news.ycombinator.com/item?id=49579498
为什么值得留意
这个信号把“在 Python 中运行 JS”从设想变成可尝试的实现:作者用可移植的 Acorn 解析器映射到已有 DOM 环境即实现了 JS 执行,意味着 Python 开发者复用 JS 库可能无需引入 Node.js 子进程或手工重写。
已有方案
- domonic:纯 Python DOM API 实现
- javascript.py:Python 环境中的 JavaScript 相关模块
- 手写移植 d3、jQuery 等 JS 库到 Python(放在 domonic-libs)
可能延伸 · 模型推测
- 把该纯 Python 解释器作为迁移工具,在 Python 中直接运行未移植的 JS 库,减少手工移植
- 将 domonic 与 myjs 组合成 JS 库 DOM 兼容性的测试执行环境
目前未知
- 全部信息来自项目作者自述,没有独立用户评论
- myjs 的兼容性、性能和覆盖范围在材料中未说明
- 作者称这是意外产物,未明确目标使用场景
- 没有证据显示其他 Python 开发者也有相同需求
继续核实
- 除作者外,是否还有 Python 开发者需要在 Python 进程中直接运行 DOM 相关 JS 库?
- myjs 对 d3、jQuery 这类库的兼容程度如何,能否替代手工移植?
- 在 Python 内执行 JS 与使用 Node.js 子进程相比,实际收益和限制分别是什么?
主题词
javascript executiondom compatibilityjs library portingpython dom