
# weshop 工具

## 介绍

模块化开发是一种开发模式，而 weshop 合包工具是为了实现模块化开发这种模式而诞生的CLI工具。

主要解决模块化独立开发后，保证子模块的独立开发和主模块的合包功能能够相互独立，同时提供一些其他的如代码规范校验等功能。

## 安装

安装 weshop

```
npm install -g @wecity/weshop
```
安装结束之后，你可以通过 `weshop -v` 命令来查看版本。

## 环境要求

* node v8+。`node -v` 查看当前的 Node 版本。
* git v2+。`git --version` 查看当前的 git 版本。

## weshop.config.json 配置项说明

```json
{
  // 类型
  "type": "miniprogram",
  // ssh 连接限制
  "sshLimit": 10,
  // 主包配置，仓库地址和分支
  "mainPackage": {
    "url": "xxx/main-app.git",
    "branch": "master"
  },
  // 子包配置，仓库地址和分支
  "subPackages": [{
      "url": "xxx/gss-canlian.git",
      "branch": "master"
    }
  ],
  // 开发依赖，仓库地址/分支/拷贝路径
  "dependencies": [{
      "url": "xxx/gsd-kit.git",
      "branch": "master",
      // 拷贝路径，从哪到哪，from -> to
      "copy": [{
          "from": "dist/components/gsd-ui",
          "to": "components/gsd-ui"
        },
        {
          "from": "dist/components/dgd-sdk",
          "to": "components/dgd-sdk"
        },
        {
          "from": "dist/pages/gsd-ui",
          "to": "pages/gsd-ui"
        }
      ]
    },
    {
      "url": "xxx/main-app.git",
      "branch": "master",
      "copy": [{
        "from": "main-app.js",
        "to": "main-app.js"
      }]
    }
  ],
  // 环境配置，仅支持 dev/test/stage/prod 自由配置
  "env": {
    "dev": {
      // config 内容最终会写入项目的 constant/config.js 进行替换覆盖
      "config": {
        "appid": "xxx",
        "paasid": "gss",
        "projectName": "GSS主框 dev 环境",
        "domain": "https://xxx.cn",
	"cdnDomain": "https://xxx.com"
        // 其他参数可自定义
      }
    },
    "prod": {
      "config": {
        "appid": "",
        "paasid": "gss",
        "projectName": "主框 prod 环境",
        "domain": "https://xxx.cn",
	"cdnDomain": "https://xxx.com"
      },
      // CDN 配置
      "cdn": {
        // 图片域名
        "publicPath": "https://xxx.com/",
        // 是否根据 URl 路径生成文件夹，默认是 true
        "dirs": true,
        // 最大可接受的图片（告警）
        "maxSize": 51200,
        // 哪些图片不需要 CDN 处理
        "excludes": [
          "markers",
          "home-icon"
        ]
      },
      // 压缩配置
      "uglify": {
        // 是否去除 console（耗时）
        "dropConsole": false,
        // 哪些文件无需压缩
        "excludes": [
          "thrid/echarts/index.js"
        ]
      }
    }
  },
  // 支持修改微信全局函数
  "wxFn": {
    "Page": "getApp().sdk.Page"
  }
}

```

## 命令简介

```bash
# 合并
weshop a --env dev

# 本地代码合并
weshop a -d

# 更新依赖
weshop u

# 检查代码
weshop lint

# 查看更新日志
weshop changelog
```

## 更新命令 update

更新依赖，读取 weshop.config.json 里 dependencies 配置的依赖，并更新到当前项目的指定目录

### 使用方法

``` bash
weshop update
# 简写命令 weshop u
```

### 注意事项

::: tip 优先使用主模块的 weshop.config.json
- 对于子模块更新依赖时， weshop 会先从主模块拉取一份最新的 `weshop.config.json` 文件，然后根据这个文件来进行更新。
- 对于子模块 `weshop.config.json` 只有第一行的 `mainPackage` 修改是有效的，可以通过修改 `branch` 来决定拉取主程序哪个分支的 `weshop.config.json`。
:::

::: tip 更新失败？
由于 `Window` 系统下的 `微信开发者工具` 会占用当前项目的文件，因此 `Window` 用户使用 `update`、`assemble` 命令的时候，需要先关闭 `微信开发者工具`。
:::

## 合包命令 assemble

将主模块和子模块合并成一个小程序

### 使用方法

``` bash
weshop a
# 详细命令 weshop assemble
```

### 环境选择

参数使用方法是 `--env <env>` 。根据 `weshop.config.json` 里的 `env` 参数来切换合包环境，目前可选环境有 `stage` `test` `prod` `test`。默认是 `dev` 环境。

``` bash
weshop a --env prod
```

### 本地合包

进行本地合包时，会选择使用本地的代码进行合并，方便进行合包调试。

```bash
weshop a -d
```

### 注意事项

使用合包命令 `weshop a` 时，主模块还是子模块会稍微有不同的实现。

#### 1. 主模块

主模块下，`subPackages` 的配置才会生效，可以自行选择需要合包的仓库。合包结果包含主模块和 `subPackages` 里的所有项目。

#### 2. 子模块

子模块下，会根据 `mainPackage` 和 `dependencies` 的配置来拉取对应的主模块和组件依赖。合包结果**只包含当前子模块和主模块**。

## 更新命令 update

可以更新依赖文件，还可以更新主模块的 weshop.config.json / main-app.js 等依赖文件

``` bash
weshop update
```

## 初始化脚手架 init

初始化前，请先确定 ~/.weshoprc.json 已经配置了 `template.main` 和 `template.sub` 的仓库地址。

```bash
weshop init
```

## 本地配置 config

``` bash
weshop config      		查看命令
weshop config list 		查看配置
weshop config get <key>         获取配置
weshop config set <key> <value> 设置配置
weshop config delete <key>      删除配置
```
