2012-08-09 54 views
0

我目前在Windows中使用node.js構建項目。我正在使用批處理文件來組裝資源並通過命令行構建玉石模板。使用Jade,我使用開關-o來定義填充模板中本地化內容的JS對象。一段時間以後,一切都運行良好。但是,對我的JSON查找所做的更改導致出現以下錯誤: 「輸入行太長」關於Node.JS,Jade模板和Javascript選項對象

研究錯誤,我發現windows shell對您的行可以有多長時間有限制。不幸的是,我需要我的項目的整個查找對象。然而,我開始懷疑玉是否可以接受我的查找文件的路徑,而不是包含文件內容的字符串。目前,我正在創建的內容到一個變量,並調用玉與ALA:

SetLocal EnableDelayedExpansion 
set content= 
for /F "delims=" %%i in (%sourcedir%\assets\english.json) do set content=!content! %%i 
::use the json file as a key for assembling the jade templates 
call jade %sourcedir% --out %destdir% -o"%content%" 
EndLocal 

如果我可以用一個路徑查找文件,它會容易得多。但是,我很有趣如何做到這一點(如果甚至可能的話)。 Jade的文檔有點欠缺。

簡而言之,Jade是否可以接受一個到JS對象的文件路徑而不是包含對象的字符串?有沒有更好的方法來構建玉石的電話,不會超過極限?

+0

爲什麼不讓它在使用時編譯模板? – penartur 2012-08-10 05:01:42

+0

我不太清楚你的意思。你是說編輯每個單獨的模板嗎?我正在嘗試創建一個批處理過程,可以在構建時運行以組裝一個包以進行分發。 – user1026361 2012-08-10 18:34:44

+0

編輯時,請求時不是。爲什麼你想首先「建立」模板? – penartur 2012-08-13 04:55:51

回答

0

編寫一個node.js腳本,它將讀取您的「資產」並將調用一個翡翠。例如:

var fs = require('fs'), 
    _ = require('underscore'), 
    async = require('async'); 

var sourceDir = 'path to the directory with your jade templates', 
    destinationDir = 'path to the directory where you want the result html files to be contained in'; 

async.waterfall([ 
    async.parallel.bind(null, { 
     serializedData: fs.readFile.bind(null, 'assets/english.json'), 
     files: fs.readDir.bind(null, sourceDir), 
    }), 
    function (result, callback) { 
     var data = JSON.parse(result.serializedData), 
      files = result.files; 
     async.parallel(_.map(files, function (file) { 
      return async.waterfall.bind(null, [ 
       fs.readFile.bind(null, sourceDir + file), 
       function (jadeSource, callback) { 
        process.nextTick(callback.bind(null, jade.compile(jadeSource)(data))); 
       }, 
       fs.writeFile.bind(null, destinationDir + file) 
      ]); 
     }), callback); 
    } 
], function (err) { 
    if (err) { 
     console.log("An error occured: " + err); 
    } else { 
     console.log("Done!"); 
    } 
}); 

然後在您的批處理文件中直接調用此腳本,而不是枚舉目錄並手動調用jade。

它不僅可以解決你的問題,但也快得多工作,因爲:

  1. I/O操作並行完成;
  2. Node.js只在構建過程中啓動一次,而不是像現在這樣爲每個文件啓動一次。
+0

我最終用ubuntu虛擬機繞過了這個問題,但這個解決方案確實工作了幾天,直到我構建子彈並轉到Linux環境 – user1026361 2012-09-27 15:04:59