Moles Packer 的命令调用
- 适用版本:>=0.3.0
自 0.3.0 版本起,参数有较大幅度的调整,如欲了解 0.2.1 及之前版本的参数,请查阅“命令调用的早期格式”一节。
快速入门
Moles Packer 安装完成后,将创建两个命令:
moles-packer
用于项目构建,可编译业务代码并将其打包,也可同时创建公包。moles-packer-common
仅用于创建公包及相应的元数据文件。
注意:v0.4.0 之前的版本中,一度曾使用命令名 moles-pack
和 moles-pack-common
。这种命令思路以动词替代命令名中的名词,固然有其合理性,但是违背了命令名与包名尽可能一致的惯例,极易引起混淆,对于使用者不友好,故后来的版本中又恢复了原先的名称。为了向上兼容,0.4.0 及稍后的几个版本仍保留了 moles-pack
和 moles-pack-common
作为正式命令的别名。
# 打印帮助信息。
moles-packer --help
# 显示版本。
moles-packer --version
我们先来完成一些准备工作:
# 创建一个 React Native 项目,如果已有项目,也可以跳过此步骤。
react-native init rn26
# 复制一个 React Native 项目并进行删减。
cp -R rn26 rn26-lite
rm -fr rn26-lite/android
rm -fr rn26-lite/ios
rm -fr rn26-lite/node_modules
# 如果是已有项目,请保留开发过程中自行安装的模块。
通过以下命令,你可以大致了解 Moles Packer 的功能和使用方法:
# 针对 ./rn26 项目执行拆分和打包。
# 指定入口文件为 index.ios.js (即针对 iOS 版本)。
moles-pack \
--input ./rn26 \
--entry index.ios.js \
--output ./build \
--bundle
# 利用原生的 React Native 项目,生成公包及元数据文件。
moles-pack-common \
--input ./rn26 \
--output ./build \
--platform ios \
# 完成后应在 ./build 目录下创建以下文件:
# ./build/moles.common/common.ios.jsbundle
# ./build/moles.common/common.ios.json
# 利用已创建的公包,针对精减版项目执行拆分和打包。
moles-pack \
--input ./rn26-lite \
--common ./build/common \
--entry index.ios.js
--output ./build2 \
--bundle
# 不拆分公包,输出可独立执行的业务包文件。
moles-pack \
--input ./rn26 \
--entry index.ios.js \
--output ./build \
--standalone
我们可以通过命令行参数指挥 Moles Packer 完成简单的、目标明确的构建任务,也可以在项目中添加 .molesrc
配置文件,定义更加复杂的构建任务,请参考“构建配置”一节。
配置文件中的配置项与命令行参数出现冲突时, 命令行参数的优先级高于配置文件。
参数详解
缺省值 是指该选项缺省时,程序默认的选项值。选项值缺省 是指该选项存在但未赋值时,程序默认的选项值。以 --bundle
选项为例:
moles-packer
# 此时,--bundle 选项值为其“缺省值”。
moles-packer --bundle
# 此时,--bundle 选项值为其“选项值缺省”值。
没有值的选项是开关量,缺省代表关闭,附加该参数则代表打开。
--bundle [<bundle.js>]
指示将构建结果合并输出,该文件将被保存在
--output
指定的目录中:OUTPUT/index.ios.jsbundle # 适用于 iOS 平台的业务包或可独立运行的程序包 OUTPUT/index.android.jsbundle # 适用于 Android 平台的业务包或或独立运行的程序包 OUTPUT/index.jsbundle # 跨平台的业务包
注意:Moles Packer 构建的可独立运行的程序包,必须是平台相关的,故其文件名中也包括平台名称。有关平台兼容性的设计,请参考“构建输出的兼容性”一节。
bundle 文件中默认不包含公包模块,除非使用了--standalone
选项。--common-input <path/to/existing/common/dir>
缺省值:false
选项值缺省:moles.common
指定公包目录,并在构建过程中使用该目录中的预制公包及其元数据文件。如果选项值是相对路径,Moles Packer 会 按以下优先级 检索:
优先:PATH.JOIN(--input, --common-input)
其次:PATH.JOIN(CWD, --common-input)
公包目录中应当存在以下文件组合之一:
# 组合一:跨平台公包 [ common.ios.jsbundle ] # iOS 平台公包文件 [ common.android.jsbundle ] # Android 平台公包文件 common.json # 跨平台公包元数据文件 # 组合二:iOS 平台专用公包 [ common.ios.jsbundle ] # iOS 平台公包文件 common.ios.json # iOS 平台公包元数据文件 # 组合三:Android 平台专用公包 [ common.android.jsbundle ] # Android 平台公包文件 common.android.json # Android 平台公包元数据文件
公包目录中的文件组合应当与
--platform
指定的平台匹配。如果不需要创建可独立运行的程序包(未开启--standalone
),可以省略.jsbundle
文件。公包目录应由 Moles Packer 创建,强烈建议不要对其进行修改。
--common-modules <module,names,seperated,by,comma>
缺省值:react,react-native
指定公包中所包含的模块,多个模块之间使用逗号分隔。被指定的模块及其依赖模块都将被纳入公包的范围,同时也被排除业务包之外。react 和 react-native 及其依赖模块、附属模块默认包含在公包内,且不能排除,因此自定义公包模块时,无须添加这两个模块。
--common-output <path/to/export/common/bundle/and/meta>
缺省值:moles.common
指定公包输出目录。
当选项值是相对路径时,如果以.
或..
起始,则相对于当前工作目录;否则认为相对于--output
选项所指定的输出目录。--dev
开发模式下构建的代码,在运行时可以输出更多的调试信息。--entry <entry/file/basename>
缺省值:index.js
指定入口文件名称。
--exec-on-required
当且仅当模块首次被实际使用时,执行其相应的定义程序。
对于基于 CMD 的 NodeJS 程序,这是不言而喻的事,但是为了兼容基于网络的应用场景(比如 web app), Moles Packer 在构建过程中按照 AMD 模式改造了程序的模块化结构。标准的 AMD 模式在模块下载完成时执行其定义函数,对于那些互相耦合、顺序敏感的模块,这会导致代码的逻辑错误,在这种情形下,可以打开--exec-on-required
开关,以使构建输出代码的逻辑忠实于源代码。--help
打印帮助信息。
出现该参数时,其他所有参数将被忽略。-h
等同于--help
。--input <path/to/project/dir>
缺省值:.
(当前目录)指定项目目录。
--minify
默认情形下,Moles Packer 将保持输出代码的可读性,不对其进行压缩和混淆。如需获得更小尺寸的构建结果,请打开--minify
开关。--output <path/to/output/dir>
缺省值:./build
(当前目录的 build 子目录)指定输出目录。
注意:如果该目录不存在,Moles Packer 会自动创建。 如果该目录已经存在,其中的文件有可能被覆盖。--platform ios | android | cross
缺省值:cross
指定构建输出结果适用的操作系统平台。
如果打包结果需要跨平台通用,开发人员须确保业务代码中没有引用平台相关的模块,否则请分别执行命令,以获取平台相关的业务包。--standalone
是否输出可独立运行的 bundle 文件。
该选项应与--bundle
和--platform
选项配合使用。
与早期格式的差异
与 v0.2.0 相比,v0.3.0 的设计思路有所调整,对构建结果的跨平台兼容性予以了更多的关注,这种调整也体现在命令参数的增删之中。
1. 参见“构建输出的兼容性”一节。 ↩