命令行参数
2014年03月30日 21:10GMT+8
主要描述 haxe, haxelib, nekotools 三个命令, haxe 命令行会经常在 .hxml 文件中用到
haxedoc
haxedoc 命令已经被弃用,而改用了另一个叫haxelib dox, 但是 生成 xml 还是用的 haxe -xml 命令
haxelib
haxelib 用于管理 haxe库, haxelib run libname
可以调用指定库下边的 run.n 文件, 并将当前命令行路径作为最后一个参数传递.
以 haxelib run 运行的命令, 内部的 Sys.getCwd() 将返回 libname 所在的绝对路径,而不是调用的当前路径, 当前路径为 args 最后一个参数
而以 neko run.n 调用的命令 内部的 Sys.getCwd() 将则指向当前路径.
那么问题是如何区分应用是以 haxelib run %libname% 运行的还是以 neko %APP% 运行的??? 似乎没有办法
-
当一个 haxelib 有 ndll 目录时, haxelib path libname 会有一个 -L 的定义指向这个 ndll 目录.
-
命令行下只输入
haxelib
将显示一些帮助信息. -
命令行, 注: 很多命令是交互式的, 会提示你如何操作
Haxe Library Manager 3.3.0 - (c)2006-2016 Haxe Foundation Usage: haxelib [command] [options] Basic install : 在线安装指定库, 或 hxml 文件中的所有库 upgrade : 在线更新所以已经安装了的库 update : 在线更新指定库 remove : 移除指定库(从磁盘上删除 haxelib 根目录中的库,但不会删除外部的 dev 库) list : 列出指定库或名称相匹配的库(如果指定参数) set : 设定库的版本, 用于多个版本库的选择, 注意:如果通过 haxelib dev 指定了开发版本, 那么 dev 版本仍优先于指定的版本号 Information search : 在线搜询名称相关库, info : 在线列出指定库的详细信息, 全名匹配, 例: haxelib info lime user : 列出指定用户的信息及这个用户提交的所有 haxe 库. config : 打印 haxelib 仓库所在目录(绝对路径) path : 得到指定库的所在路径(绝对路径), 库的版本信息, 及 ndll 库目录(如果有的话) version : 当前 haxelib 自身版本 help : 显示可选列表 Development submit : 提交或更新自已写的 haxe 库到 haxelib 服务器 register : 注册 haxelib 新用户 # 注: 这个命令已经弃用,你可能需要自已解压然后用 haxelib dev 命令 # local : 离线方式安装库, 压缩包名字随意. 例: haxelib local xxx.zip dev : 设置指定目录为库, 常用于 fork 别人的库 例: haxelib dev some dir git : 连接下载 git 版本库, 需要 git 命令支持 hg : use Mercurial (hg) repository as library Miscellaneous setup : 设置 haxelib 仓库路径(默认为 haxe 根目录的 lib) newrepo : [EXPERIMENTAL] create a new local repository deleterepo: delete the local repository,(与 newrepo 一起) selfupdate: 更新 haxelib 自身 convertxml: 转换 haxelib.xml 文件为 haxelib.json run : 运行指定类库下的 run.n 文件 proxy : 设置 Http 代理. Available switches --flat : do not use --recursive cloning for git --always : answer all questions with yes --debug : run in debug mode --quiet : print less messages, imply not --debug --never : answer all questions with no --global : force global repo if a local one exists # ============== 一些常用命令 ============== haxelib info lime # 在线查询列出关于 lime 库的信息 haxelib list # 列出本地所有安装包,用`[]` 中适号包含着的为当前所使用版本 haxelib list li #列出本地包含 li 字符的库有哪些,其一些其它信息 haxelib install haxepunk #在线安装名为 haxepunk 的库 # haxelib local some.zip #安装已经下载到硬盘上的库,通常用为 zip 格式, zip文件名随意 haxelib update stablexui #在线更新名为 stablexui 的库 haxelib upgrade #连网检测所有本地库是否存在更新,并提示是否更新 #下边命令是指定一个库的开发目录 #当你修改 某一个库的源码时,可以先复制一份到其它目录 #然后用 haxelib dev 指定使用这个目录的文件作为开发 haxelib dev libname directory_name haxelib dev haxeui G:\dev-haxeui # 以后调用 haxeui 库时将使用 G:\dev-haxeui 下的文件 # haxelib list haxeui 可以显示 haxeui 信息,是否使用了 dev haxelib dev haxeui #不带目录名 从dev模式中切换回来 haxelib selfupdate # 更新 haxelib 自已 haxelib remove libname #删除库,这个库将会从磁盘移除 haxelib run libname #运行 libname库目录下 编译为neko平台的 run.n 文件
-
开发并上传库 见:haxe.org/com/haxelib
一些库通过 haxelib.json 文件的 dependencies 可能指定了依赖库版本,这使得 dev 版本会被认为是旧的版本,因此对于 git 库可能需要以 haxe git 的方式安装.
hxml
hxml 就是将命令行下输入的 haxe 命令的文件形式, 需要注意的是 有一个特殊的叫 extraParams.hxml
的文件, 这个文件一般在一些 haxelib 中可以见到(和 haxelib.json 位于同级目录), 用于当使用 -lib libname 编译时附加一些编译参数. 如果是基于 openfl 的项目库,那么这个特殊文件将是 include.xml
hxml 的内容为 haxe –help 中的命令. 注释用 # 符号.简单示例:
# 这个符号后接的为注释内容
--macro Sys.println('Begin...')
-cp src
-lib format
-main Main
-js main.js
nekotools
nekotools 是一个安装 haxe 时附带的工具,nekotools 很简单只有二个命令
-
nekotools server
建立一个 web 服务器,可以用于 http 服务,这样可以不再依赖 apache 或 nigixnekotools server 不仅仅能将 html 输出到浏览器,还能处理 neko 文件并输出.
#做网页相关的东西时,很多功能需要以 http 的形式访问才能正常. #不带参数快速绑定当前目录到 localhost:2000 nekotools server # 绑定 d:\dev 目录到 0.0.0.0:80 nekotools server -p 80 -h 0.0.0.0 -d d:\dev
-
nekotools boot
将 neko平台的 .n 文件转换成独立的 exe 文件转换成的 exe 文件,需要 neko 环境才能运行(安装了haxe), 如果没有, 可以复制 neko 所需要的 dll 文件和 exe 文件放同一目录就行了.
haxe
-
Haxe Compiler 3.2.0 - (C)2005-2015 Haxe Foundation Usage : haxe.exe -main <class> [-swf|-js|-neko|-php|-cpp|-as3] <output> [options] Options : # 添加源码目录, 通常我们习惯将源码放置于 src 目录下, 所以能经常看到 -cp src -cp <path> : add a directory to find source files # 编译代码为 javascript 平台的 .js 文件 -js <file> : compile code to JavaScript file # haxe 3.3 -lua <file> : compile code to Lua file # 编译代码为 flash 平台的 .swf 文件 -swf <file> : compile code to Flash SWF file # 解析代码为 flash 平台的 .as3 源码, 指定输出目录 -as3 <directory> : generate AS3 code into target directory # 编译代码为 neko 平台的 .n 文件 -neko <file> : compile code to Neko Binary # 编译代码为 php 平台的 .php 文件, 指定输出目录 -php <directory> : generate PHP code into target directory # 编译代码为 c++ 平台的 .cpp 文件, 指定输出目录, # 第一次编译时可能会花上一段时间, Tips: 可以编译成 neko 平台用于快速测试. -cpp <directory> : generate C++ code into target directory # 构建 cppia 平台代码到文件, 这个平台可以快速测试 cpp -cppia <file> : generate Cppia code into target file # 编译代码为 c# 平台的 .cs 文件, 指定输出目录, 需要安装 hxcs 库 -cs <directory> : generate C# code into target directory # 编译代码为 java 平台的 .java 文件, 指定输出目录, 需要安装 hxjava 库 -java <directory>: generate Java code into target directory # haxe 3.2+ 编译代码为 python -python <file> : generate Python code as target file # haxe 3.3+ -hl <file> : compile HL code as target file # 导出代码API注释内容为 xml 文件 -xml <file> : generate XML types description # 指定入口文件 -main <class> : select startup class # 使用 haxelib, 允许指定库版本 -lib <library[:version]> : use a haxelib library # 编译定义, 如果没有指定 value 值, 则值默认为 "1" -D <var[=value]> : define a conditional compilation flag # 详细显示编译过程 -v : turn on verbose mode # debug 模式, 通常会添加一些 debug 信息到编译结果 -debug : add debug information to the compiled code # 编译时清除没有使用的代码,以减少输出文件体积. -dce [std|full|no] : set the dead code elimination mode # 指定 flash 版本, 例: -swf-version 10.3, 或 -swf-version 11.6 -swf-version <version> : change the SWF version (6 to 10) # 指定 flash 文件头, 例: -swf-header 800:600:30:FFFFFF -swf-header <header> : define SWF header (width:height:fps:color) # 添加 swf 库, 文件通常为 swc 格式 -swf-lib <file> : add the SWF library to the compiled SWF -swf-lib-extern <file> : use the SWF library for type checking -java-lib <file> : add an external JAR or class directory library -net-lib <file>[@std] : add an external .NET DLL file -net-std <file> : add a root std .NET DLL search path -c-arg <arg> : pass option <arg> to the native Java/C# compiler -x <file> : shortcut for compiling and executing a neko file # 添加资源文件, 例: -resource path/hello.txt@hello -resource <file>[@name] : add a named resource file # 提示错误 -prompt : prompt on error # 通常放在最后用于编译成功之后执行外部命令, 例: --next -cmd dir -cmd : run the specified command after successful compilation # flash平台, 更严格的类型检测 --flash-strict : more type strict flash API # 编译时忽略所有 trace 语句 --no-traces : do not compile trace calls in the program # 解析 flash 的 swf/swc 库并自动生成 extern class, 感觉是一个自动写 extern class 的工具, 只能用于 flash. # 既然 haxe 能直接使用 swc 库, 个人感觉 就已经不需要 extern class 类了.也就是说 --gen-hx-classes 多余了. # 示例: haxe -swf empty.swf --no-output -swf-lib some.swc --gen-hx-classes --gen-hx-classes : generate hx headers for all input classes # 分隔 haxe 编译, hxml 文件中经常能见到 --next : separate several haxe compilations # 用于 单个hxml文件(或单条CLI命令)的多目标编译, 在 --each 之前的参数将用于所有 --next --each # 通用给IDE 用的, 用于给 IDE 提供 语法智能提示. 例: haxe --display Main.hx@33 # http://haxe.org/manual/cr-completion-overview.html --display : display code tips # 编译但是不输出, 通常用于测试是否能通过编译, 或 导出 API 注释文档(haxe -xml)时用到 --no-output : compiles but does not generate any file # 显示 编译所花费的时间 --times : measure compilation times # 停用 inline 关键字, inline 关键字将被忽略 --no-inline : disable inlining # 停用代码优化 --no-opt : disable code optimizations # 设置主文件名, 默认为: index.php --php-front <filename> : select the name for the php front file # 设置库文件夹名, 文件夹名默认为: lib --php-lib <filename> : select the name for the php lib folder # 为所有类添加字符前缀 --php-prefix <name> : prefix all classes with given name # 映射 package 到 target. 相当于 为 target 取一个别名 package. 例: --remap flash:openfl --remap <package:target> : remap a package to another one # 使用内部宏系统执行, 当不需要指定输出时, # 参看下边 --eval 的示例, 如果不加 --interp 将不会有显示.. --interp : interpret the program using internal macro system --run : 类似于 --interp 例: haxe --run Main arg1 arg2 # 调用 macro 命令, 默认为 macro.Compiler 下的 宏(macro)方法, --macro keep("SomeClass") # 但其实可以是任意方法,例如: --macro Sys.println("Hello World!") # 或者像这样: haxe -cp src --macro Main.main() --macro : call the given macro before typing anything else # 运行代码. https://github.com/HaxeFoundation/haxe/pull/3309 # 就像是 js 里边的 eval("code"), 例如: 可以复制示例粘贴到 CMD中去 # haxe --eval "class Foo{static public function main(){Sys.print('Hello world!');}}" --interp --eval : evaluates argument as Haxe module code # 绑定当前工作目录到 host:port, 用于缓存编译, 适用于大型项目, 减少编译时间, 参看下边示例 # http://haxe.org/manual/cr-completion-server.html --wait <[host:]port> : wait on the given port for commands to run) # 连接端口, 使用缓存编译, 如果文件未发生改动, 参看下边示例 --connect <[host:]port> : connect on the given port and run commands there) # 设置当前工作目录, 这个命令会影响到 缓存编译的 --wait 和 --connect --cwd <dir> : set current working directory # 仅仅显示 haxe 当前版本 -version : print version and exit # 显示 haxe 定义(defines) 清单 --help-defines : print help for all compiler specific defines # 显示 haxe 元标记(metas) 清单 --help-metas : print help for all compiler metadatas -help Display this list of options --help Display this list of options
defines
haxe –help-defines. 使用 -D 设定, 一些和上边重叠的不会再描述. 例如 haxe -dce full
和 haxe -D dce=full
将产生一样的效果.
注意: 如果你想在 条件编译 或 宏代码 中访问这些定义,应该将 减号(-)替换成 下划线(_)
http://haxe.org/manual/compiler-usage-flags.html
HXCPP-DEBUGGER : Include additional information for HXCPP_DEBUGGER
HXCPP-GC-GENERATIONAL : Experimental Garbage Collector
# 在 trace 语句中 打印绝对路径
absolute-path : Print absolute file path in trace output
# 添加 Scout (aka Monocle) 支持. Since SVN r5429
advanced-telemetry : Allow the SWF to be measured with Monocle tool
# 位于 gencpp.ml 中. 因此仅用于 hxcpp, 添加后编译输出的 cpp 代码会有一些类型上的注释
annotate-source : Add additional comments to generated source code
# 新的代码优化器, 以精简代码, http://haxe.org/manual/cr-static-analyzer.html
# 由于在 haxe 3.3 及更高版本默认为打开状态,因此被取消。 你可以参考 no-analyzer
# analyzer : Use static analyzer for optimization
as3 : Defined when outputing flash9 as3 source code
check-xml-proxy : Check the used fields of the xml proxy
core-api : Defined in the core api context
core-api-serialize : Sets so some generated core api classes be marked
with the Serializable attribute on C#
cppia : Generate experimental cpp instruction assembly
cppiaast : Experimental cppia generation based on cpp ast
dce : The current DCE mode
dce-debug : Show DCE log
debug : Activated when compiling with -debug
# 用来给 IDE 提供语法提示用的., 也就是说 #if display #end 之间的内容是提供给代码编辑器
display : Activated during completion
# haxe 3.3+
display-stdin : Read the contents of a file specified in --display
from standard input
dll-export : GenCPP experimental linking
dll-import : GenCPP experimental linking
doc-gen : Do not perform any removal/change in order to
correctly generate documentation
# -D dump=pretty, dump=record(haxe 3.3)
dump : <mode:pretty|record|legacy> Dump typed AST in dump
subdirectory using specified mode or non-prettified
default
dump-dependencies : Dump the classes dependencies
dump-ignore-var-ids : Dump files do not contain variable IDs (helps with
diff)
dynamic-interface-closures: Use slow path for interface closures to save space
erase-generics : Erase generic classes on C#
eval-debugger : Support debugger in macro/interp mode. Allows
host:port value to open a socket. Implies eval_stack.
eval-stack : Record stack information in macro/interp mode
eval-times : Record per-method execution times in macro/interp
mode. Implies eval_stack.
fast-cast : Enables an experimental casts cleanup on C# and Java
# 启用交互式调试的 Flash 内容。它在 SWF 输出中包含调试器标记,并添加额外的调试信息。
# 这也将把 trace 输出重定向到 flashlog.txt, 而不是 swf 中的 Textfiled
fdb : Enable full flash debug infos for FDB interactive debugging
file-extension : Output filename extension for cpp source code
# 更严格的类型检测, 反正加上就是
flash-strict : More strict typing for flash target
# 示例参看 http://old.haxe.org/doc/flash/preloader
flash-use-stage : Keep the SWF library initial stage. To be used together with -swf-lib.
Place objects found on the stage of the SWF lib.
(Not to be used together with -swf-header)
force-lib-check : Force the compiler to check -net-lib and -java-lib
added classes (internal)
force-native-property : Tag all properties with :nativeProperty metadata for
3.1 compatibility
format-warning : Print a warning for each formated string, for 2.x compatibility
gencommon-debug : GenCommon internal
# 使用 `haxe` 名, 作为 flash 的引导类名, 替换掉默认的 boot_xxx 名, 这项定义将会 自动用于编译成 swc 时
haxe-boot : Given the name 'haxe' to the flash boot class instead of a generated name
# 显示 haxe 版本, 注意 在条件编译或宏代码中 需要以 haxe_ver 这种格式
haxe-ver : The current Haxe version value
hxcpp-api-level : Provided to allow compatibility between hxcpp versions
# 作用于 cpp 平台
include-prefix : prepend path to generated include files
interp : The code is compiled to be run with --interp
java-ver : <version:5-7> Sets the Java version to be targeted
#
jquery-ver : The jQuery version supported by js.jquery.*. The
version is encoded as an interger.
e.g. 1.11.3 is encoded as 11103
# 不使用闭包和 "strict mode" 包装代码输出.
js-classic : Don not use a function wrapper and strict mode in JS output
# JS ES5 运行时模式
js-es : Generate JS compilant with given ES standard version (default 5)
js-enums-as-objects : Generate enum representation as object instead of as array
# 创建 source map,即使没有指定 debug 模式
js-source-map : Generate JavaScript source map even in non-debug mode
js-unflatten : Generate nested objects for packages and types
# 使用更少的对象属性构建类, 例如: 默认情况下会创建的类有时似于 Main.a.b.c
# 加这个属性后将为 Main_a_b_c 这样就降低了访问对象的深度
# [注] haxe 3.2 这个已经是默认属性了, 如果想换回以前的默认, 使用 js-unflatten
# js-flatten : Generate classes to use fewer object property lookups
keep-old-output : Keep old source files in the output directory (for C#/Java)
loop-unroll-max-cost : Maximum cost (number of expressions * iterations)
before loop unrolling is canceled (default 250)
lua-jit : Enable the jit compiler for lua (version 5.2 only
lua-ver : The lua version to target
# 参看 haxe --help 中的 --macro
macro : Defined when we compile code in the macro context
macro-debug : Show warnings for potential macro problems (e.g.
macro-in-macro calls)
macro-times : Display per-macro timing when used with --times
# 仅仅只生成 .neko 源代码
neko-source : Output neko source instead of bytecode
neko-v1 : Keep Neko 1.x compatibility
net-target : <name> Sets the .NET target. Defaults to "net". xbox, micro (Micro Framework), compact (Compact Framework) are some valid values
net-ver : <version:20-45> Sets the .NET version to be targeted
# 更改 flash 网络沙箱模式, 定义后将为 只访问网络, 默认为只访问本地
network-sandbox : Use local network sandbox instead of local file access one
# 用于 cpp,java,c# 生成代码但是不编译.
no-compilation : Disable CPP final compilation
no-copt : Disable completion optimization (for debug purposes)
no-debug : Remove all debug macros from cpp output
no-deprecation-warnings: Do not warn if fields annotated with @:deprecated are used
no-flash-override : Change overrides on some basic classes into HX suffixed methods, flash only
no-inline : Disable inlining
no-macro-cache : Disable macro context caching
# 同 --no-opt
no-opt : Disable optimizations
#
no-pattern-matching : Disable pattern matching
no-root : GenCS internal
# 禁用 swf 压缩
no-swf-compress : Disable SWF output compression
# 同 --no-traces
no-traces : Disable all trace calls
#
objc : Sets the hxcpp output to objective-c++ classes.
Must be defined for interop
old-constructor-inline : Use old constructor inlining logic (from haxe
3.4.2) instead of the reworked version.
old-error-format : Use Haxe 3.x zero-based column error messages
instead of new one-based format.
php-prefix : Compiled with --php-prefix
real-position : Disables haxe source mapping when targetting C#
replace-files : GenCommon internal
scriptable : GenCPP internal
shallow-expose : Expose types to surrounding scope of Haxe generated
closure without writing to window object
source-header : Print value as comment on top of generated files,
use '' value to disable
source-map : Generate source map for compiled files (Currently
supported for php7 only)
source-map-content : Include the hx sources as part of the JS source map
# haxe 保留定义, 用户不能定义这项. 因为当 -swf 文件扩展名为 swc时, 将自动定义这项
swc : Output a SWC instead of a SWF
swf-compress-level : <level:1-9> Set the amount of compression for the SWF output
swf-debug-password : Set a password for debugging.
# flash 硬件加速 第 1 级 - 直接
swf-direct-blit : Use hardware acceleration to blit graphics
# flash 硬件加速 第 2 级 - GPU
swf-gpu : Use GPU compositing features when drawing graphics
# 已经移除了与 swf9一起
# swf-mark : GenSWF8 internal
# 嵌入元数据 xml文件到 swf,以便搜索引擎检索信息, 示例: -D swf-metadata=data.xml
# 元数据 xml文件 格式参见 http://www.adobe.com/products/xmp.html
swf-metadata : =<file> Include contents of <file> as metadata in the swf.
# 示例: http://old.haxe.org/doc/flash/preloader
swf-preloader-frame : Insert empty first frame in swf
# 编译时将 private 属性将变成 protected 而不是 public
# 实际上 hx 中的 private 仅仅只用于限制 hx 代码, 生成 swf 后, 都为 public
swf-protected : Compile Haxe private as protected in the SWF instead of public
# 设置 swf 超时时间
swf-script-timeout : Maximum ActionScript processing time before script stuck dialog box displays (in seconds)
swf-use-doabc : Use DoAbc swf-tag instead of DoAbcDefine
sys : Defined for all system platforms
unsafe : Allow unsafe code when targeting C#
use-nekoc : Use nekoc compiler instead of internal one
# 允许在编译时访问注释文档
use-rtti-doc : Allows access to documentation during compilation
vcproj : GenCPP internal
metas
http://haxe.org/manual/cr-metadata.html
@:abi : Function ABI/calling convention (cpp only)
@:abstract : Sets the underlying class implementation as 'abstract' (for cs,java)
# 访问已经声明为 private 的包 类或字段. (注: 不能从外部访问 private class)
@:access : (Target path)Forces private access to package, type or field
# 允许声明的包访问当前包 类或字段
@:allow : (Target path)Allows private access from package, type or field
## http://haxe.org/manual/cr-static-analyzer.html#modules
## 优化配置 文档 # 参数 https://github.com/HaxeFoundation/haxe/blob/development/src/optimization/analyzer.ml
## 最近更新: https://github.com/HaxeFoundation/haxe/commit/d57112a64a5e0f7b867378446702e45cb73d664f
## 局部配置: e.g: @:analyzer(no_simplification) , 注意参数没有引号, 编译时需要指定 "-D analyzer", 这时下边的参数都为打开状态
## 全局配置: 一些参数可以在编译时通过 -D 指定, 例如: -D analyzer-no-const-propagation
# no_check
# no_const_propagation 与 const_propagation "稀疏有条件的常数传播(WIKI)"
# copy_propagation 与 no_copy_propagation - 检测局部变量的别名并替换掉
# code_motion 与 no_code_motion
# no_local_dce 与 local_dce - 检测以及移除局部未使用的变量.
# fusion -
# purity_inference -
# unreachable_code -
# ignore -
# dot_debug
@:analyzer(param) : Used to configure the static analyzer
@:annotation : Annotation (@interface) definitions on -java-lib
imports will be annotated with this metadata. Has
no effect on types compiled by Haxe (java only)
@:arrayAccess : Allows [] access on an abstract
# 见 https://github.com/HaxeFoundation/haxe/issues/4959
# 当你在写一个覆盖标准库的类时(使用 @:coreApi), 你只想覆盖部分方法, 而其它的方法仍旧使用旧的定义
@:astSource : Filled by the compiler with the parsed expression of
the field
# 使用宏构建这个类的子类, 而非当前类
@:autoBuild : (Build macro call)Extends @:build metadata to all
extending and implementing classes
# 当在 Haxe 中声明了一个类(不是extern类)已经存在于 SWF 库, 将会报错. 用这个标记可以覆盖掉 SWF 库的声明.
@:bind : Override Swf class declaration (flash only).
# 示例: @:bitmap("myfile.png|jpg|gif") class MyBitmapData extends flash.display.BitmapData {}
@:bitmap : (Bitmap file path)Embeds given bitmap data into
the class (must extend flash.display.BitmapData) (flash only)
@:bridgeProperties : Creates native property bridges for all Haxe properties
in this class. (cs only)
# 使用宏构建这个类或枚举
@:build : (Build macro call)Builds a class or enum from a macro
@:buildXml : (cpp only)
# 就是允许调用, 主要用于修复: https://github.com/HaxeFoundation/haxe/issues/3218
@:callable : Abstract forwards call to its underlying type(since haxe 3.2)
@:classCode : Used to inject platform-native code into a class (for cs,java)
# 用于 abstract 类型的运算符重载交换, 这个标签应该用于 static 属性的重载才会生效. 参见 @:op
@:commutative : Declares an abstract operator as commutative
@:compilerGenerated : Marks a field as generated by the compiler. Should not be used by the end user (for cs,java)
# haxe 3.2 Dev版, 允许类型参数接受表达式,需要添加 @:generic
# demo1: https://github.com/HaxeFoundation/haxe/blob/development/tests/unit/src/unit/issues/Issue3450.hx
# demo2: https://github.com/HaxeFoundation/haxe/blob/development/tests/unit/src/unit/issues/Issue2958.hx
@:const : Allows a type parameter to accept expression values
# 标识该类为核心类, 被定义为核心的类将会与标准库中(std目录)声明的抽像核心类进行核对. 也就是说 必须实现抽像核心类所有字段.不可以添加字段
# coreApi 的类一般定义在各包的 _std 目录下.
@:coreApi : Identifies this class as a core api class (forces Api check)
# 定义 abstract 核心类型 - 用于包装各平台底层数类型. 对于标记为 coreType 的 abstract 类型,是不需要定义原类型的
@:coreType : Identifies an abstract as core type so that it requires no implementation
@:cppFileCode : Code to be injected into generated cpp file (cpp only)
@:cppInclude : File to be included in generated cpp file (cpp only)
@:cppNamespaceCode : (cpp only)
@:dce : Forces dead code elimination even when not -dce full is specified
# flash 当 release 时强制写入 debug 信息到被标记的字段
@:debug : Forces debug information to be generated into the Swf even without -debug (flash only)
@:decl : (cpp only)
@:delegate : Automatically added by -net-lib on delegates (cs only)
@:depend : (cpp only)
# 如果一个字段或类, 被添加这个标记, 编译器将在编译时输出警告信息
@:deprecated : Mark a type or field as deprecated
# 用在 typedef 上, 使得这个优先被处理, https://github.com/HaxeFoundation/haxe/issues/4825
@:eager : Forces typedefs to be followed early
# 添加在 abstract 关键字前, 生成类似于常量的集合 http://haxe.org/manual/types-abstract-enum.html
@:enum : Defines finite value sets to abstract definitions
@:event : Automatically added by -net-lib on events.
Has no effect on types compiled by Haxe. (cs only)
# JS 将类导出到 window对象 下, 如果 window 未定义,则导出到 export对象(nodejs) 下
@:expose : (?Name=Class path)Makes the class available on the window object (js only)
# 用于即使在使用 --no-inline 参数时,这个元标记也能强制使得 inline 能继续有效
@:extern : Marks the field as extern so it is not generated
# 作用于 enum, 参看 页尾的示例.
@:fakeEnum : (Type name)Treat enum as collection of values of the specified type
# 以二进制的形式嵌入 文件 到 swf 内,
# 例: @:file("a.dat") class MyByteArray extends flash.utils.ByteArray{}
@:file : (File path)Includes a given binary file into
the target Swf and associates it with the class
(must extend flash.utils.ByteArray) (flash only)
# haxe 3.3
@:fileXml : Include xml attribute snippet in Build.xml entry for
file (cpp only)
# 防止类被扩展(extends)
@:final : Prevents a class from being extended
# haxe 3.3, (似乎只对 cpp 有影响, 因为只在 cpp 中会编译成固定结构)
# 看上去不错, 例: var o = @:fixed {a: 1, b:2, c: "some"}; 但好像还是用的 Dynamic 类型
@:fixed : Delcares an anonymous object to have fixed fields
# 嵌入字体文件. 仅支持 ttf 字体文件, 例:
# @:font("font/ceri0553.ttf", "a-zA-Z0-9~!@#$%^&*()_+=-][}{.,;\":><")
# class MyFont extends Font { }
@:font : (TTF path,Range String)Embeds the given TrueType
font into the class (must extend flash.text.Font)
# 用于 abstract 类型 - http://haxe.org/manual/types-abstract-forward.html
@:forward : (List of field names)Forwards field access to underlying type
@:forwardStatics : (List of field names)Forwards static field access to underlying type
# 用于定义 abstract 类, 这个方法必须为 static
@:from : Specifies that the field of the abstract is a cast
operation from the type identified in the function
@:functionCode : (cpp only)
@:functionTailCode : (cpp only)
@:generic : Marks a class or class field as generic so each type parameter combination generates its own type/field
# http://haxe.org/manual/macro-generic-build.html
# 和 haxe.macro.MacroType 一样,参看 https://github.com/HaxeFoundation/haxe/commit/b7d9572cde3cab4629f4854103bcd56f3603d515
@:genericBuild : Builds instances of a type using the specified macro
# 参看 @:setter
@:getter : (Class field name)Generates a native getter function on the given field (flash only)
@:hack : Allows extending classes marked as @:final
@:headerClassCode : Code to be injected into the generated class, in the header (cpp only))
@:headerCode : Code to be injected into the generated header file (cpp only)
@:headerInclude : File to be included in generated header file (cpp only)
@:headerNamespaceCode: (cpp only)
@:hxGen : Annotates that an extern class was generated by Haxe (for cs,java)
# 如果符合条件,则不会被 dce 清除
@:ifFeature : (Feature name)Causes a field to be kept by DCE if the given feature is part of the compilation
@:include : (cpp only)
@:internal : Generates the annotated field/class with 'internal' access (for cs,java)
# 如果你使用了这个标记, 通常是你的 getter,setter 写得不合规范化。因此学习正确的 getter/setter 方式.
@:isVar : Forces a physical field to be generated for properties that otherwise would not require one
@:javaCanonical : (Output type package,Output type name)Used by the Java
target to annotate the canonical path of the type (java only)
# nodejs 的 extern class 经常有 @:native("(require('fs'))"), 由于这样导出的代码不美观, haxe 3.2 将会有新的
# 例: @:jsRequire("fs") , 或加载子项 @:jsRequire("http", "Server") 相当于 js 的 require("http").Server
@:jsRequire 标记 : Generate javascript module require expression for given extern (js only)
# 防止被 dce 清除, 如果在一个 类 上使用, 将影响所有字段, 如果用于字段, 则仅影响当前字段.
@:keep : Causes a field or type to be kept by DCE
# 即使类的所有字段都被 dce 清除,或本身就是一个空类, 都会保留这个空类
@:keepInit : Causes a class to be kept by DCE even if all its field are removed
# 作用于类, 防止当前类和所有子类
@:keepSub : Extends @:keep metadata to all implementing and extending classes
# haxe 3.3
@:luaRequire : Generate lua module require expression for given extern (lua only)
# https://github.com/HaxeFoundation/haxe/commit/cddba88af64b740cd09e105ef5abf6929783e8aa
# 将用大括号包围的代码, 合并出来(即去掉大括号, 因为某些语言大括号内的变量不能被外部访问)
@:mergeBlock : Merge the annotated block into the current scope
# 生成相应的 Flash 元数据, 例: @:meta(Event(name="test",type="Foo"))
@:meta : Internally used to mark a class field as being the metadata field. (flash only)
# LuA, 标识一个外部类表示其将会有多个返回值,
@:multiReturn : Annotates an extern class as the result of multi-return function (lua only)
# 参考 Map.hx, 用于 abstract 配合 @:to, 比较复杂
@:multiType : (Relevant type parameters)Specifies that an abstract chooses its this-type from its @:to functions
# 重写输出类或枚举的包名, 例: @:native("my.real.Cls"). 使它更容易绑定到 extern 类, 可能有不一样的名称.
# 示例 @:native("global") extern class Node {}, 这样在 Haxe 这边调用 Node 而其实输出端调用的是 global
# 但是这个在写字段用于成员字段时, @:native("a.b") 将变为 ["a.b"] 这种形式(只在JS中测试过)
# 注意各平台的 native 可能会有差异,比如 js 和 cpp, 在静态字段上 js 永远会带有类名,而 cpp 则总是全局名
@:native : (Output type path)Rewrites the path of a class or enum during generation
@:nativeChildren : Annotates that all children from a type should be
treated as if it were an extern definition - platform
native (for cs,java)
# 如果用于 cpp, 则不会
@:nativeGen : Annotates that a type should be treated as if it were an extern
definition - platform native (for cs, java, cpp)
@:nativeProperty : Use native properties which will execute even with dynamic usage (cpp only)
@:nativeStaticExtension: Converts static function syntax into member call(cpp only)
# 作用是 代码编辑器(IDE) 将不会对这个字段产生智能提示. 好像只能作于于字段
@:noCompletion : Prevents the compiler from suggesting completion on this field
# 即使有加编译参数 -debug,也不生成 debug 信息到 swf文件,仅适用于 flash
@:noDebug : Does not generate debug information into the Swf even if -debug is set (flash only)
# 防止被文档生成器添加
@:noDoc : Prevents a type from being included in documentation generation
# 防止静态字段,被 * 符号导入, 例 import some.*;
@:noImportGlobal : Prevents a static field from being imported with import Class.*
@:noPrivateAccess : Disallow private access to anything for the annotated expression
# 如果找到其第一个类型, 跨目标允许模块可以被访问. 例:如果目标为 flash, 那么就不可以访问 cpp 包下的类,
# 另一个方法可以做同样的行为 如: --macro allowPackage("sys")
# 但是调用 --macro 很容易引起冲突
@:noPackageRestrict : Allows a module to be accessed across all targets if found on its first type
@:noStack : (cpp only)
@:noUsing : Prevents a field from being used with 'using'
@:nonVirtual : Declares function to be non-virtual in cpp (cpp only)
# 声明 abstract 类型不接受 null 值
@:notNull : Declares an abstract type as not accepting null values
@:ns : Internally used by the Swf generator to handle namespaces (flash only)
# ?定义 class 或 interface 用于与 OBJ-C 代码交互?
@:objc : Declares a class or interface that is used to interoperate with Objective-C code (cpp only)
@:objcProtocol : Associates an interface with, or describes a function
in, a native Objective-C protocol. (cpp only)
# abstract 操作符重载- http://haxe.org/manual/types-abstract-operator-overloading.html
@:op : (The operation)Declares an abstract field as being an operator overload
# 当使用 typedef 定义 结构时, 添加在字段(field) 前表示为 可选字段
# 一种类似于写 形参 方法可以替换掉这个元标记
@:optional : Marks the field of a structure as optional
# 函数重载, 用于 extern class, 允许同一个方法有不同参数.
@:overload : (Function specification (no expression))Allows the field to be called with different argument types
# php7
@:phpClassConst : (php7) Generate static var of an extern class as a
PHP class constant (php only)
@:phpConstants : Marks the static fields of a class as PHP constants,
without $ (php only)
@:phpGlobal : (php7) Puts the static fields of a class in the
global PHP namespace (for php,php)
@:phpMagic : (php7) Treat annotated field as special PHP magic
field (php only)
@:phpNoConstructor : (php7) Special meta for extern classes which does not
have native constructor in PHP, but need a constructor
in Haxe extern (php only)
# Example: var val = @:privateAccess instance.privateFiled
@:privateAccess : Allow private access to anything for the annotated expression
@:property : Marks a property field to be compiled as a native C# property (cs only)
@:protected : Marks a class field as being protected
# 将类的所有字段声明为 public, 这样就可以避免给每一个字段都添加 public (since 3.0)
@:publicFields : Forces all class fields of inheriting classes to be public
# 关于 side-effect 的解释看 http://www.zhihu.com/question/20068456
@:pure : Marks a class field, class or expression as pure
(side-effect free)
@:pythonImport : Generates python import statement for extern classes (python only)
@:readOnly : Generates a field with the 'readonly' native keyword (cs only)
# 加上这个元标记使得 interface 只存在于编译阶段, 生成结果不会包含 interface 相关的代码
@:remove : Causes an interface to be removed from all implementing classes before generation
# 宏条件, 需要满足条件才能访问这个类的所有字段.
# 第一个参数 和接在 #if 或 #elseif 之后的条件标识符一样.
# 第二个参数 为可选, 当不满足条件而自定义的提示信息
# 例: @:require(nodejs) 或 @:require(nodejs, "require haxelib nodejs")
@:require : (Compiler flag [,"custom error message"]) Allows access to a field only if the specified compiler flag is set
# (3.2DEV) https://github.com/HaxeFoundation/haxe/blob/development/tests/unit/src/unit/issues/Issue3753.hx
# 标记于 abstract 类字段用于处理未知字段.
@:resolve : Abstract fields marked with this metadata can be used to resolve unknown fields
# 编译器添加 rtti 信息, 可以通过 haxe.rtti.Rtti.getRtti 检索这些信息
@:rtti : Adds runtime type informations (since 3.2)
# 个人猜测,通过查看 jQuery 的最后二个示例方法上, 估计是用来将 inline 保留到运行时的
@:runtime : ?
# 表明 abstract 类型为运行时类型, 通常用于包装各平台底层类型
@:runtimeValue : Marks an abstract as being a runtime value
@:scalar : Used by hxcpp to mark a custom coreType abstract (cpp only)
# 调用自身 见 javascript 页面
@:selfCall : Translates method calls into calling object directly (js only)
# 当 override flash 的类字段时. 注意 重写 flash 的 setter 时, 返回为 Void. 例: @:setter(endian) function set_endian(endian:String):Void{}
@:setter : (Class field name)Generates a native getter function on the given field (flash only)
# 嵌入声音文件到 swf 文件中去. 例: @:sound("file.wav|mp3") class MySound extends flash.media.Sound{}
@:sound : (File path)Includes a given .wav or .mp3 file into the target Swf and associates it with the class (must extend flash.media.Sound) (flash only)
@:sourceFile : Source code filename for external class (cpp only)
# 使得这个类的实例仅存在于 stack (??? 好像并不起作用)
@:stackOnly : Instances of this type can only appear on the stack(cpp only)
@:strict : Used to declare a native C# attribute or a native Java
metadata. Is type checked (for cs,java)
@:struct : Marks a class definition as a struct. (cs only)
@:structAccess : Marks an extern class as using struct access('.') not pointer('->') (cpp only)
# haxe 3.3 新增 https://github.com/HaxeFoundation/haxe/issues/4526
# 允许以匿名结构的方式初使化一个类
@:structInit : Allows to initialize the class with a structure that
matches constructor parameters
@:suppressWarnings : Adds a SuppressWarnings annotation for the generated Java class (java only)
# haxe 3.4,
@:templatedCall : Indicates that the first parameter of static call
should be treated as a template arguement (cpp only)
@:throws : (Type as String)Adds a 'throws' declaration to the generated function. (java only)
# 用于定义 abstract 类
@:to : Specifies that the field of the abstract is a cast operation to the type identified in the function
@:transient : Adds the 'transient' flag to the class field (java only)
@:unbound : Compiler internal to denote unbounded global variable
@:unifyMinDynamic : Allows a collection of types to unify to Dynamic
@:unreflective : (cpp only)
@:unsafe : Declares a class, or a method with the C#'s 'unsafe' flag (cs only)
@:value : Used to store default values for fields and function arguments
@:void : use Cpp native `void` return type(cpp only)
@:volatile : (for cs,java)
其它
缓存编译
用于绑定目录到指定端口,缓存编译, 这样使得每次编译时不会重新解析所有
### --wait 和 --connect 示例
### -v 将会显示详情,如哪些文件缓存还是编绎了,一般情况不需要添加 -v
# 服务绑定6000端口,用于缓存编译结果
haxe -v --wait 6000
另外打开一个新的 CMD 窗口:
# 连接缓存编译, --times 可以显示编译所花的时间
haxe --times --connect 6000 build.hxml
# 如果为 openfl 项目, 编译时则可以像下边:
lime build flash --connect 6000 --times
实际上 flashdevelop 可以在 工具-> 设置-> HaxeContext
里设置, 将 Completion Mode 改为 CompletionServer 就行了, 这样偶尔会出错, 如果出错,更新(touch)下出错的文件就 ok 了.
一些简单的示例
//@:fakeEnum(Int) 示例
#if (haxe_ver > 3.100)
@:enum abstract KeyLocation(Int) {
var STANDARD = 0;
var LEFT = 1;
var RIGHT = 2;
var NUM_PAD = 3;
}
#else
@:fakeEnum(Int) enum KeyLocation {
STANDARD;
LEFT;
NUM_PAD;
RIGHT;
}
#end
// openfl 的源码 能大量的见到 @:fakeEnum(String)
@:fakeEnum(String) extern enum Endian {
BIG_ENDIAN;
LITTLE_ENDIAN;
}