2

tl;dr:カスタム ディレクトリ名パターンを使用して lua パッケージを作成したいのですが、検索パスに問題があります。

問題

Lightroom と同様のモデルに従って、ユーザーがプラグインを作成できるようにしたいアプリケーションがあります。

  • プラグインのデフォルトのセットは次の場所に保存されています<app data>/plugins/<name>.myplugin
  • <name>.myplugin一連のスクリプト、バイナリ、またはその他のリソースを含むことができるディレクトリ バンドルです。
  • プラグインは、さまざまなスクリプトを介して、さまざまな機能をアプリにエクスポートできます
  • エクスポートされた関数の名前はinfo.lua、アプリによって読み取られるファイルに一覧表示されます

私が取り組んでいる問題は、プラグインをパッケージ (モジュール + サブモジュール) または通常のスクリプトとしてラップする最善の方法です。プラグインにはサードパーティのモジュールが含まれている可能性があると思います。

Foo.myplugin/
    info.lua - returns a table with plugin name, version info, list of exported functions, etc
    Foo.lua - defines the main functions exported by this plugin, which calls other scripts:
    UsefulFunctions.lua - used by Foo.lua
    3rdparty/3rdparty.lua - 3rd party module

パッケージ検索パスを設定するpackage.pathと、含める

<appdata>/?.myplugin/?.lua

次に、でパッケージをロードできますFoo=require 'Foo'。ただし、サブモジュールをロードする方法がわかりません。Foo.luaを呼び出すと、UsefulFunctions=require 'UsefulFunctions'lua の検索パスが を検索しようとするため、このロードは失敗しますUsefulFunctions.myplugin/UsefulFunctions.luarequire 'Foo.UsefulFunctions'同様の理由で、どちらでもロードできません。

いくつかのオプション:

  • 1 つの回避策は、各プラグインのパスをパッケージ パスに明示的に追加することですが、2 つのプラグインにそれぞれ同じ名前のサブモジュールが含まれている場合に問題が発生します。
  • 別のオプションは、モジュールを提供するのではなく、通常の lua スクリプトを使用するようにプラグインを作成することですが、これは、各プラグイン内で検索パスを設定する必要があることを意味します。
  • .myplugin代替オプションは、パッケージ検索パスを簡素化するサフィックスを 失うことです。
  • このタイプの検索パスを明示的にサポートするように Lua にパッチを適用する

必要な機能を提供する方法はありますか?

現在、Lua 5.1 を使用しています。5.2 ではパッケージの検索パスをより細かく制御できることは知っていますが、現時点では 5.2 に更新するオプションはないと思います。luabind も使用していますが、これとは関係ないと思います。

4

1 に答える 1