2012-11-02 38 views
7

Tôi có một dự án khá mạnh mẽ có tất cả các mẫu được triển khai trong Slim và một chút Haml. Tôi đang xem xét việc chuyển dự án sang cấu trúc dựa trên Node.js (có thể được xây dựng trên đỉnh Tower.js hoặc một cái gì đó tương tự; có lẽ là Meteor), tuy nhiên tôi muốn tiếp tục sử dụng Slim hoặc Haml cho các mẫu thay vì chuyển sang một mẫu khác động cơ.Sử dụng Slim hoặc Haml & Sass/SCSS với Node.js?

Có ai đã làm điều này hoặc dành thời gian để tìm ra cách để thực hiện điều này cho đến nay, và nếu có, phát hiện của bạn là gì?

Trả lời

1

Tower.js kết thúc tốt đẹp các hệ thống động cơ express.js mẫu, vì vậy bạn sẽ có thể sử dụng bất kỳ express.js mẫu động cơ bằng cách thêm dòng sau vào cấu hình Tower.View.engine = "haml"

Tower.js sử dụng mint, trong đó có HAML được tích hợp sẵn, vì vậy bạn chỉ cần haml module trong thư mục của mình.

Mỏng là vấn đề. Đầu tiên, nó không nằm trong mint.js trực tiếp, vì vậy bạn cần phải đăng ký một công cụ mẫu mới. Do đó bạn cần phải

  1. tạo hàm customAdapter mà mint.js có thể sử dụng, bạn có thể xem mã nguồn mint.js. Heres một ví dụ của hàm Haml adapter:

    function(content, options, callback) { 
        var result; 
        result = require('hamljs').render(content, options || {}); 
        if (callback) { 
        callback.call(this, null, result); 
        } 
        return result; 
    } 
    
  2. bạn sẽ cần thêm adapter để mint.js bằng cách làm require("mint").engines.slim = customAdapter

Nhưng không có động cơ express.js cho Slim, và kể từ Slim chứa đoạn mã ruby, nó không có khả năng sẽ có.
Nếu bạn thực sự muốn làm như vậy, bạn sẽ cần tạo trình phân tích cú pháp javascript của riêng mình cho các tệp mẫu (có thể sử dụng một cái gì đó như http://opalrb.org/, mặc dù không có thư viện ruby ​​cụ thể), và sau đó tạo một công cụ express.js (mà tôi không biết làm thế nào để).

Tôi nghi ngờ nó sẽ là một bài tập rất hiệu quả.
Tôi khuyên bạn nên chuyển đổi các tệp Slim của bạn thành haml (hoặc ngọc bích hoặc bất kỳ công cụ mẫu nào có thể được sử dụng bởi express.js) hoặc không thực hiện di chuyển.
Tôi cũng không thể tìm bất kỳ cách nào để tự động chuyển đổi Slim thành haml hoặc bất kỳ công cụ mẫu nào khác (có thể do mã chứa mã ruby), vì vậy bạn sẽ phải thực hiện chuyển đổi theo cách thủ công.

+0

Từ những gì tôi đã nghe từ các chàng trai Slim, nó sẽ được tương đối dễ dàng để thực hiện với Slim, nhưng không ai đã giải quyết nó thông qua các cơ chế của nó. Ngoài ra, bạn sẽ có bất kỳ thông tin chi tiết nào chuyển hướng này về phía Meteor vs Tower vì chúng tôi chủ yếu từ bỏ phần nào trên Tower do các bản cập nhật sắp tới chậm hơn trong thời gian gần đây. – ylluminate

+0

Xin lỗi tôi không quen với Meteor. Tower.js về cơ bản chỉ là một chất kết dính giữa các mô-đun rất phổ biến và nó sử dụng express.js trong nội bộ cho chế độ xem kết xuất. Meteor có vẻ giống như một khung công tác có liên quan nhiều hơn, và trộn lẫn chức năng phía máy chủ và máy khách. Xem xét điều đó, tôi sẽ tưởng tượng sẽ khó khăn hơn khi chuyển một ứng dụng hiện có sang Meteor sau đó đến Tower.js. Templating ngôn ngữ cũng không phải là dễ dàng để thả vào Meteor, mặc dù có một số người đã tạo ra các gói cho nó (từ tìm kiếm rất nhanh của tôi về vấn đề này) –

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