lessのエラーハンドリング
function foo() { var e = { name: 'Error', message: 'hoge' }; throw e; } foo();
node.jsでこれ実行すると
node.js:201 throw e; // process.nextTick error, or 'error' event on first tick ^ Error: hoge
こうなるわけなんだけど、エラーの箇所がさっぱりわからんので
function bar() { var e = Error('hoge'); throw e; } bar();
こうしていただくと、まだこっちのほうがわかりやすかったりする。
node.js:201 throw e; // process.nextTick error, or 'error' event on first tick ^ Error: hoge at Error (unknown source) at bar (/Users/hokamura/tmp/err/test.js:2:11) at Object.<anonymous> (/Users/hokamura/tmp/err/test.js:6:1) at Module._compile (module.js:432:26) at Object..js (module.js:450:10) at Module.load (module.js:351:31) at Function._load (module.js:310:12) at Array.0 (module.js:470:10) at EventEmitter._tickCallback (node.js:192:40
lessでそうなってる。
https://github.com/cloudhead/less.js/blob/9eb0423cb2428bb166c962f1362ac727f1d92c7d/lib/less/parser.js#L260-264
しかもこれコールバックを受け取る関数なのにthrowしてるのでさらにやっかいですね:)
その下のこっちのエラーはちゃんとcallbackにわたっているのに。。
https://github.com/cloudhead/less.js/blob/9eb0423cb2428bb166c962f1362ac727f1d92c7d/lib/less/parser.js#L367-379
というか書いてて気づいたけど、そもそもこの関数非同期じゃないぞ。。