Moles Packer 的命令调用
- 适用版本:>=0.1.9
使用较新版本的用户,请参阅“命令调用”一节以获取匹配的信息。
快速入门
Moles Packer 安装完成后,将创建两个命令:
moles-pack
用于项目构建,可编译业务代码并将其打包,也可同时创建公包。moles-pack-common
仅用于创建公包及相应的元数据文件。
# 打印帮助信息。
moles-pack --help
# 显示版本。
moles-pack --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 \
--common-bundle
# 完成后应在 ./build 目录下创建以下文件:
# ./build/common.jsbundle
# ./build/common.meta.json
# 利用已创建的公包,针对精减版项目执行拆分和打包。
moles-pack \
--input ./rn26-lite \
--common ./build/common.jsbundle \
--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>]
缺省值:false
(即不执行代码合并)
选项值缺省:index.jsbundle
将构建结果合并输出至一个文件,该文件将被保存在
--output
指定的目录中,文件名可以缺省。
bundle 文件中默认不包含公包模块,除非使用了--standalone
选项。--common <path/to/existing/common/jsbundle>
缺省值:false
选项值缺省:无使用预生成的公包文件。如果选项值是相对路径,Moles Packer 会 按以下优先级 检索预生成文件:
优先:PATH.JOIN(--input, --common)
其次:PATH.JOIN(CWD, --common)
该选项应当与--common-meta
选项配合使用。--common-bundle [<common.jsbundle>]
缺省值:false
(即不创建公包文件)
选项值缺省:common.jsbundle
将属于公包的模块合并输出至一个文件,该文件将被保存在
--output
指定的目录中,文件名可以缺省。 Moles Packer 在生成公包的同时,会在同一目录下生成一个与公包文件同名、后缀为 .meta.json 的元数据文件。
该选项必须与--platform
选项配合使用。moles-packer --common-bundle common/index.js # 除了业务文件以外,将生成以下公包文件和元数据文件: # ./build/common/index.js # ./build/common/index.meta.json
未添加该选项时,构建结果中不包含独立的公包文件。
--common-meta <path/to/existing/common/modules/json>
缺省值:false
选项值缺省:无,或根据--common
选项值生成使用预生成的公包元数据。如果指定了
--common
却未指定--common-meta
,那么 Moles Packer 会在前者指定文件所在目录下,检索同名且后缀为 .meta.json 的元数据文件。
该选项与--common-bundle
选项不兼容。--common-modules <module,names,seperated,by,comma>
缺省值:react,react-native
指定公包中所包含的模块,多个模块之间使用逗号分隔。被指定的模块及其依赖模块都将被纳入公包的范围,同时也被排除业务包之外。react 和 react-native 及其依赖模块、附属模块默认包含在公包内,且不能排除,因此自定义公包模块时,无须添加这两个模块。
--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>
缺省值:.
(当前目录)指定项目目录。
--output <path/to/output/dir>
缺省值:./build
(当前目录的 build 子目录)指定输出目录。
注意:如果该目录不存在,Moles Packer 会自动创建。 如果该目录已经存在,其中的文件有可能被覆盖。--platform ios | android
缺省值: 无指定构建输出结果适用的操作系统平台。
Moles Packer 的输出结果中,只有公包是平台相关的1,因此该选项实际上只有与--common-bundle
选项配合使用时才有意义。--standalone
是否输出可独立运行的 bundle 文件。
该选项应与--bundle
选项配合使用,如果未指定--bundle
,则默认输出 bundle 文件至以下路径:// 伪代码 PATH.JOIN(--outut, 'index.jsbundle')
1. 参见“构建输出的兼容性”一节。 ↩