require関数

CommonJS系に沿う形のrequire関数

ECMAScript系の汎用モジュールは、
「require関数で呼ばれる」ということを意識した作りのものが多くなっています。

そこで、本来は、v8エンジンには、require関数は存在しませんが、
特別な対処として、hmV8にはnodejsの実装に近い形でのrequire関数が実装されています。

hmV8のrequire関数の特徴

  • require("abc.js") あるいは require("abdir/abc.js") あるいは require("/abc.js")

    requireの対象が、ファイル名やディレクトリ名もしくは「/」から始めた場合、
    基点ディレクトリとなるのは「今実行中マクロ(.mac)のディレクトリ」です。

  • require("./abc.js") あるいは require("../abdir/abc.js")

    requireの対象が、「./」や「../」から始まる場合は、
    基点ディレクトリとなるのは「hmV8.dllが存在するディレクトリ(通常は秀丸本体のディレクトリ)」です。

  • 変数などを使って絶対パス

    require( hm.Macro.Var["macrodir"] + "/" + "a.js")
    などとすると、「秀丸のマクロ用ディレクトリ(設定してない場合、秀丸本体のディレクトリ)」、

    require( hm.Macro.Var["currentmacrodirectory"] + "/" + "a.js")
    などとすると、「秀丸実行中のマクロのディレクトリ、

    というような「フルパス相当の文字列」で呼び出すことも出来ます。

  • 絶対パスの文字列リテラル

    もちろんこのような変数を使わず、
    require( "C:/mydir/ccc.js" ) や require( "C:\\mydir\\ccc.js" )
    といった完全に文字列リテラルでフルパスを直接記述することも可能です。

jsonも読み込める

node.jsのrequire関数が、jsonファイルを読み込むことが出来る(jsonの内容に従ったJavaScriptのオブジェクトになる)のと同様に、
hmV8のrequire関数も、jsonファイルを読み込むことが可能です。

let data = require("aaa.json");
console.log(data);