【问题标题】:How can I bundle Lua scripts to single file如何将 Lua 脚本捆绑到单个文件
【发布时间】:2019-11-08 14:37:18
【问题描述】:

我需要根据源文件创建单个 lua 文件。

即作为输入,我有一些项目,其中有几个模块使用 require 语句。作为输出,我需要单个 lua 文件(仍然是源文件,但已捆绑),之后我想它不会有任何 require 语句。

我该怎么做?

【问题讨论】:

  • 你把所有脚本的内容都复制成一个?我想你需要脚本文件
  • 如果您使用的模块不是纯 lua,则不能“捆绑”所有内容。为什么要将源“捆绑”到一个文件中?
  • @Nifim 我需要捆绑的地方只消耗单个文件。我想它应该有一些用于捆绑的构建工具。
  • @Piglet 我不能只复制内容,因为某些模块可能需要多次 => 我需要创建依赖关系图等...我希望有用于此类目的的构建工具。
  • 你不能多次要求东西。它们只会被执行一次。这就是 require 的全部目的。如果您想将所有代码放在一个文件中,您可以完全控制整个代码。如果您只有在 Lua 中编写脚本的模块,那么如果您知道 require 做什么,那么该做什么就很明显了。

标签: build lua bundle


【解决方案1】:

遍历所有文件,您可以将 require 函数替换为如下内容:

------------------------------------------------------ HEADER
local files = {}
local globalRequire = require -- Store default require reference
local require = function(path) -- Will return saved file or attempt default lua require
    return files[path] or globalRequire(path)
end
------------------------------------------------------ START FILES
files["file1"] = function(...)
------------------------------------------------------ FILE #1 CONTENTS
local hola = require("file2")
local file1 = {}

return file1
------------------------------------------------------ FILES CONTINUE
end
files["file2"] = function(...)
------------------------------------------------------ FILE #2 CONTENTS
local file2 = {}

return file2
------------------------------------------------------ FOOTER
end
------------------------------------------------------ EOF

请注意,在大多数 lua 文件中,您如何在 EOF 处返回一些内容?这是因为 lua 中的文件在技术上是函数,所以你可以这样做。提供 (...) 三点参数也很重要,因为它也会传递给模块,尽管它通常只包含模块名称。

无论如何,您可以构建一个脚本,将它们组合在一起,它应该可以工作,或者进行一些调整。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 2015-03-31
    • 2012-12-31
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    相关资源
    最近更新 更多