如何在NodeJS应用程序的服务器端使用JavaScript库,以便在客户端上运行?

我正在深入NodeJS和Express(对我来说太复杂了)来构build一个实时的Web应用程序。 目前,我正在尝试了解如何在服务器端使用现有的JavaScript库。 问题在于库似乎devise为在客户端运行,因此,这些指令仅向您显示如何在客户端使用它。 我在说的图书馆可以在这里find…

https://github.com/replit/jsrepl

问题:

  1. 由于一个NodeJS的Web应用程序是build立在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 } }); 

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

所以这是可能的,但你需要一些严重的黑客为了得到它的工作。 由于这不是一个节点模块,并且像其他人已经注意到的那样从浏览器中写入,所以您需要在节点内部使用DOM来执行它。 幸运的是,我们有美妙的jsdom项目,可以让我们做到这一点。 所以让我们来设置这个东西。

  • cd进入你的节点项目(如果没有的话就创build一个)
  • 克隆下jsrepl回购git clone git://github.com/replit/jsrepl.git
  • cd进入jsrepl并初始化子模块git submodule update --init --recursive
  • 仍然在文件夹中,运行npm install coffee-scriptnpm install uglify-js ,在回购(ugh)中没有提到任何地方的依赖关系。
  • 确保安装了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放入工作所需的最less量代码。 我们在这里所做的只是需要jsdom并实例化它,直接从文件中读取jsrepl源文件。 如果你用node filename运行这个文件,它会注销你的JSREPL对象,这个对象可以像在浏览器中一样使用)

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

  1. 没有。客户端有些东西在服务器端没有(反之亦然):例如,DOM。
  2. 我从来没有使用jsrepl自己,但假设它是平台不可知的,从节点模块require()它应该是确定的。 但是,在有问题的脚本中(如document.getElementById )似乎还有一些DOM特定的东西,否则就是这样。