如何将节点应用程序转换为 VS Code 扩展程序?

Posted

技术标签:

【中文标题】如何将节点应用程序转换为 VS Code 扩展程序?【英文标题】:How do I turn a node app into a VS Code extension? 【发布时间】:2020-07-31 12:13:35 【问题描述】:

我已经构建了一个节点应用程序,它使用模块来处理数据库 (better-sqlite3)。

它作为节点应用程序运行良好。但是,现在我正在尝试制作一个具有大部分相同功能的 VS Code 扩展。

但是,当我安装模块、构建并运行新的扩展时,我会收到以下消息:

激活扩展 'undefined_publisher.myPlugin' 失败:模块 '\?\C:...\node_modules\better-sqlite3\build\Release\better_sqlite3.node' 是使用 NODE_MODULE_VERSION 72 针对不同的 Node.js 版本编译的. 此版本的 Node.js 需要 NODE_MODULE_VERSION 75。请尝试重新编译或重新安装模块(例如,使用npm rebuildnpm install)..

我知道 VS Code 扩展是 Electron 应用程序,它们使用的节点版本与我为纯节点应用程序创建的节点不同,但我不清楚在扩展中我必须做什么来构建模块(更好- sqlite3) 使用正确版本的节点?

【问题讨论】:

您的原生模块必须使用与 VS Code 的 Electron 框架使用的相同版本的节点进行编译。因此,这也意味着,每次 VS Code 更改 Electron 框架的版本时,您都必须升级您的节点模块。因此,在编译原生模块时,请确保 node-gyp 使用 Electron 框架使用的正确 Node 版本。这可能会回答您的问题:***.com/questions/46384591/… 感谢您的反馈...我无法找到有关执行您建议的实际步骤的信息,主要是因为我对电子知之甚少。我只创建了几个 VS Code 扩展,没有完整的电子应用程序。我一直在阅读 VS Code 文档,所以我不了解内部结构,并且 VS Code 文档中没有太多内容。我如何告诉 node-gyp 使用哪个版本?我想我想要节点模块版本 75,对吧?我有电子重建,但似乎无法告诉它如何使用版本 75 重建。任何帮助或文档指针将不胜感激! 您是否尝试过错误消息提示的内容?即重建或重新安装有问题的模块? 是的,我尝试了 npm 重建并重新安装。我收到相同的错误消息。问题似乎是我用于非 vscode 扩展开发的节点版本与 vscode 扩展所需的版本不同。我不知道如何更改当前节点安装的目标,以使其与 vscode 扩展开发保持一致。无论如何,这是我最好的猜测。 允许您轻松更改每个项目的节点版本:github.com/nvm-sh/nvm 【参考方案1】:

npm rebuild 在普通节点下编译代码。它不会构建插件。 要解决,您必须执行以下操作:

npm install --save-dev electron-rebuild

# Every time you run "npm install", run this:
./node_modules/.bin/electron-rebuild

# On Windows if you have trouble, try:
.\node_modules\.bin\electron-rebuild.cmd

另外,如果上述方法不起作用,您需要进行一些清理和重建,如下所示:

如果您还没有安装 electron-rebuild,只需使用 命令:npm i -D electron-rebuildnode-modules 文件夹中删除<your-module-name>@<your-module-name> 文件夹。 删除文件packages-lock.json 运行npm i 安装未安装的模块 最后运行./node_modules/.bin/electron-rebuild 或相应的windows 等效项-.\node_modules\.bin\electron-rebuild.cmd 在 npm i 之后直接运行上述命令非常重要。

参考: 电子文档 - https://www.electronjs.org/docs/tutorial/using-native-node-modules

类似问题 - https://github.com/mscdex/cap/issues/92

类似问题 - https://github.com/serialport/node-serialport/issues/1910

【讨论】:

OP,如果对您有用,请将答案标记为正确:) 我使用 Yeoman 项目生成器创建了 VS Code 扩展。当我按照您的建议进行操作时,使用电子重建命令,它告诉我,“电子重建内部发生未处理的错误。无法找到电子的版本号,安装它或指定一个明确的版本”但是,我不能在 package.json 或 package-lock.json 中找到版本,所以我不知道该使用什么版本。 您是否有可能根本没有安装电子?你的问题解决了吗? 如你所见,我对电子知识不太了解。我可以告诉你,我的 VS Code 扩展在没有给我问题的模块的情况下运行良好。那么,也许这不是电子问题,而是节点问题?? 您可以在提出问题的模块的 github 问题跟踪器中将此问题作为问题提出。他们可能会更好地帮助您或告诉您如何按预期使用正确的版本进行编译

以上是关于如何将节点应用程序转换为 VS Code 扩展程序?的主要内容,如果未能解决你的问题,请参考以下文章

Windows XP上的VS Code + WSL应用程序上的CMake扩展

vs.code调试node.js的C++扩展

如何让 VS Code 识别 ES7 绑定操作符

VS Code 没有为在 Docker 容器中运行的 Node 应用程序打断点

VS Code 中 Vuex Store 的 Intellisense

VS Code 好用的扩展程序