在VSCode中开发自定义TypeScript语言服务插件
我试图在VSCode中开发一个TSserver插件,但我无法让服务器加载我的插件 我已经尝试将tsconfig.json中的路径设置为本地路径和节点_模块的路径 这是一个非常小的项目,我认为应该运行插件在VSCode中开发自定义TypeScript语言服务插件,typescript,visual-studio-code,Typescript,Visual Studio Code,我试图在VSCode中开发一个TSserver插件,但我无法让服务器加载我的插件 我已经尝试将tsconfig.json中的路径设置为本地路径和节点_模块的路径 这是一个非常小的项目,我认为应该运行插件 服务器没有加载插件。它不会在插件中记录消息,如果我在插件中输入错误,它也不会崩溃。TS服务器插件位于node\u下。只有当您正在使用,并且插件在项目的tsconfig.json中列出时,才会加载模块。使用插件的相对路径 要运行该示例,请执行以下操作: 在node\u模块下安装minimal t
服务器没有加载插件。它不会在插件中记录消息,如果我在插件中输入错误,它也不会崩溃。TS服务器插件位于
node\u下。只有当您正在使用,并且插件在项目的tsconfig.json
中列出时,才会加载模块。使用插件的相对路径
要运行该示例,请执行以下操作:
在node\u模块下安装minimal tsserver插件
使用工作区版本的typescript
在您的tsconfig中,具有:
{
"compilerOptions": {
"plugins": [
{
"name": "minimal-tsserver-plugin"
}
]
}
}
在从文件提供服务时,我能够在TS服务器中加载自定义插件的唯一方法是:
使用本地TypeScript启用工作区配置:
npm i类型脚本
package.json
:
{
"name": "plugin"
}
{
“依赖项”:{
“类型脚本”:“^4.2.3”
}
}
.vscode/settings.json
{
“typescript.tsdk”:“/node_modules/typescript/lib”,
//~/.config/Code/logs/**/tsserver.log
“typescript.tsserver.log”:“详细”,
“typescript.enablePromptUseWorkspaceTsdk”:真
}
使用本地TypeScript很重要,因为TypeScript将在TS服务器及其上的工作目录中的node_modules
中按包名查找插件。如果试图使用全局TypeScript(/usr/local/lib/node\u modules/TypeScript/lib
),则tsserver
的工作目录就在那里,而您的插件将不在该路径附近
使用verbose似乎是可选的,因为TS服务器中加载的所有插件相关消息似乎都是信息级别的,但我启用它是为了确保我不会错过任何东西,因为调试这是经过精心设计的:要查看日志,在TS/JS文件中按Cmd+Shift+p,然后选择TypeScript:Show Open TS Server Log
启用对workplace TypeScript版本的提示也是可选的,这有助于避免忘记手动执行此操作,否则您必须在TS/JS文件中执行Cmd+Shift+p并选择TypeScript:选择TypeScript版本并将其切换到.vscode/settings.json
中配置的工作区版本
在项目目录中的节点\u模块/plugin
中创建插件
这是次优的部分,我讨厌在node_modules
中有插件的源代码,但我还没有找到将其移出的方法,因为TS服务器的工作目录现在位于项目目录的node\u modules
中,下一个目录是项目目录父目录的node\u目录
,依此类推。我不知道如何使你的插件代码不需要在这个链中
node\u模块/plugin/package.json
:
{
"name": "plugin"
}
node\u模块/plugin/index.js
:
module.exports=函数初始化(模块){
函数创建(信息){
const service=info.languageService;
info.project.projectService.logger.info(
“已启动自定义插件”
);
回程服务;
}
返回{create};
}
我不认为不需要传输就可以直接在TypeScript中编写插件
配置TS服务器以使用插件并重新启动它
tsconfig.json
:
{
"name": "plugin"
}
{
“编译器选项”:{
“插件”:[
{
“名称”:“插件”
}
]
}
}
名称不能是文件路径(),因此我们在这里通过节点包名称引用插件,因此所有的把戏都是将插件源代码放在通向TS服务器工作目录的Node_modules
链中
要重新启动TS服务器,请转到TS/JS文件并按Cmd+Shift+p,然后选择TypeScript:restart TS Server。然后再次按Cmd+Shift+P并选择类型脚本:打开TS服务器日志
您应该会看到这样的内容(…
代表您的项目目录):
如果有人知道如何直接从您的项目目录而不是从node\u modules
加载插件,或者如何使用全局TypeScript安装而不是本地安装,我洗耳恭听
编辑:
可以进行的一项改进是将node\u modules/plugin/index.js
更改为:
module.exports=require('../../plugin.js');
并将之前的代码移动到项目目录中的plugin.js
。我更希望在我的项目目录中没有任何node\u modules
目录的情况下,有一种方法可以完成所有这些,但是唉
我已经为此打开了一个TypeScript错误报告:我已经尝试在工作区模式下运行TypeScript服务器,当插件链接到node_模块时,它没有work@SKillen看看我的答案,我已经想出了一个办法,使这项工作。当然不是一个好方法,也不是一个基于感觉的正确方法,但这是我找到的唯一方法。