2012-11-02 28 views
7

我有一個相當強大的項目,其所有的模板都在Slim和Haml中實現。我正在考慮將項目轉移到基於Node.js的結構(可能構建在Tower.js或類似的東西上,也許是Meteor),但是我想繼續使用Slim或Haml作爲模板,而不是轉移到另一個模板發動機。在Node.js中使用Slim或Haml&Sass/SCSS?

有沒有人做過這個或花了時間來弄清楚到目前爲止如何做到這一點,如果是的話,你的發現是什麼?

回答

1

Tower.js包裹express.js模板引擎系統,所以你應該能夠通過添加使用任何express.js模板引擎下面的配置Tower.View.engine = "haml"

Tower.js使用mint,其中有HAML內置,所以你只需要在你的目錄中的haml module

雖然苗條是有問題的。首先它不在mint.js中,所以你需要註冊一個新的模板引擎。待辦事項,你將需要

  1. 創建一個函數customAdapter是mint.js可以使用,你可以看看mint.js源代碼。繼承人的HAML適配器功能的例子:

    function(content, options, callback) { 
        var result; 
        result = require('hamljs').render(content, options || {}); 
        if (callback) { 
        callback.call(this, null, result); 
        } 
        return result; 
    } 
    
  2. 你需要做require("mint").engines.slim = customAdapter

將適配器添加到mint.js但有薄型沒有express.js引擎,因爲斯利姆包含ruby代碼片段,它不太可能會有。
如果你真的想這樣做,所以你需要爲模板文件創建自己的JavaScript解析器(可能使用類似http://opalrb.org/的東西,但沒有特定的ruby庫),然後創建一個express.js引擎(我不知道如何)。

我懷疑這將是一個非常有成效的練習。
我建議你將你的Slim文件轉換爲haml(或者jade,或者任何可以被express.js使用的模板引擎)或者不要移動。
我也找不到任何方法來自動將Slim轉換爲haml或任何其他模板引擎(可能是因爲它包含ruby代碼),因此您必須完全手動完成轉換。

+0

從我從Slim傢伙那裏聽到的消息來看,Slim應該相對容易實現,但沒有人通過它的機制來解決它。另外,由於近期的更新速度較慢,因此我們基本上放棄了對Tower的觀點,您是否有任何見解將此轉向Meteor vs Tower? – ylluminate

+0

對不起,我不熟悉流星。 Tower.js基本上只是普通模塊之間的粘合劑,它在內部使用express.js來渲染視圖。流星似乎是一個更爲複雜的框架,並混合了服務器和客戶端功能。考慮到這一點,我會想象將現有的應用程序移植到Meteor然後移植到Tower.js會更困難。模板語言也不容易落入流星,儘管有些人已經爲它創建了軟件包(從我對該問題的快速搜索) –