提供一个小工具,自动将项目中的 lua 代码合并成一个文件

提供一个小工具,自动将项目中的 lua 代码合并成一个文件

工具地址:https://www.npmjs.org/package/lua-distiller

[size=6]lua-distiller[/size]

Intelligently merge multiple lua file into one single lua file by analyzing require
分析 lua 代码中的 require 依赖,将分散的n个 lua 文件拼合成一个单一的 lua 文件
[size=5]Install 安装[/size]
[pre][size=2][font=monaco, monospace][color=#666666][backcolor=#f9f9f8]npm install coffee[color=#333333]-[/color]script lua[color=#333333]-[/color]distiller [color=#333333]-[/color]g[/pre][size=5]Usage 用法[/size]
Use in command line
[pre]lua[color=#333333]-[/color]distill [color=#333333]-[/color]i path[color=#333333]/[/color]to[color=#333333]/[/color]main[color=#333333].[/color]lua [color=#333333]-[/color]o dist[color=#333333]/[/color]dist[color=#333333].[/color]lua[/backcolor][/color][/font][/size][/pre][size=5]Command line options 命令行参数[/size]
[list][li]-h, --help output usage information[/li][li]-V, --version output the version number[/li][li]-o, --output [VALUE] output directory[/li][li]-i, --input [VALUE] path to main entrance coffee file[/li][/list][size=5]How it works 原理[/size]
这个工具采用和 node-coffee-distiller 相同的工作原理,用户给定一个入口文件,这个工具自动递归地分析入口文件中的依赖,然后将依赖和入口文件合并到一个输出结果。
[size=4]这个工具派什么用?[/size]
当 lua 项目在一个完全嵌入的环境中被执行时,需要有一个方便发布快捷的生产环境发布部署载体。这个工具就是为了满足这个需求而设计的。
类似的工具包括 luac -o, luajit, squish, 但是这3个工具都需要手动维护合并列表,这无疑给始终在变化的项目增加了额外的工作量和出错的可能。
[size=4]模拟 require[/size]
lua 的 require 实现是通过调用 package.preload 和 LOADED table 来确保一个模块只被加载一次。当分散的 lua 文件合并成一体之后,不在存在外部需要 require 的文件,因此在合并的文件中采用模拟 require 的方式。 具体而言,使用一个全局变量 __DEFINED table 来保存所有合并入的依赖。然后对每个被合并入的文件都使用(function() end)() 来确保入口方法被执行前,被合并入的方法体已经完成自我的静态初始化。
[size=4]优点[/size]
[list=1][li]自动分析lua代码,无需手工维护合并列表[/li][li]忽略被注释掉的 require[/li][li]自动忽略项目中没有被用到的 lua 代码[/li][li]可以嵌套地合并,比如一个项目中使用到n给第三方代码库,这些代码库都通过 distiller 合并过的话,将他们合并在一起不会产生冲突,是兼容的。[/li][/list][size=4]缺点[/size]
[list=1][li]无法识别运行时程序拼合的模块名,比如 quick-x 中的 require(cc.PACKAGE_NAME … ".functions")是无法被识别的。并且我个人认为运行时拼合模块名是一种风险相对较大的实现,不推荐这样做。[/li][/list][size=5]TODO:[/size]
[list=1][li]增加 lua 基本库的依赖忽略列表[/li][li]增加 luac 的命令行参数[/li][/list][size=5]License[/size]
MIT

好像不错的样子,马克一下:2:

good job :2::2::14:

不错,果断mark

装了半天没装上.:6:

lua-distiller@0.2.3 preinstall /usr/local/node/lib/node_modules/lua-distiller
git submodule update -i -r

npm http GET https://registry.npmjs.org/mkdirp
fatal: Not a git repository (or any of the parent directories): .git
npm ERR! lua-distiller@0.2.3 preinstall: git submodule update -i -r
npm ERR! sh "-c" "git submodule update -i -r" failed with 128
npm ERR!
npm ERR! Failed at the lua-distiller@0.2.3 preinstall script.
npm ERR! This is most likely a problem with the lua-distiller package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! git submodule update -i -r
npm ERR! You can get their info via:
npm ERR! npm owner ls lua-distiller
npm ERR! There is likely additional logging output above.

npm ERR! System Linux 2.6.18-194.32.1.el5
npm ERR! command “/usr/local/node/bin/node” “/usr/sbin/npm” “install” “coffee-script” “lua-distiller” “-g”
npm ERR! cwd /root/software/npm/lua-distiller
npm ERR! node -v v0.10.4
npm ERR! npm -v 1.2.18
npm ERR! code ELIFECYCLE
npm http 304 https://registry.npmjs.org/mkdirp
/usr/local/node/bin/coffee -> /usr/local/node/lib/node_modules/coffee-script/bin/coffee
/usr/local/node/bin/cake -> /usr/local/node/lib/node_modules/coffee-script/bin/cake
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /root/software/npm/lua-distiller/npm-debug.log
npm ERR! not ok code 0

好东西,mark下

不是 git submodule
是 npm package

README 里面有 安装说明的

Install 安装
npm install coffee-script lua-distiller -g

你好,我下载了,使用:npm install coffee-script lua-distiller -g 命令安装出错。
错误和4楼差不多。
MacBook-Pro:node-lua-distiller-0.1.3 xxx$ sudo npm install coffee-script lua-distiller -g
/usr/local/bin/coffee -> /usr/local/lib/node_modules/coffee-script/bin/coffee
/usr/local/bin/cake -> /usr/local/lib/node_modules/coffee-script/bin/cake

lua-distiller@0.2.3 preinstall /usr/local/lib/node_modules/lua-distiller
git submodule update -i -r

fatal: Not a git repository (or any of the parent directories): .git

npm ERR! lua-distiller@0.2.3 preinstall: git submodule update -i -r
npm ERR! Exit status 128
npm ERR!
npm ERR! Failed at the lua-distiller@0.2.3 preinstall script.
npm ERR! This is most likely a problem with the lua-distiller package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! git submodule update -i -r
npm ERR! You can get their info via:
npm ERR! npm owner ls lua-distiller
npm ERR! There is likely additional logging output above.
npm ERR! System Darwin 14.1.0
npm ERR! command “node” “/usr/local/bin/npm” “install” “coffee-script” “lua-distiller” “-g”
npm ERR! cwd /Users/wrx/Desktop/workTool/node-lua-distiller-0.1.3
npm ERR! node -v v0.10.36
npm ERR! npm -v 1.4.28
npm ERR! code ELIFECYCLE
npm ERR! not ok code 0

请问是什么原因?

Mark mark Mark mark