lua require 加载方式与我们现在熟知的路径系统不太一样,想要知道lua require 方法的工作原理也很简单 随便写一个错误的require 代码即可:
1 require("lala");

这样运行会得到一个报错:
 1 1>F:\Git\luatest\metaTest.lua:(56): module 'lala' not found:
 2     no field package.preload['lala']
 3     no file '.\lala.lua'
 4     no file 'D:\Program Files (x86)\LuaStudio\lua\lala.lua'
 5     no file 'D:\Program Files (x86)\LuaStudio\lua\lala\init.lua'
 6     no file 'D:\Program Files (x86)\LuaStudio\lala.lua'
 7     no file 'D:\Program Files (x86)\LuaStudio\lala\init.lua'
 8     no file 'C:\Program Files\Lua\5.1\lua\lala.luac'
 9     no file 'F:\Git\luatest\lala.lua'
10     no file '.\lala.dll'
11     no file 'D:\Program Files (x86)\LuaStudio\lala.dll'
12     no file 'D:\Program Files (x86)\LuaStudio\loadall.dll'
13 Stack Traceback:
14     [C]: in function 'require'
15     F:\Git\luatest\metaTest.lua:56: in main chunk

这里可以很清晰的看见lua require方法搜索一个模块或者文件的流程会依次搜索文件名为lala.lua的文件或者dll
那么这些带有路径的lala.lua文件怎么来的的?很简单lua的模块路径是存在一个全局table package的path和cpath字段里的:
打印一下
1 print(package.path);

运行得到
1 ;.\?.lua;
2 D:\Program Files (x86)\LuaStudio\lua\?.lua;
3 D:\Program Files (x86)\LuaStudio\lua\?\init.lua
4 ;D:\Program Files (x86)\LuaStudio\?.lua;
5 D:\Program Files (x86)\LuaStudio\?\init.lua;
6 C:\Program Files\Lua\5.1\lua\?.luac;
7 F:\Git\luatest\?.lua

1 print(package.cpath);

.\?.dll;
D:\Program Files (x86)\LuaStudio\?.dll;
D:\Program Files (x86)\LuaStudio\loadall.dll

是不是很眼熟,是的当require的时候lua解释器会按照path 和cpath里存储的路径替换“?”去查询是否存在该文件,有则加载脚本或者模块亦或是C库。
了解了加载机制我们就可以很方便的去加载任何我们当前脚本依赖的外部模块:
'require("requiretest.loader");'
但是又一个问题,当我们想要加载当前脚本的上级目录或者其他目录的怎么办,这时候就需要自己去修改或者是添加相对路径,由于require的查询路径都是
存储在package.path中的这样我们就可以自行添加:
1 package.path = package.path ..';..\\?.lua';

测试下:在目录requiretest目录下新建loader.lua,在根目录下新建requiretest2目录并新建loader2.lua:
loader.lua:
1 require("requiretest2.loader2");

loader2.lua:
1 print("requiretest2.loader2");

运行:
1 requiretest2.loader2

在项目实际运用时可以根据需求加入相对目录。

些许浅薄认识 如有不妥之处望请斧正!!!!!

转载于:https://www.cnblogs.com/smallboat/p/5552407.html

Lua require 相对路径相关推荐

  1. Lua require搜索路径指定方法

    在自己的lua文件中,如果使用到了自己写的C库或者第三方库,想让lua编译到自己指定的目录下寻找*.lua或*.so文件的时候,可以再自己的Lua代码中添加如下代码,可以指定require搜索的路径. ...

  2. lua require dofile loadfile区别

    1.dofile与loadfile dofile当作Lua运行代码的chunk的一种原始的操作.dofile实际上是一个辅助的函数.真正完成功能的函数是loadfile:与dofile不同的是load ...

  3. lua/require函数

    Lua提供高级的require函数来加载运行库,lua中的require函数功能主要有: 1.require函数会搜索目录加载文件 2.require会判断是否文件已经加载避免重复加载同一文件. 由于 ...

  4. 扩展 lua require 的行为

    扩展 lua require 的行为 来源 https://blog.codingnow.com/2015/10/lua_require_env.html 今天同事提了个需求,他希望可以给部分 lua ...

  5. android lua loadluafile 相对路径,Lua中的loadfile、dofile、require详解

    1.loadfile--只编译,不运行java loadfile故名思议,它只会加载文件,编译代码,不会运行文件里的代码. 好比,咱们有一个hellofile.lua文件:函数 复制代码代码以下: p ...

  6. nodejs中require的路径是一个文件夹时发生了什么

    node中使用require的时候如果路径是一个文件夹时,或者特殊的情况require('..');require('.'); 这是node实战这本书里说的情况,但是我在node6.9版本中发现不完全 ...

  7. react require图片路径问题

    在require中引用本地图片时需要使用require(require里的值必须为字符串) 本地测试时, 如后端返回图片路径为'../static/img/img1.jpg', 使用props传入显示 ...

  8. vue require动态路径图片报错_Vue 动态生成路由结构

    通常我们比较常用的vue组件加载方式就是通过import引入文件,如:路由懒加载 .静态的import. 一般情况下还是推荐使用import方式引入的,因为这更容易从Tree_shaking 及一些分 ...

  9. Lua的require使用

    一.require的作用 加载指定的模块,相当与#include作用类似,加载了该模块,那么就可已使用模块中的全局函数和全局数据(如表等等)  注:实际上require "xxx" ...

最新文章

  1. ios 将矩形图片裁剪成圆形图片
  2. C语言再学习 -- 运算符与表达式
  3. Android activity-alias 的使用
  4. 如何编写干净流畅的Web API测试
  5. 4位BCD计数器设计
  6. 在 Windows Azure 上部署并定制化 FreeBSD 虚拟机镜像
  7. FNV哈希算法【转】
  8. 洛谷P3613 睡觉困难综合征
  9. ACM-尼姆博弈之取(m堆)石子游戏——hdu2176
  10. 大家为什么去国企后都不想跳槽了?
  11. 2011年3月四级网络工程师笔试试卷 解答思路
  12. bzoj 3119: Book(构造)
  13. swift3.0 coreData的使用-日记本demo
  14. 位图图片转换矢量图的工具:Vector Magic for mac
  15. 直播app源码的搭建,仍有许多问题等待我们去解决
  16. 4.8 数值分析: 牛顿迭代法及收敛分析
  17. Vue中报如下错误Uncaught (in promise) NavigationDuplicated解决方案
  18. #9733;电车难题的n个坑爹变种
  19. 聚合供应链,Saas系统
  20. python导库快捷指令、快速导库、dlib库

热门文章

  1. 安卓手机使用前置摄像头
  2. 专业计算机能力考试 技巧,全国专业技术人员计算机应用能力考试应试技巧
  3. JavaScript或jQuery中使用键盘控制对象运动
  4. 《财富》:盖茨的四项黄金法则
  5. FIR和IIR的区别+差分方程的单位冲激响应(matlab图解)
  6. pyflink的local模式实验记录
  7. pyspark的rdd直接写入mysql
  8. Cython屏蔽GIL锁实践
  9. 08_MinNumberInRotateArrary
  10. pycharm最左侧Tool Buttons显示不全的问题解决