2014-04-04 14 views
6

Tôi đang cố gắng để có được Swig (ngôn ngữ mẫu) hoạt động trên Parse Cloud Code bằng Express. Parse Cloud Code là một máy chủ Node/Express không cho phép NPM. Vô lý, tôi biết. Tôi vẫn có thể tải các tập tin bên ngoài vào mã với yêu cầu báo cáo tuy nhiên, vì vậy tôi nghĩ rằng có hy vọng tôi có thể làm việc này.Ghép nối gói NPM thành một tệp JS

Vì vậy, câu hỏi của tôi là làm thế nào để tôi nhận được toàn bộ toàn bộ gói Uống một lân vào một tập tin JS duy nhất mà tôi có thể bao gồm từ ứng dụng Parse Express như sau:

var swig = require("./cloud/swig.js"); 

Cần lưu ý rằng Parse phá vỡ bình thường yêu cầu báo cáo để rằng gói NPM là-không hoạt động mà không sửa đổi mỗi và mọi tệp trong thư mục node_modules có cloud trong đường dẫn của nó (đó là lý do tại sao đường dẫn trên của tôi có cloud trong đó). Phân tích cú pháp cũng chokes trong khi tải lên rất nhiều tệp nhỏ. Ghép nối là một nhu cầu trên nền tảng này.

Tôi đã thử chơi với trình duyệt trong nhiều giờ, nhưng không có sự kết hợp của bất kỳ điều gì tôi làm đều làm hiển thị đối tượng Swig khi tôi tải tệp được duyệt bằng tuyên bố yêu cầu. Tôi nghĩ rằng nó có thể là lựa chọn đúng kể từ khi các tập tin trình duyệt bao gồm tất cả các tập tin từ Swig, nhưng nó không phơi bày chúng bên ngoài.

Câu hỏi của tôi là điều này có thể được thực hiện trong trình duyệt, và nếu có thì làm cách nào? Hoặc là có một cách khác để ghép nối một repo NPM xuống một tập tin để nó có thể dễ dàng được bao gồm từ nền tảng này?

Cảm ơn rất nhiều.

+0

Có thể bạn có thể thử sử dụng phiên bản trình duyệt của swig. [swig.js] (http://paularmstrong.github.io/swig/js/swig.js), [swig.min.js] (http://paularmstrong.github.io/swig/js/swig.min .js) và [document] (http://paularmstrong.github.io/swig/docs/browser/). – bnuhero

+0

Bạn đã thử sử dụng [index.js] (https://github.com/paularmstrong/swig/blob/master/index.js) làm điểm vào BFy của bạn chưa? Các tập tin đầu ra - bạn sẽ có thể yêu cầu đó, trong dự án ParseCloud của bạn. – Zasz

+0

thay đổi lưu trữ? hoặc nếu nó không phải là một lựa chọn cho bất cứ lý do gì, zip/unzip? browserify sẽ không thực hiện các trick - bạn cần cấu trúc thư mục, không phải là một tập tin duy nhất. – esp

Trả lời

0

Trình duyệt không phải là công cụ thích hợp cho công việc.

Như tên của nó, trình duyệt được thiết kế để sử dụng để tạo tệp bạn muốn thực thi trong trình duyệt. Nó đi theo yêu cầu cuộc gọi từ một entrypoint (tức là một số tập tin JS bạn vượt qua để trình duyệt) và bó chúng trong một đối tượng mà bản đồ tên của họ để chức năng gói các mô-đun. Nó không mong đợi một chức năng require đã tồn tại và không sử dụng bất kỳ chức năng nào. Nó thay thế việc thực hiện riêng của mình là require mà chỉ thực hiện một điều: tra cứu tên từ gói, thực thi hàm kết hợp và trả về exports của nó.

Bạn về mặt lý thuyết có thể là require một gói trình duyệt, nhưng nó sẽ chỉ trả lại một đối tượng trống (mặc dù nó có thể gây rối với hình cầu). Và trong tất cả các khả năng nó có thể phá vỡ bởi vì các mô-đun đi kèm nghĩ rằng chúng đang được thực hiện trong một trình duyệt. Điều này sẽ không làm tốt.

Tùy chọn lành mạnh duy nhất nếu bạn muốn gắn bó với máy chủ, là sao chép qua thư mục node_modules từ thư mục dự án cục bộ của bạn. Điều này có thể không hoạt động nếu máy tính của bạn và máy chủ không tương thích 100% (ví dụ: 32 bit so với 64 bit, Debian vs RedHat, OSX/Windows so với Linux) nhưng điều này phụ thuộc chủ yếu vào phụ thuộc chính xác của bạn (về cơ bản mọi thứ được xây dựng node-gyp có thể là một vấn đề).

Node.js sử dụng thư mục node_modules khi tra cứu các phụ thuộc trong các cuộc gọi require tự động. Nếu bạn bằng cách nào đó có thể nhận được thư mục node_modules với nội dung phù hợp trên máy chủ, require("foo") sẽ hoạt động miễn là node_modules chứa mô-đun foo.

0

Cuối cùng, bạn đang cố gắng sử dụng các module NPM trong Parse đám mây mã và hiện nay nó không thể:

https://parse.com/questions/using-npm-modules-in-cloud-code

Nhưng nếu bạn chỉ cố gắng sử dụng Uống một lân, sau đó là một công việc xung quanh, bạn có thể xem xét sử dụng underscore template để thay thế. Phân tích cú pháp đã bao gồm gạch dưới:

https://parse.com/docs/cloud_modules_guide#underscore

+0

Bạn không đọc được câu hỏi của tác giả trước khi đăng câu trả lời của bạn, vì anh ấy lưu ý rằng anh ấy không thể sử dụng NPM trong Parse Cloud. Anh ấy không cố gắng sử dụng các mô-đun npm. Anh ta đang cố gắng nối một mô-đun npm vào một tệp duy nhất để có thể yêu cầu nó. Yêu cầu một tệp DOES hoạt động. Thất bại. – FueledPublishing

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