require関数とmodule.paths

  • requireの前に…

    require以前の問題として、hmEdgeJSを実行するためには、

    格納されているフォルダが日本語などマルチバイト文字を含んでいないこと

    という制限があります。
    注意してください。

    require関数で読めるパス

    一般的なnodeのrequire関数と特に変わりませんが、よくあるパターンをここでは解説します。

  • 「.js」からさらに同じフォルダにある別のjsをrequireする

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

      例えば、

      mytest.mac
      #NODE = loaddll( hidemarudir + @"\hmEdgeJS" );
      
      #r = dllfuncw( #NODE, "DoFile", currentmacrodirectory + @"\mytest.js" );
      
      freedll(#NODE);
      

      js側のソース

      mytest.js
      var abc = require("./abc.js");
      

      という記述は、
      mytest.js と abc.js が同じディレクトリにあることで、require することが出来ます。

      このような読み込み方はよくあるパターンの1つでしょう。

  • 「.js」と「同じフォルダにnode_modulesディレクトリ」

    これもnodeを利用していれば、自然なライブラリ構成だという印象を受けることでしょう。
    実行する.jsファイルと同じディレクトリ階層に、node_modulesというサブディレクトリを作成し、
    そのサブディレクトリの中に「.jsファイル」を配置しておけば、
    nodeのパッケージライブラリの仕組みが働きます

    • require("aaa")

      例えば、

      mytest.mac
      #NODE = loaddll( hidemarudir + @"\hmEdgeJS" );
      
      #r = dllfuncw( #NODE, "DoFile", currentmacrodirectory + @"\mytest.js" );
      
      freedll(#NODE);
      
      mytest.js
      var abc = require("aaa");
      

      node_modulesの中に入れるソース

      node_modules/aaa.js
      console.log("テストテスト");
      

      という記述をしたとすると、

      上図のように、mytest.jsと同じフォルダにnode_modulesフォルダを作り、
      そのnode_modulesフォルダの中に aaa.jsをコピーしておけば良いこととなります。

      このように node_modulesフォルダをパッケージの仕組みとして読み込める、ということは、
      hmEdgeJSに含まれない外部のnodejsモジュールを「npmコマンド」でインストール出来る
      ことを意味します。

      詳細は外部パッケージの利用を参照してください。

  • jsonも読み込める

    あまり知られていないかもしれませんが、node.jsのrequire関数は、
    jsonファイルを読み込むことが出来ます。
    hmEdgeJSのrequire関数も、nodeのrequire関数そのものですので、jsonファイルを読み込むことが可能です。

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