2011-02-10 40 views
6

Tôi muốn sử dụng một số tính năng cho javascript phía máy chủ. Tôi nghĩ nguyên mẫu đang kiểm tra loại trình duyệt, nhưng dĩ nhiên node.js không phải là trình duyệt. Tôi nhận được lỗi sau:Làm thế nào để sử dụng Prototype.js với 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 là phiên bản 1.7, Node.js là phiên bản 0.2.6

+0

Chính xác những gì bạn muốn sử dụng nó cho? –

Trả lời

6

Nguyên mẫu được viết thành mô-đun. Điều này có nghĩa là bạn chỉ có thể sử dụng các phần hữu ích mở rộng mảng và lớp và chức năng (tôi yêu các bit đó!) Và loại bỏ các phần xử lý trình duyệt và DOM (các bit chậm và không tồn tại trong nút).

Bắt đầu bằng cách đi tới https://github.com/sstephenson/prototype rồi chọn các phần mong muốn từ src/prototype/src/prototype/lang/.

Chúc các bạn may mắn về một thử thách hấp dẫn như vậy.

+0

Cảm ơn! Có vẻ như src/prototype/lang.js là một tệp Sprocket chỉ bao gồm các bit ngôn ngữ mà tôi muốn. – projectshave

2

Nếu bạn có một cái nhìn tại nguồn của Prototype.js, nó được ràng buộc chặt chẽ với môi trường trình duyệt, không được cung cấp bởi nút (vì nó không phải là trình duyệt web).

jsdom cố gắng giả lập môi trường trình duyệt và đã được sử dụng để successfully chạy JQuery ở phía máy chủ. Số dặm của bạn có thể thay đổi.

+0

Trên thực tế, mọi người có số dặm với jsdom có ​​thể thay đổi theo mọi phiên bản của jsdom. Thời gian qua tôi đã cố gắng sử dụng nó trên google.com, nó chỉ đơn giản là phát nổ. Nó thực sự cho thấy tuyệt vời mở rộng như thế nào phá vỡ môi trường trình duyệt thực sự là. –

4

Cuối câu trả lời, nhưng tôi chắc chắn nó vẫn có thể có ích cho một số người:

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

Vài ngày trước, tôi đã làm một cái gì đó như thế bản thân mình, và nhận ra nó đã được thực hiện .. Repo này rất khó tìm ngay cả khi tìm kiếm github.

+0

Tôi vừa sửa tên của repo này thành prototype.node.js ... Thành thật mà nói, tôi đã thực hiện nó chỉ để chứng minh cho chính mình rằng điều đó là có thể. Liên kết mới là https://github.com/Rixius/prototype.node.js – Rixius

+0

Tôi đã không chạm vào điều này trong một thời gian, nhưng tôi bắt đầu nó lên để làm cho nó hoạt động trên một xây dựng gần đây của nút và đảm bảo nó hoạt động đúng. – Rixius

+0

Thx, tôi đã chỉnh sửa liên kết. – Robin

0

underscore.js đặc biệt đối với Node.js, mà thực hiện hầu hết các chức năng Nguyên mẫu yêu:

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

của nó nhanh như Prototype bản thân, bởi vì nó không mở rộng bất kỳ built- trong các đối tượng JavaScript.
Do đó, cú pháp là hơi khác nhau:

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

Nếu bạn đang tìm kiếm Nguyên mẫu String các chức năng như trim, có một cái nhìn tại underscore.string

Các vấn đề liên quan