在VSCode扩展中使用JavaScript-DOM

在VSCode扩展中使用JavaScript-DOM,javascript,node.js,dom,typescript,visual-studio-code,Javascript,Node.js,Dom,Typescript,Visual Studio Code,我正在尝试创建一个VisualStudio代码扩展,它将YoastSEO分析应用于我用VisualStudio代码编写的文档(例如txt文件、标记文件、ASCIDOC文件等) 我已经创建了一个扩展的基本shell,并使用npm添加了YoastSEO:npm installhttps://github.com/Yoast/YoastSEO.js#develop 我创建了一个YoastProvider类,如下所示: const timerPeriod = 1000; // Time between

我正在尝试创建一个VisualStudio代码扩展,它将YoastSEO分析应用于我用VisualStudio代码编写的文档(例如txt文件、标记文件、ASCIDOC文件等)

我已经创建了一个扩展的基本shell,并使用npm添加了YoastSEO:
npm installhttps://github.com/Yoast/YoastSEO.js#develop

我创建了一个YoastProvider类,如下所示:

const timerPeriod = 1000;  // Time between preview updates

export default class YoastProvider implements TextDocumentContentProvider {
  // ...
}
现在在这个类中,有一个
preview
方法,我想使用它1)获取文档的内容,2)使用Yoast处理,3)将结果输出到预览窗格

问题是,Yoast API希望直接使用DOM

我可以用nodom“伪造”出一个元素,我可以将字符串直接传递给关键字和文本,但这并不重要,因为Yoast似乎在处理过程中使用了DOM。因此,我得到一个错误,
文档
在Yoast的app.js中未定义


有没有办法以这种方式使用YoastSEO?我还缺少其他方法吗?看起来我可能让它变得更难了。

可以在一个新的上下文中包装Yoast,该上下文包含类似jsdom的内容,这样当它加载时,它看起来就像dom在那里一样

我自己使用
jsdom
在节点环境中运行角度单元测试也做过类似的事情

const yoast = (function(){
    global.document = jsdom(); // Use any virtual dom that you want really
    const yoast = require('yoast');
    delete global.document;
    return yoast;
})();

遗憾的是,这并不像简单地导入模块那么容易,但它应该能够完成任务。

可以将Yoast包装在一个新的上下文中,该上下文包含类似jsdom的内容,这样在加载它时,它看起来就好像dom在那里一样

我自己使用
jsdom
在节点环境中运行角度单元测试也做过类似的事情

const yoast = (function(){
    global.document = jsdom(); // Use any virtual dom that you want really
    const yoast = require('yoast');
    delete global.document;
    return yoast;
})();

遗憾的是,这并不像简单地导入模块那么容易,但它应该能完成任务。

我喜欢这个想法,但我不知道如何用TypeScript实现它<代码>全局.document获取错误信息
“属性“document”不存在…”
。也许我只需要找出TypeScript中的等价物?我喜欢这个想法,但我不知道如何用TypeScript实现它<代码>全局.document获取错误信息
“属性“document”不存在…”
。也许我只需要找出TypeScript中的等价物?