繁体   English   中英

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

[英]How can I use a javascript library on the server side of a NodeJS app when it was designed to run on the client?

我正在深入研究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  
  }  
});  

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

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

  • cd进入你的节点项目(如果没有一个,则创建一个)
  • 克隆jsrepl repo git clone git://github.com/replit/jsrepl.git
  • cd到jsrepl并初始化子模块git submodule update --init --recursive
  • 仍然在文件夹中,运行npm install coffee-scriptnpm install uglify-js ,repo(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引入其工作所需的最少代码量。 我们在这里所做的只是需要jsdom并实例化它,直接从文件中读取jsrepl源代码。 如果你用node filename运行这个文件,它将注销你的JSREPL对象,它可以像在浏览器中一样使用JSREPL

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM