2011-02-10 51 views
6

我想为服务器端JavaScript使用一些功能。我认为原型是检查浏览器类型,但当然node.js不是浏览器。我得到以下错误:如何在Node.js中使用Prototype.js?

$ node 
> require('./prototype') ; 
ReferenceError: navigator is not defined 
    at /home/guest/projects/javascript/prototype.js:14:5 
    at Object.<anonymous> (/home/guest/projects/javascript/prototype.js:23:4) 
    at Module._compile (node.js:462:23) 
    at Module._loadScriptSync (node.js:469:10) 
    at Module.loadSync (node.js:338:12) 
    at loadModule (node.js:283:14) 
    at require (node.js:411:14) 
    at cwdRequire (repl:29:10) 
    at [object Context]:1:1 
    at Interface.<anonymous> (repl:96:19) 

的prototype.js是1.7版本,Node.js的是版本0.2.6

+0

你到底想用它对于? – 2011-02-10 05:25:34

回答

6

原型写成模块化。这意味着您只能使用扩展Array和Class和Function(我喜欢这些比特!)的有用部分,并省略处理浏览器和DOM(IE中速度慢且节点中不存在的部分)的部分。

https://github.com/sstephenson/prototype开始,然后从src/prototype/src/prototype/lang/中挑选所需的零件。

祝你好运,在这样一个迷人的挑战。

+0

谢谢!它看起来像src/prototype/lang.js是一个Sprocket文件,只包含我想要的语言位。 – projectshave 2011-02-10 16:44:33

2

如果你看一下的Prototype.js的源头,它紧密结合浏览器环境,它不是由节点提供的(因为它不是网络浏览器)。

jsdom试图模拟浏览器环境,并且已经用于successfully在服务器端运行JQuery。你的旅费可能会改变。

+0

事实上,每个jsdom版本的每个里程可能会有所不同。上次我试图在google.com上使用它时,它只是爆炸。它真的很好地展示了浏览器环境究竟有多破碎。 – 2011-02-10 06:21:59

4

晚的答案,但我敢肯定它仍然是有用的一些人:

https://github.com/Rixius/prototype.node.js

前几天,我做了类似的东西我自己,并意识到它已经造成了.. 。 即使使用github搜索,此回购很难找到。

+0

我只是将这个回购的名称修改为prototype.node.js ...老实说,我只是为了向自己证明这是可能的。新链接是https://github.com/Rixius/prototype.node.js – Rixius 2011-06-21 16:34:36

0

underscore.js尤其是对node.js的,它实现了最原型的心爱的功能:

Underscore is a utility-belt library for JavaScript that provides a lot of 
the functional programming support that you would expect in Prototype.js. 

其更快的原型本身,因为它不会延伸任何内置的在JavaScript对象中。
由于这个原因,语法稍有不同:

// prototype.js: 
anArray.each(function(){ ... }); 
// underscore.js: 
_ = require('underscore'); 
_.each(anArray, function(){ ... }); 

如果您正在寻找原型String功能,如trim,看看underscore.string