构建 API

merge

  • 接口说明:用于构建配置的合并

  • 接口定义:merge(target, ...sources): Object

    • target: 要合并的目标对象
    • ...sources: 要合入的源对象
    • 可选,该接口最后一个参数也可以传入一个字符串数组,来控制 merge 的策略
  • 默认的 merge 策略:deep merge

    • 如果对应的属性值都是数组,则将所有数组项合并,不会对数组项内容进行深度合并,只是做 concat 操作和去重处理
    • 如果对应的属性值都是普通对象,则递归做 deep merge
    • 如果对应属性值类型不同,或者不同时存在该属性定义,则 source 覆盖 target 属性值。
  • 如果指定了最后一个数组参数,则会对于数组里指定的属性选择器路径,做属性值的覆盖操作,而不是 deep merge 策略。

下述是一个合并构建配置的例子:

  • base.config.js

    1. module.exports = {
    2. component: {
    3. template: {
    4. transformTags: {
    5. 'a': 'navigator'
    6. }
    7. }
    8. },
    9. processors: {
    10. postcss: {
    11. options: {
    12. plugins: ['autoprefixer', 'px2rpx']
    13. }
    14. }
    15. }
    16. }
  • my.config.js

    1. const {merge} = require('okam-build');
    2. /**
    3. * 不 merge 属性选择器,即直接覆盖属性值
    4. *
    5. * @type {Array.<string>}
    6. */
    7. const overridePropertySelectors = [
    8. 'component.template',
    9. 'processors.postcss.options.plugins'
    10. ];
    11. const OUTPUT_DIR = 'quick_dist';
    12. module.exports = merge({}, require('./base.config'), {
    13. component: {
    14. template: {
    15. transformTags: {
    16. 'view': 'div',
    17. 'button': 'my-button'
    18. }
    19. }
    20. },
    21. processors: {
    22. postcss: {
    23. options: {
    24. plugins: ['autoprefixer', 'px2rpx', 'env']
    25. }
    26. }
    27. }
    28. }, overridePropertySelectors);
  • merge 后的配置

    1. {
    2. component: {
    3. template: { // 该属性直接覆盖 base 值
    4. transformTags: {
    5. 'view': 'div',
    6. 'button': 'my-button'
    7. }
    8. }
    9. },
    10. processors: {
    11. postcss: {
    12. options: {
    13. plugins: ['px2rpx', 'env'] // 跟 base 值进行了数组 merge
    14. }
    15. }
    16. }
    17. }

reverseTagMap

0.4 版本开始支持,为了兼容之前的标签转换配置提供的快速兼容转换 API

  • 接口说明:用于构建配置项 component.template.transformTags 的转换

  • 接口定义:reverseTagMap(tagsConf: Object): Object

    • tagsConf: Object 需 reverse 的 tags 配置项
    • 返回转换后的标签转换配置
  • 使用示例

    1. const reverseTagMap = require('okam-build').reverseTagMap;
    2. module.exports = {
    3. // ...
    4. component: {
    5. template: {
    6. transformTags: reverseTagMap({
    7. // 传入配置 key 为转换后的目标 tag,value 为要转换的源标签信息
    8. view: [
    9. {
    10. tag: 'span',
    11. class: 'okam-inline' // 要附加添加的样式信息
    12. },
    13. 'div', 'p',
    14. 'ul', 'ol', 'li',
    15. 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',
    16. 'article', 'section', 'aside', 'nav', 'header', 'footer'
    17. ],
    18. navigator: {
    19. tag: 'a',
    20. class: 'okam-inline',
    21. href: 'url'
    22. },
    23. image: 'img'
    24. })
    25. }
    26. }
    27. }

run

  • 接口说明:用于构建的入口

  • 接口定义:run(appType, options)

    • @param {string} appType: 构建的 appType,可选,默认 swan,默认会优先从命令行读取 type 参数值
    • @param {Object} options: 自定义的构建选项,可选,默认读取当运行目录的构建配置:<cwd>/scripts/<appType>.config.js,如果读取不到,则使用默认内部配置,此外,也可以使用下面介绍的命令行选项的 config 参数指定构建配置的文件
  • 示例

    1. const {run} = require('okam-build');
    2. run();

构建命令行选项

  • --config your-app-config.js: 指定构建配置文件路径

  • --type <appType>: 指定构建的 appType

  • --watch: 使用 watch 模式进行构建

  • --server: 使用开发 server,构建配置里指定 server 配置信息,是无法启动开发 Server,必须命令行参数指定该参数

  • --port <port>: 使用开发 server 监听的端口,未指定会读取环境变量 PORT 值,读取不到,默认使用 8080 端口

  • --clean: 清除旧的构建产物,不包括项目配置文件以及快应用的项目基础架子(只清除快应用构建产物的 src 目录)