我正在深入研究 NodeJS 和 Express(这对我来说太复杂了)来构建一个实时 Web 应用程序。目前,我正在尝试了解如何在服务器端使用现有的 javascript 库。问题是该库似乎被设计为在客户端运行,因此,说明仅向您展示如何在客户端使用它。我正在谈论的图书馆可以在这里找到......
https://github.com/replit/jsrepl
问题:
意思是,在服务器端,我可以执行以下代码...
var jsrepl = new JSREPL({
input: inputCallback,
output: outputCallback,
result: resultCallback,
error: errorCallback,
progress: progressCallback,
timeout: {
time: 30000,
callback: timeoutCallback
}
});
预先感谢您的智慧!我正在尽力理解这一切。
所以这是可能的,但是你需要一些认真的黑客才能让它工作。由于这不是一个节点模块并且是从浏览器编写的,正如其他人所指出的,因此您需要节点内的 DOM 来执行它。幸运的是,我们有很棒的 jsdom 项目,它使我们能够做到这一点。那么让我们来设置一下吧。
cd
进入您的节点项目(如果还没有,请创建一个)git clone git://github.com/replit/jsrepl.git
jsrepl
并初始化子模块 git submodule update --init --recursive
npm install coffee-script
和 npm install uglify-js
,存储库中任何地方都没有提到的依赖项(呃)。cake bake
。经过漫长的编译 java 文件等过程后,命令将完成,jsrepl 将被构建并准备好运行。npm install jsdom
,然后我们就可以开始编写示例文件了这是一个最小的例子:
var jsdom = require('jsdom'),
fs = require('fs'),
jsrepl = fs.readFileSync('./jsrepl/repl.js', 'utf8');
jsdom.env({
html: "<script src='jsrepl.js' id='jsrepl-script'></script> ",
src: [jsrepl],
done: function(err, window){
if (err) return console.error(err);
run_jsrepl.call(window);
}
});
function run_jsrepl(){
console.log(this.JSREPL)
}
这是让
JSREPL
进入正常工作位置所需的最少代码量。我们在这里所做的就是需要 jsdom 并实例化它,直接从文件中读取 jsrepl 源代码。如果您使用 node filename
运行此文件,它将注销您的 JSREPL
对象,该对象可以像在浏览器中一样使用: )
您可以在 Node 中运行 phantomjs,这是一个无头 webkit 浏览器。然后在 phantomjs 中运行 jsrepl。
jsrepl
,但假设它与平台无关,从节点模块 require()
应该没问题。然而,相关脚本中似乎有一些特定于 DOM 的内容(例如 document.getElementById
)表明并非如此。你可以使用jsdom。
const { window } = new JSDOM('');
const { document, navigator } = window;
global.window = window;
global.document = document;
global.navigator = navigator;
查看此博客以了解其工作原理博客