以自定義方式載入 lua 模組

2021-07-02 00:20:07 字數 773 閱讀 2158

今天我們的乙個小專案開始做內部測試發布前的資源打包。這個專案基本上是用 lua 做開發的。整個開發過程中,我們的**是直接把 lua 源**放在專案的發布目錄下的。發布版因為安全或是整潔等種種原因,我們必須給所有的指令碼**打包。

這種事情以前在大話2 裡也幹過,當時用的 lua 4.0 而且也沒多少經驗,我們是直接去修改的 lua 的**,適應我們的打包格式。這次,不想這麼幹了。希望能夠完全不動 lua 官方發布的源**,來最終完成這項工作。

簡單分析了一下,發現實現起來非常簡單:

從 lua 5.1 以後,lua 有了標準的模組管理庫。所以所有的模組載入都是通過 require 來完成。 require 的設計是頗具擴充套件性的,它會從若干個定義好的 loader 中逐個嘗試載入新的模組。系統庫中提供了四個 loader ,分別實現已載入模組,lua 模組,和 c 擴充套件模組(用了兩個 loader 來實現 c 擴充套件模組的載入)。這些 loader 以 cfunction 的形式放在 require 的環境中的乙個 table 裡。

如果我們想改變 lua 模組的載入形式,只需要替換或增加乙個新的 loader 就可以了。

要做的只需要模仿 loadlib.c 中的loader_lua函式做乙個自己的實現,比如在我們的專案中,就允許從自定義格式資料報中,載入乙個被加密過的 lua **檔案。然後寫幾行 c **,獲得 require 的環境(使用lua_getfenv),然後取出其中 "loaders" 這個 table ,把新的自定義 loader 插入到 index 2 的地方。

以自定義方式載入 lua 模組 雲風blog

今天我們的乙個小專案開始做內部測試發布前的資源打包。這個專案基本上是用 lua 做開發的。整個開發過程中,我們的 是直接把 lua 源 放在專案的發布目錄下的。發布版因為安全或是整潔等種種原因,我們必須給所有的指令碼 打包。這種事情以前在大話2 裡也幹過,當時用的 lua 4.0 而且也沒多少經驗,...

Python載入自定義模組

python載入自定義指令碼有如下三種模式 模式1 主函式 main.py 與待引用模組 import1.py 位於同一目錄 import test1 下 則此時直接使用from import1 import 即可將import1模組中所有函式引入 模式2 主函式 main.py 與待引用模組 im...

Lua 呼叫自定義C模組

這是 lua程式設計 中提到的,但是想成功執行,對於初學lua的確沒那麼簡單。這裡涉及如何如何生成乙個動態鏈結庫so檔案 lua5.2中匯出函式從lual register變成了lual newlib。對於具體的細節有待深入。這裡的模組名是hello lib,lua直譯器會根據名字找到對應的模組,而...