如何将Prototype.js与Node.js一起使用?

时间:2011-02-10 05:21:47

标签: node.js prototypejs

我想在服务器端javascript中使用一些功能。我认为原型正在检查浏览器类型,但当然node.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

4 个答案:

答案 0 :(得分:6)

Prototype被编写为模块化。这意味着您可以只使用扩展Array和Class和Function的有用部分(我喜欢这些位!)并省略处理浏览器和DOM的部分(IE中缓慢且节点中不存在的位)。

首先转到https://github.com/sstephenson/prototype,然后从src/prototype/src/prototype/lang/中选择所需的部分。

祝你在这样一个充满挑战的挑战中好运。

答案 1 :(得分:4)

迟到的答案,但我确信它对某些人仍然有用:

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

几天前,我自己做了类似的事情,并意识到它已经完成了...... 即使使用github搜索,也很难找到这个回购。

答案 2 :(得分:2)

如果您查看Prototype.js的源代码,它会严格绑定到浏览器环境,而该环境不是由节点提供的(因为它不是Web浏览器)。

jsdom尝试模拟浏览器环境,并已习惯successfully在服务器端运行JQuery。您的里程可能会有所不同。

答案 3 :(得分:0)

underscore.js 尤其适用于node.js,它实现了大多数Prototypes心爱的功能:

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

它作为Prototype本身更快,因为不会扩展任何内置的JavaScript对象。
因此,语法略有不同:

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

如果您正在寻找像String这样的原型trim函数,请查看 underscore.string