如果设计为在客户端上运行,我如何在NodeJS应用程序的服务器端使用javascript库?

Bea*_*red 7 javascript node.js express read-eval-print-loop

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

https://github.com/replit/jsrepl

问题:

  1. 由于NodeJS Web应用程序是基于javascript构建的,可以说我可以在服务器端运行任何非gui javascript库吗?
  2. 任何人都可以提供一些指导,说明我如何将这个jsrepl库添加到我的Express 3.0应用程序中的方式允许我以与在浏览器中客户端使用它相同的方式使用它?我是否必须修改jsrepl代码并添加"exports".我想用的方法?

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

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

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

Jef*_*nte 9

所以这是可能的,但你需要一些严肃的hackery来使它工作.由于这不是一个节点模块,并且正如其他人所指出的那样是从浏览器中编写的,因此您需要在节点内使用DOM来执行它.幸运的是,我们有一个精彩的jsdom项目,它允许我们做到这一点.所以让我们设置这个东西吧.

  • cd 进入您的节点项目(如果没有已创建一个项目,请创建一个)
  • 克隆jsrepl repo git clone git://github.com/replit/jsrepl.git
  • cd jsrepl并初始化子模块git submodule update --init --recursive
  • 仍然在repo(ugh)中任何地方都没有提到的文件夹,run npm install coffee-scriptnpm install uglify-js依赖项中.
  • 确保安装并运行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)
}
Run Code Online (Sandbox Code Playgroud)

这是JSREPL进入其工作地点所需的最少代码量.我们在这里所做的只是需要jsdom并实例化它,直接从文件中读取jsrepl源代码.如果你用node filename它运行这个文件会注销你的JSREPL对象,它可以像在浏览器中一样使用:)


ubi*_*bik 1

  1. 不。有些东西在客户端是服务器端没有的(反之亦然):例如 DOM。
  2. 我从未与jsrepl自己一起工作过,但假设它与平台无关,require()从节点模块中获取它应该没问题。然而,相关脚本中似乎有一些特定于 DOM 的内容(例如document.getElementById),表明并非如此。