我正在尝试用VSCode开发TSserver插件,但无法让服务器加载我的插件
我尝试将tsconfig.json中的路径设置为本地路径和node_modules的路径
这是一个非常小的项目,我认为应该运行插件 https://github.com/Spensaur-K/minimal-tsserver-plugin
服务器未加载插件。如果我在插件中输入错误,它不会在插件中记录消息或崩溃
答案 0 :(得分:1)
我能够在从文件提供服务的同时在 TS Server 中加载自定义插件的唯一方法:
npm i typescript
package.json
:
{
"dependencies": {
"typescript": "^4.2.3"
}
}
.vscode/settings.json
{
"typescript.tsdk": "./node_modules/typescript/lib",
// ~/.config/Code/logs/**/tsserver.log
"typescript.tsserver.log": "verbose",
"typescript.enablePromptUseWorkspaceTsdk": true
}
使用本地 TypeScript 很重要,因为 TypeScript 会在 TS Server 工作目录及以上的 node_modules
中按包名查找插件。如果尝试使用全局 TypeScript (/usr/local/lib/node_modules/typescript/lib
),tsserver
的工作目录将在附近,而您的插件将远离该路径。
使用 verbose 似乎是可选的,因为 TS 服务器中所有与插件加载相关的消息似乎都是信息级别,但我启用它以确保我不会错过任何东西,因为调试这已经足够人为设计了: 要查看日志,请在 TS/JS 文件中按 Cmd+Shift+P 并选择 TypeScript: Show Open TS Server Log。
启用工作场所 TypeScript 版本的提示也是可选的,它有助于不要忘记手动执行此操作,否则您必须在 TS/JS 文件中使用 Cmd+Shift+P 并选择 TypeScript:选择 TypeScript版本并将其切换到 .vscode/settings.json
中配置的工作区版本。
node_modules/plugin
中创建插件这是次优部分,我讨厌在 node_modules
中有插件的源代码,但我还没有找到将其移出的方法,因为 TS Server 的工作目录现在在 {{1} } 的项目目录,下一个目录是项目目录的父目录的 node_modules
,依此类推。我不知道怎么做才能让你的插件代码不需要在这个链中。
node_directory
:
node_modules/plugin/package.json
{
"name": "plugin"
}
:
node_modules/plugin/index.js
我认为无需转译就可以直接在 TypeScript 中编写插件。
module.exports = function init(modules) {
function create(info) {
const service = info.languageService;
info.project.projectService.logger.info(
"Started custom plugin"
);
return service;
}
return { create };
}
:
tsconfig.json
名称不能是文件路径 (https://github.com/microsoft/TypeScript/issues/18623),因此我们在这里通过 Node 包名称来引用插件,因此所有将插件源代码放在 {
"compilerOptions": {
"plugins": [
{
"name": "plugin"
}
]
}
}
链中的恶作剧到 TS Server 工作目录。
要重新启动 TS Server,请转到 TS/JS 文件并按 Cmd+Shift+P 并选择 TypeScript: Restart TS Server。然后再次按 Cmd+Shift+P 并选择 TypeScript: Open TS Server Log。
然后您应该会看到类似的内容(node_modules
代表您的项目目录):
…
如果有人知道如何直接从您的项目目录而不是从 Info 24 [09:59:19.919] Enabling plugin plugin from candidate paths: /…/node_modules/typescript/lib/tsserver.js/../../..,/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/typescript-language-features
Info 25 [09:59:19.919] Loading plugin from /…/node_modules/typescript/lib/tsserver.js/../../.. (resolved to /…/node_modules/node_modules)
Info 26 [09:59:19.923] Started custom plugin
Info 27 [09:59:19.923] Plugin validation succeded
加载插件,或者知道如何使用全局 TypeScript 安装而不是本地安装,我会全力以赴!
编辑:
可以进行的一项改进是将 node_modules
更改为:
node_modules/plugin/index.js
并将之前存在的代码移至项目目录中的 module.exports = require('../../plugin.js');
。我更希望有一种方法可以在我的项目目录中没有任何 plugin.js
目录的情况下完成所有这些工作,但是唉。
我为此打开了一个 TypeScript 错误报告:https://github.com/microsoft/TypeScript/issues/43124
答案 1 :(得分:0)
node_modules
中列出该插件时,才会加载tsconfig.json
下的TS Server插件。为插件may also not work使用相对路径。
运行示例:
minimal-tsserver-plugin
下安装node_modules
在您的tsconfig中,具有:
{
"compilerOptions": {
"plugins": [
{
"name": "minimal-tsserver-plugin"
}
]
}
}