2011-02-10 43 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