使用 HTML DOM 加载 SDK 到 nodejs

Load SDK with HTML DOM into nodejs

我正在尝试使用包含 HTML DOMNodeJS 中使用的 SDK(我需要 SDK 的功能而不实际使用客户端)

由于 SDK 需要 HTML DOM,所以我无法使用简单的 require 加载它。

所以我尝试了以下方法:

const {JSDOM} = require("jsdom");
const dom = new JSDOM(`<body>
 <script src="./libs/jquery/jquery-2.1.3.min.js" type="text/javascript"></script>
  <script>
  var testVar= 'test';
  var a= jQuery;
</script>
</body>`, {runScripts: "dangerously", resources: "usable"});
module.exports = dom.window.a;

(在示例中我输入了 JQUERY,但我使用了另一个我无法放入问题中的 SDK - 我知道 jquery 有一个 npm 包,但我的 SDK 有不是)。

我的想法是导出一个包含 Nodejs SDK 的模块,所以我使用 jsdom.

创建了一个模拟 dom

当我调试时,我在这一行中看到:module.exports = dom.window.a; 一个变量是 undefined

但如果我更改行:module.exports = dom.window.testVar; 我会得到 'test'.

为了测试,我创建了一个 HTML 页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script src="./libs/jquery/jquery-2.1.3.min.js" type="text/javascript"></script>
<script>
    var a= jQuery;
</script>
</body>
</html>

当我 运行 它时,我确实正确地得到了 a 变量。

所以我无法弄清楚 JSDOM 的问题所在。

我希望得到帮助,或者任何其他关于如何将包含 HTML DOM 的 SDK 加载到 NodeJS

的建议

最后我在基地错过的是 DOMContentLoaded 事件。

此外,所有文件都在同一文件夹下非常重要。

我还创建了包含脚本的 HTML 并使用 JSDOM 上传了它

固定代码如下:

index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script src="jquery-2.1.3.min.js" type="text/javascript"></script></body>
</html>

index.js :

const {JSDOM} = require("jsdom");
const options = {
    runScripts: "dangerously",
    resources: "usable"
};
const file = './src/test/index.html';
module.exports = {
    initialize: function (callback) {
        JSDOM.fromFile(file, options).then((dom) => {
            dom.window.document.addEventListener('DOMContentLoaded', () => {
                setImmediate(() => {
                    callback({
                        jQuery: dom.window.jQuery
                    });
                });
            });
        }).catch(err => {
            console.log(err);
        });
    }
};

用法:

require('../test/').initialize(function (test) {
    if (test.jQuery)
        console.log("Yee");
    else
        console.log("Nope");
});

它打印了 Yee!!