kitak blog

Kみたいなエンジニアになりたいブログ

esmorphでJSの関数の処理開始と終了時に処理を挟む

こんにちは。天下一品をたべました、きたけーです。

esmorphというライブラリをつかうと、既存のJSのコードの関数の処理の開始時と終了時をハンドリングして、自分のしたい処理を挟むことができます。こんなかんじです。
ここでは、関数の名前と定義開始・終了行番号を出力させる処理を挟んでいます。
結果は、処理を挟み込んだ後のJSのコード文字列です。

var esmorph = require('esmorph');
var fs = require('fs');


fs.readFile('./source.js', function (err, source) {
  if (err !== null) {
    return;
  }
  var destination = esmorph.modify(source, [
    esmorph.Tracer.FunctionEntrance(function (fn) {
      return 'console.log("'+[fn.name, fn.loc.start.line, fn.loc.end.line].join(' ')+'");';
    }),
    esmorph.Tracer.FunctionExit(function (fn) {
      return 'console.log("'+[fn.name, fn.loc.start.line, fn.loc.end.line].join(' ')+'");';
    })
  ]);
  console.log(destination);
});

関数の実行時間を計測したり、古くからあるコードを整理するときに実際に呼ばれている関数を調べたりするのに使えそうですね。