当NodeJS应用程序被设计为在客户端上运行时,如何在服务器端使用javascript库?
我正潜入NodeJS和Express(对我来说太复杂了)来构建一个实时web应用程序。目前,我正试图了解如何在服务器端使用现有的javascript库。问题在于,该库似乎被设计为在客户端运行,因此,说明仅显示如何在客户端使用它。我说的图书馆可以在这里找到 问题:当NodeJS应用程序被设计为在客户端上运行时,如何在服务器端使用javascript库?,javascript,node.js,express,read-eval-print-loop,Javascript,Node.js,Express,Read Eval Print Loop,我正潜入NodeJS和Express(对我来说太复杂了)来构建一个实时web应用程序。目前,我正试图了解如何在服务器端使用现有的javascript库。问题在于,该库似乎被设计为在客户端运行,因此,说明仅显示如何在客户端使用它。我说的图书馆可以在这里找到 问题: 既然NodeJS web应用是基于javascript构建的,那么我可以在服务器端运行任何非gui的javascript库,这公平吗 有谁能提供一些指导,告诉我如何将jsrepl库添加到我的Express 3.0应用程序中,使我能够像
var jsrepl = new JSREPL({
input: inputCallback,
output: outputCallback,
result: resultCallback,
error: errorCallback,
progress: progressCallback,
timeout: {
time: 30000,
callback: timeoutCallback
}
});
提前感谢你的智慧!我正在尽我最大的努力去理解这一切
jsrepl
,但是假设它是平台无关的,require()
从节点模块中调用它应该可以。然而,在所讨论的脚本中似乎有一些特定于DOM的东西(例如,document.getElementById
)表明了另一种情况您可以在节点中运行,该节点是无头webkit浏览器。然后在phantomjs内部运行jsrepl。所以这是可能的,但是为了让它工作,您需要一些严重的黑客攻击。因为这不是一个节点模块,并且正如其他人所指出的那样是从浏览器写入的,所以您需要在节点中使用DOM来执行它。幸运的是,我们有一个精彩的项目,它让我们能够做到这一点。让我们把这件事安排好
到节点项目中(如果还没有,请创建一个)cd
- 克隆下jsrepl repo
git克隆git://github.com/replit/jsrepl.git
- 将cd放入
并初始化子模块jsrepl
git子模块更新--init--recursive
- 仍然在文件夹中,运行
和npm install coffee script
,这些依赖项在repo(ugh)中没有提到npm install uglify js
- 确保java已安装并运行
。在编译java文件和类似命令的漫长过程之后,命令将完成,jsrepl将被构建并准备就绪cake bake
- 运行
,然后我们可以开始编写一个示例文件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)
}
var jsdom=require('jsdom'),
fs=需要('fs'),
jsrepl=fs.readFileSync('./jsrepl/repl.js','utf8');
jsdom.env({
html:“”,
src:[jsrepl],
完成:功能(错误,窗口){
if(err)返回控制台。error(err);
运行jsrepl.call(窗口);
}
});
函数run_jsrepl(){
log(this.JSREPL)
}
以下是将
JSREPL
放入其工作位置所需的最低代码量。我们在这里所做的就是需要jsdom并实例化它,直接从文件中读取jsrepl源代码。如果使用节点文件名运行此文件,它将注销您的JSREPL
对象,该对象可以像在浏览器中一样使用:)是正确的。jsrepl无法在当前编写的节点环境中工作。也许这会有所帮助,.@ThaddeusAlbers:jsrepl还能够直接执行coffeescript、scheme、lua和python,所以它不仅仅是一个简单的REPL循环,就像node core中的循环一样。+1个问题。有趣的库-纯javascript python、scheme和lua解释器。这个库只是想移植到node.js