在VSCode扩展中使用JavaScript-DOM
我正在尝试创建一个VisualStudio代码扩展,它将YoastSEO分析应用于我用VisualStudio代码编写的文档(例如txt文件、标记文件、ASCIDOC文件等) 我已经创建了一个扩展的基本shell,并使用npm添加了YoastSEO:在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
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中的等价物?