# 工程编译构建


本文介绍light开发命令行工具的release指令。

$ light release -h
  Usage: release -cuegw
  
  工程编译,构建,打包,集成
  
  Options:
    -r --root <root>              指定要运行的工程目录
    -o --output <output>          指定编译文件的输出目录
    -u --uglify                   是否压缩(优化),压缩混淆js和css的内容
    --product                     生产环境的组合优化选项,包含压缩合并以及增加后缀策略
    -c --concat                   是否合并(优化),将资源引用合并为一份,减少http请求数
    -w --watch [watch]            watch功能,检测变化自动打包
    -p --pack [pack]              输出zip包
    -s --suffix                   是否添加反缓存后缀
    -b --browser [browser]        直接打开浏览器,同时打开server
    -e --enable-plugins [e]       是否启用自定义插件
    --stay-still                  是否保持原有状态,如:不打开浏览器
    --env <env>                   指定当前运行的环境变量,读取project.json中的配置
    --package-name <packageName>  指定打包后文件的包名
    --except [except]             打包时指定不要将某些文件夹打入zip包
    --reset                       是否重置环境,将清除目标的编译目录
    --console                     是否展示vConsole,方便开发者调试
    --page <page>                 指定要单独编译或打包的页面
    --only-for <onlyFor>          指定编译或打包的类型(h5/jsn)
    --lazy-compile                是否启用懒编译技术提高首次编译的效率
    --plugins-dir <pluginsDir>    指定自定义插件存放目录
    --debug [debug]               调用debug插件,开启调试模式
    --safe-check [safeCheck]      是否开启安全检查,开启后将在运行时的环境变量中过滤配置信息
    -h --help                     output usage information

release指令涉及工程的编译构建与打包集成,是开发阶段主要使用到的一个指令。

# 参数: -r

light工具的编译构建操作默认是在命令行工具的运行时的当前目录下进行的,编译操作必须在被编译工程的根目录下(根目录下必须有project.json)。如果light工具的运行目录和被编译工程的目录不一致,可以通过-r参数指定最终需要编译的工程。

$ light release -r /tmp/lightproject

# 参数: -o

light工具默认的最终编译资源的输出目录是操作系统的临时目录,操作系统会定期清理临时目录下的资源,这样可以保持lighting不会占据多余的磁盘空间。可以通过如下的方法查看当前操作系统的临时目录:

$ node -e 'console.log(os.tmpdir())'

如果开发者不想使用默认的编译输出目录,可以通过-o参数指定最终编译输出的目录路径:

$ light release -o /tmp/lightproject-dist

# 自定义临时文件输出目录

一般不建议修改默认的资源输出路径,该参数应该仅在需要临时调试目标文件的情形下使用。 lighting工具会清空该目录下的文件,请谨慎输入目录!

# 参数: -u

使用-u参数可以压缩混淆最终的输出资源,起到节省网络流量同时避免代码被copy的双重好处。

# 代码压缩

  • -u参数不能和-w参数一起使用。
  • -u参数在开发调试阶段不要使用,会增加调试运行的难度,不利于排查错误。
  • -u参数一般应该配置-p参数使用。
$ light release -u -p

# 参数: --product

--product是一个生产环境的组合优化选项,包含压缩合并以及增加后缀策略。相当于同时包含了:-u-c-s,一般来说--product应该配合-p参数使用。

$ light release -p --product

# 参数: -w

-w是在开发期经常使用到的一个参数,-w参数开启后,就开启了针对整个light工程代码变更的监听,当开发者触发文件保存后,会在后台唤起编译进程,自动增量编译修改的代码,快速完成整个工程的编译操作。在配合-b参数的情况下,还可以热更新浏览器正在打开的页面,达到快速预览页面的效果。

$ light release -w -b

# 参数: -b

-b选项的意义在于在编译完成之后,会打开操作系统默认的浏览器,并且针对本地资源开启http服务,并在浏览器中打开被开启的http服务地址,以起到直接访问浏览最终运行效果的作用。在配合-w参数的情况下,还可以热更新浏览器正在打开的页面,达到快速预览页面的效果。

$ light release -w -b

# 参数: -p

-p选项可以对最终的编译结果进行zip压包,默认zip包文件输出的目录就是在工程目录的同级目录。

# 代码压缩

  • -p参数不能和-w参数一起使用
$ light release -p

# 参数: -s

-s参数可以在最终html文件中的静态资源追加一个放缓存的hashtag,防止资源被前端浏览器或者中间代理节点缓存。

$ light release -s

# 参数: -e

-e参数可以在触发编译时增加被启用的插件,默认情况下不携带任何-e参数的情况下工具会读取project.json中已经启用插件的配置来运行插件。如果需要临时增加使用的插件可以通过追加-e参数的方法来进行。

$ light release -e proxy

# 参数: --stay-still

--stay-still不可单独使用,只能配合-b参数使用,当启用--stay-still参数时,默认打开浏览器的行为会被阻止,可以避免多次重复打开浏览器及打开页面。

$ light release -w -b --stay-still

# 参数: --env

--env参数用于指定运行时的环境变量的配置,在启动工程时可以通过指定env参数来切换不同的运行环境,所有的env配置必须都预先在project.json中定义。

$ light release -w -b --stay-still --env uat

# 参数: --package-name

--package-name参数不可单独使用,必须配合-p参数使用,当使用package-name参数配置时,可以指定最终的输出zip的文件名称和文件存放路径。

$ light release -p --package-name test.zip
$ light release -p --package-name /tmp/test/test.zip

# 参数: --except

--except参数不可单独使用,必须配合-p参数使用,当使用--except参数配置时,可将最终打包到zip目录下的部分资源目录排除,多个目录之间用;分隔。

$ light release -p --except component

# 参数: --reset

--reset用于重置最终临时的编译目录。目前已经废弃。

# 参数: --console

--console选项是开发调试阶段的一个利器,当在移动端设备中运行时,由于无法查看日志、网络以及错误信息,导致排查问题困难。

--console参数的存在就是为了解决这一问题,在编译时添加--console参数后,light工具会自动在页面内部添加vConsole,在手机端预览打开时,可以看到左下角的绿色角标。点击后可以查看当前页面运行时的日志/DOM/网络/存储等相关信息,便于开发者排查信息。

$ light release --console

# 参数: --page

如果当前被编译的工程存在多张页面时,可以通过--page参数指定需要被编译的页面,以减少最终参数编译的视图的数量,提高编译的效率。

$ light release --page index

# 参数: --only-for

--only-for只针对JSNative工程有效,JSNative工程默认情况下会编译两种输出结果,包括JSN的运行代码和H5的运行代码,如果考虑到最终只有一种运行的形态,可以通过--only-for参数来指定编译最终的输出结果。

$ light release --only-for h5

# 参数: --lazy-compile

--lazy-compile是一项在开发期提高页面编译速度的方案,在开发阶段如果当前视图和页面较多,编译耗时过长,可以使用--lazy-compile参数开关来减少编译的总体耗时,--lazy-compile会默认仅编译home视图,其他视图在被访问到时才会被编译。是一种懒编译的技术。

$ light release --lazy-compile 

# 参数: --plugins-dir

--plugins-dir主要是方便开发者切换所使用的插件的默认存放的位置,通过指定--plugins-dir可以切换编译时的插件环境。

$ light release --plugins-dir /tmp/plugin

# 编译选项组合

light工具中所有的命令选项是可以组合使用的,比如您想既合并又压缩同时添加后缀策略可以使用light release -ucs,开启-b选项同时配合-w选项(即-wb),就可以做到边修改代码,然后浏览器自动刷新看到效果。

  • light release -w -b.......................开发过程中监视文件变更并打开浏览器
  • light release -u -c -s -p.................开发完成后打包输出生成配置包

# 参数: --debug

执行 light release --debug 4000 可以直接调用debug插件,开启调试模式。

$ light release -wb --debug //默认开启4000调试端口
$ light release -wb --debug 4040 //开启4040调试端口
$ light release -wb 3100 --debug //开启4100调试端口
$ light release -wb 3100 --debug 4040 //开启4040调试端口

# 参数: --safe-check

--safe-check 表示开启安全检查,在运行时环境变量 __ENV__ 中仅保留指定环境的配置信息,默认环境为 default

$ light release -wb --safe-check //默认保留`default`配置信息
$ light release -wb --safe-check --env prod //保留`prod`配置信息
$ light release -p --safe-check //默认保留`default`配置信息
$ light release -p --safe-check --env dev //保留`dev`配置信息