7

我正在深入研究 NodeJS 和 Express(这对我来说太复杂了)来构建一个实时 Web 应用程序。目前,我正在尝试了解如何在服务器端使用现有的 javascript 库。问题是该库似乎设计为在客户端运行,因此,说明仅向您展示如何在客户端使用它。我正在谈论的图书馆可以在这里找到......

https://github.com/replit/jsrepl

问题:

  1. 由于 NodeJS 网络应用程序是基于 javascript 构建的,可以说我可以在服务器端运行任何非 gui javascript 库吗?
  2. 任何人都可以提供一些指导,说明如何将 jsrepl 库添加到我的 Express 3.0 应用程序中,让我可以像在浏览器的客户端使用它一样使用它?我是否必须修改 jsrepl 代码并添加“导出”。到我想使用的方法?

意思是,在服务器端,我可以执行以下代码......

var jsrepl = new JSREPL({  
  input: inputCallback,  
  output: outputCallback,  
  result: resultCallback,  
  error: errorCallback,  
  progress: progressCallback,  
  timeout: {  
    time: 30000,  
    callback: timeoutCallback  
  }  
});  

提前感谢您的智慧!我正在尽我所能理解这一切。

4

3 回答 3

9

所以这是可能的,但你需要一些严肃的黑客才能让它工作。由于这不是节点模块,并且正如其他人所指出的那样是从浏览器编写的,因此您需要节点内的 DOM 来执行它。幸运的是,我们有一个很棒的jsdom项目,它让我们能够做到这一点。所以让我们把这个东西设置好。

  • cd进入您的节点项目(如果还没有,则创建一个)
  • 克隆 jsrepl 存储库git clone git://github.com/replit/jsrepl.git
  • cd 进入jsrepl并初始化子模块git submodule update --init --recursive
  • 仍然在文件夹中,运行npm install coffee-scriptnpm install uglify-js,repo 中任何地方都没有提到的依赖项(呃)。
  • 确保 java 已安装并运行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对象,它可以像在浏览器中一样使用:)

于 2013-10-25T03:29:52.177 回答
2

您可以在 Node 中运行phantomjs,这是一个无头 webkit 浏览器。然后在 phantomjs 中运行 jsrepl。

于 2013-10-22T09:57:24.897 回答
1
  1. 不,有些东西在客户端是服务器端没有的(反之亦然):例如,DOM。
  2. 我从来没有和jsrepl自己一起工作过,但假设它与平台无关,require()从节点模块中下载它应该没问题。然而,在有问题的脚本中似乎有一些特定于 DOM 的东西(例如document.getElementById),这表明其他情况。
于 2013-05-11T21:26:18.253 回答