-- 编译一个代码文件
-- loadfile (lua_State *L, const char *filename);
-- 将一个文件加载为lua代码块,仅编译不执行,返回值为编译后的
-- 代码块函数和错误信息。
function COMPILE(file)
local fun, err = loadfile(file);
return fun;
end -- 编译并运行一个代码文件
function LOAD_RUN(file)
return require(file);
end -- 载入一个目录下的所有代码文件(list.lua指明了有哪些文件)
function LOAD_PATH(path)
-- 取得list.lua的地址
local listPath = path .. "/" .. "list"; -- 加载list,需要加载的所有文件名字
local fileNames = LOAD_RUN(listPath); -- 进行加载
local file = {};
for i = , #fileNames do
local bin = path .. "/" .. fileNames[i];
file[fileNames[i]] = LOAD_RUN(bin);
end
return file;
end -- 卸载目录下的所有文件
function UNLOAD_PATH(path)
local listPath = path .. "/" .. "list";
local fileNames = LOAD_RUN(listPath);
local file = {};
for i = , #fileNames do
-- 设置已经被加载的fileNames[i]为空
package.loaded[path .. "/" .. fileNames[i]] = nil;
end -- 回收内存("collect"做一次完整的垃圾收集循环)
collectgarbage("collect");
end -- 重新载入某个文件
function update(file)
local pos = string.find(file,"[^%/.]*$");
local module_name = string.sub(file, pos);
local mod = package.loaded[module_name];
if not mod then
mod = package.loaded[module_name.."M"];
end -- 若该文件为模块,且存在 destruct 方法,则先调用析构方法,再重新加载
if type(mod) == "table" and type(mod.destruct) == "function" then
mod.destruct();
end package.loaded[file] = false;
local ret = require(file); mod = package.loaded[module_name];
if not mod then
mod = package.loaded[module_name.."M"];
end -- 若该文件为模块,且存在 destruct 方法,则先调用析构方法,再重新加载
if type(mod) == "table" and type(mod.init) == "function" then
mod.init();
end -- 回收垃圾
-- 无须开启 gc,否则会导致客户端启动速度变慢,见 SLIMEC-7396
--collectgarbage("collect");
return ret;
end -- 使用代码更新指定文件
function updateByScript(file, script)
local pos = string.find(file,"[^%/.]*$");
local module_name = string.sub(file, pos);
local mod = package.loaded[module_name];
if not mod then
mod = package.loaded[module_name.."M"];
end -- 若该文件为模块,且存在 destruct 方法,则先调用析构方法,再重新加载
if type(mod) == "table" and type(mod.destruct) == "function" then
mod.destruct();
end
package.loaded[file] = false; -- 载入
local ret = loadstring(script)(); -- 若该文件为模块,且存在 destruct 方法,则先调用析构方法,再重新加载
mod = package.loaded[module_name];
if not mod then
mod = package.loaded[module_name.."M"];
end if type(mod) == "table" and type(mod.init) == "function" then
mod.init();
end -- 回收垃圾
--collectgarbage("collect"); return ret;
end -- 重新载入一个目录下的所有代码文件(list.lua指明了有哪些文件)
function RRLOAD_PATH(path)
local listPath = path .. "/" .. "list";
local fileNames = LOAD_RUN(listPath);
local file = {};
for i = , #fileNames do
package.loaded[path .. "/" .. fileNames[i]] = nil;
local bin = update(path .. "/" .. fileNames[i]);
file[fileNames[i]] = bin;
end
return file;
end

complier

lua 文件编译相关工具的更多相关文章

  1. LUA的编译、环境等

    Lua的环境.编译等 Lua命令行 lua命令行选项: -i:进入交互式 -e:执行lua代码 -l:加载库文件 例如使用下面的命令启动lua解释器,可以重新定义lua提示符. lua -i -e & ...

  2. Cocos2d-x使用Luajit将Lua脚本编译成bytecode,启用加密

    http://www.cocoachina.com/bbs/read.php?tid=205802 lua脚本进行加密,查了一下相关的资料 ,得知lua本身能够使用luac将脚本编译为字节码(byte ...

  3. 修改Unity中Lua文件的默认打开程序

    项目中引用了XLua,而Lua文件又是以txt文件结尾的,当修改系统的扩展脚本编辑器为vs后双击lua文件(xx.txt)默认也使用vs打开了,无提示的黑白文本编辑 昨办? -. 后来看到网上有写Un ...

  4. Lua------------------改善Unity编辑器对Lua文件的支持

    原创 2017年03月10日 18:44:22 标签: Unity / lua / 编辑器 952 当前版本的Unity(截至Unity5.5.x)中TextAsset类不支持后缀为lua的文件,将l ...

  5. linux 进阶2--C++读取lua文件中的变量、一维表、二维表

    lua 语言非常灵活,一般把lua 作为脚本文件,会用C++与之进行交互.最重要的是C++代码能读取到脚本中的变量.一维表.二维表. 这样有些参数就可以在lua文件进行更改,而不用重新更改C++代码. ...

  6. Cocos2d-x使用Luajit将Lua脚本编译为bytecode,从而实现加密

    转自:http://www.58player.com/blog-2537-87218.html 项目要求对lua脚本进行加密,查了一下相关的资料 ,得知lua本身可以使用luac将脚本编译为字节码(b ...

  7. Cocos2d-x使用Luajit将Lua脚本编译为bytecode,实现加密 更新

    项目要求对lua脚本进行加密,查了一下相关的资料 ,得知lua本身能够使用luac将脚本编译为字节码(bytecode)从而实现加密,试了一下,确实可行. 以下是使用原生的lua解释器编译字节码: 1 ...

  8. lua文件修改为二进制文件

    注意:lua编译跟luajit编译的二进制文件是不兼容,不能运行的 如果是使用luajit,请直接使用luajit直接编译二进制 第一种:luajit编译(以openresty为例,跟luac是相反的 ...

  9. Ubuntu的多文件编译以及c语言的数组、函数

    闲言少叙,直接切入主题. 一.Linux下的多文件编译(Ubuntu系统). 对于小程序来说,往往一个.c文件就足够了,里面包含了各种主函数和功能函数,以及函数的声明等等.但是这样的弊端主要有两点,一 ...

随机推荐

  1. LeetCode刷题-005最长回文子串

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000.示例 1:输入: "babad"输出: "bab"注意: "ab ...

  2. 开发一个项目之npm

    npm (nodejs平台上写的js模块的管理工具  下载.互相依赖等) npm install 本地项目的node_modules文件夹  , -g  npm config prefix 目录eg: ...

  3. React 轮播图实现

    接到项目, 用react和material-ui实现轮播图. 搜索了一些方法参考, 不论语言/框架的使用,大体上分为两种思路 超宽列表实现法 在原生JS或者JQuery中,轮播图的实现一般是这样子的 ...

  4. static关键字特点

    目录 static关键字特点 静态代码块 static修饰与非static修饰的区别 static关键字特点 随着类的加载而加载 static修饰的变量和方法都会放在方法区中静态区,是属于类的. 静态 ...

  5. SQL优化传送门

    转载:pursuer.chen的SQL Server 容易忽略的错误 链接:https://www.cnblogs.com/chenmh/p/3999475.html

  6. 关于codeforces国内访问卡顿慢的最新解决办法,谷歌字体库/屏蔽facebook链接

    在host里最后加上 方法起源来自于https://blog.csdn.net/qq_40693171/article/details/83623409 但是里面的360字体库已经停运http://w ...

  7. Harbor修改/data目录位置

    由于harbor默认数据存储位置在/data目录,且修改配置文件操作较为复杂,故这里使用软连接的方式将/data目录文件夹内容映射到/app目录下. ln -s /app/harbor/data/ d ...

  8. go语言map操作

    package main import "fmt" func main() { var m = map[int]string{ 90: "优秀", 80: &q ...

  9. VUE 滚动插件(better-scroll)

    1. 概述 1.1 说明 better-scroll是一款重点解决移动端(已支持PC)各种滚动场景需求的插件.例如淘宝聚划算中的类型选择(女装/家纺/生鲜美食等),没有滚动条显示却实现了滚动功能. 1 ...

  10. C#来操作Word

    创建Word: 插入文字,选择文字,编辑文字的字号.粗细.颜色.下划线等: 设置段落的首行缩进.行距: 设置页面页边距和纸张大小: 设置页眉.页码: 插入图片,设置图片宽高以及给图片添加标题: 插入表 ...