除錯underscore.js模板很難沒有行號
我正在將一個相當大的php模板(其中具有基本邏輯的頁面)轉換為一個underscore.js模板.
問題是我在它裡面有錯誤,當被丟擲錯誤時,它的“編譯”版本沒有給出有用的資訊或行號.
有沒有辦法得到更好的模板除錯在underscore.js(如行號)?如果沒有,有沒有辦法讓模板終止一點(這樣我可以縮小錯誤的位置).
和源,因為這裡描述的併發症可能已經顯示出來.
是和否 – 模板首先被翻譯成一個字串(難以閱讀)的Javascript程式碼,並被執行為一個程式碼塊,所以如果你正在尋找一個語法錯誤,你必須從模板中刪除違規程式碼,試圖執行.
但如果是別的東西,嵌入一個<%return __p.join(''); %GT;將中斷執行並返回模板的結果,直到此為止(讀取原始碼以瞭解為什麼,但基本上將模板塊的結果逐個放入名為__p的陣列中). 您還可以在模板評估時進行日誌記錄(即在模板中放置<%console.log(<..>)%>以檢視診斷.有關更高階的故障排除,您還可以將<%偵錯程式;%>在你的模板程式碼中放入你最喜歡的偵錯程式,雖然你會看到的程式碼將不友好地閱讀,你可以訪問評估模板的範圍.
如果我正在做廣泛的工作,需要更多的除錯工具,那麼我可能會拷貝一下undercore.js指令碼,並將一些診斷支援程式碼新增到_.template()函式本身.例如:
_.template = function(str, data) { var c= _.templateSettings; var tmpl = 'var __p=[],print=function(){__p.push.apply(__p,arguments);};' + 'with(obj||{}){__p.push(\'' + str.replace(/\\/g, '\\\\') .replace(/'/g, "\\'") .replace(c.interpolate, function(match, code) { return "'," + code.replace(/\\'/g, "'") + ",'"; }) .replace(c.evaluate || null, function(match, code) { return "');" + code.replace(/\\'/g, "'") .replace(/[\r\n\t]/g, ' ') + "__p.push('"; }) .replace(/\r/g, '\\r') .replace(/\n/g, '\\n') .replace(/\t/g, '\\t') + "');}return __p.join('');"; console.log(tmpl.replace(/;/g, '\n')); // <- dump compiled code to console before evaluating var func = new Function('obj', tmpl); return data ? func(data) : func; };
程式碼日誌版權宣告:
翻譯自:http://stackoverflow.com/questions/6104029/debugging-underscore-js-templates-is-difficult-without-line-numbers