2015-05-29 74 views
0

在一個項目中,我使用CoffeeScript作爲節點,但每當它引發這樣的錯誤,我檢查它不符合coffeescript文件中實際行號的行。我怎樣才能解決這個問題?使用Coffeescript的節點堆棧跟蹤 - 行號不匹配

2015-05-29T09:35:09.793Z - error: [api] TypeError: Cannot call method 'logger' of undefined stack=TypeError: Cannot call method 'logger' of undefined 
    at /path/path-api/src/plugins/file.coffee:286:32 
    at /path/path-api/node_modules/mongodb/lib/mongodb/collection/query.js:159:5 
    at Cursor.nextObject (/path/path-api/node_modules/mongodb/lib/mongodb/cursor.js:742:5) 
+1

的可能重複[我怎樣才能得到行號用的CoffeeScript文件錯誤](http://stackoverflow.com/questions/17311579/how -i-can-line-number-with-error-in-coffeescript-file) – Craicerjack

+0

您使用的是哪個版本的Coffeescript?我也遇到過這個問題,但最近(9-12個月前)版本的Coffeescript變得更好了。 (因爲他們在1.6中添加了源代碼,我認爲) – RyanWilcox

回答

0

Coffeescript轉換爲Javascript,然後由Node.js執行。由於coffeescript及其所有語法糖和縮寫的轉譯生成JavaScript,所生成的代碼看起來有很大不同,因此長度不同。

爲了讓在這個咖啡碼這一點更清晰的外觀:

for a in x 
    dosomethingTM() 

很簡單,兩行代碼。編譯(Transpiling),這樣,JS(最終將執行的Node.js)將導致此:

var a, i, len; 

for (i = 0, len = x.length; i < len; i++) { 
    a = x[i]; 
    dosomethingTM(); 
} 

正如你所看到的,代碼看上去不同,具有的代碼更行。 調試或打印堆棧跟蹤時,您將獲得執行代碼的行號 - 這是JS代碼。爲了在你的coffeescript文件中找到正確的代碼行,你需要一些練習(和良好的結構化代碼)和/或所謂的源地圖。 (http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/?redirect_from_locale=de

您可以編譯CoffeeScript中使用適當的源地圖:http://coffeescript.org/#source-maps