Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

提前为 1.10 做好准备 #17

Open
Seeridia opened this issue Jan 5, 2025 · 1 comment
Open

提前为 1.10 做好准备 #17

Seeridia opened this issue Jan 5, 2025 · 1 comment

Comments

@Seeridia
Copy link

Seeridia commented Jan 5, 2025

您好?我很喜欢你的项目,但是他在 typora 1.10.5-dev 上无法正常运行

(虽然提出为测试版做适配的 issue 很奇怪,但是希望能在 1.10 到来前提前做好准备)

@Seeridia Seeridia changed the title 提前为1.10 做好准备 提前为 1.10 做好准备 Jan 5, 2025
@Snowflyt
Copy link
Owner

Snowflyt commented Jan 7, 2025

尝试复现了一下,macOS 上没有问题。在 Windows 上出现了意外打开 language-server.cjs 并且未启动 Copilot LSP 的问题,我猜 Linux 上也有同样的问题,因为 Windows/Linux 上的通信机制基本相同。

有一个非常简单的修复方式,但要求电脑上已经安装了 Node.js。打开安装目录下的 copilot/index.js 文件(对于 Windows,通常是 C:\Program Files\Typora\resources\copilot\index.js),找到以下代码:

if (nodeVersion[0] >= 18)
  return (modulePath) =>
    Promise.resolve(
      wrapNodeChildProcess(fork(modulePath, [], { silent: true })),
    );

修改为:

if (nodeVersion[0] >= 18)
  return (modulePath) =>
    Promise.resolve(
      wrapNodeChildProcess(spawn("node", [modulePath])),
    );

我暂时不会考虑将这个修复方法更新到仓库中,因为这需要 Windows/Linux 用户额外安装 Node.js,我这几天会试试看能不能找到不需要用户安装 Node.js 的修复方案。


从上面的修复中可以看出,问题定位非常简单,就是源于 Typora 1.10 中 fork 没有正常工作(没有按照预期的启动一个 Node.js 进程),反而启动了当前进程(也就是 Typora 进程本身)。我排查了挺久到底是啥更新导致 fork 不能正常工作,但目前没有找到原因。说实话这个问题实在是有点匪夷所思,因为 child_process.fork 的代码在 Typora 1.10 的更新中没有任何改动。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants