# `octopus-quickapp-sdk`源代录结构及打包发布流程

## 源代码结构
- 项目中除`src/components`目录外，均由快应用开发工具自动生成，`src/components`为快应用广告组件代码。
- `src/pages`目录为示例页面代码，主要用于展示广告组件及测试。

### `src/components`
- `adTag`，广告标签组件，用于显示广告标识及广告商名称，具体内容由接口返回。
- `downloadPanel`，下载面板，广告为下载类型且开发者设置为开启时展示。
- `feedAd`，信息流广告组件。
- `images`，广告组件图片资源。
- `insertAd`，插屏广告组件。
- `rsplash`，开屏广告组件。
- `shake`，摇一摇组件。
- `style`，组件公用样式。
- `utils`，工具类。
- `utils/index`，广告请求、请求后赋值、广告事件、广告策略等方法。
- `utils/device`，获取设备相关详细。
- `utils/base64`，base64编码解码。
- `utils/instance`，基本事件提取。
- `video`，激励视频广告组件。
- `index.ux`，组件主入口，请求广告，根据广告配置，广播及监听组件相关事件响应。


## 打包并发布npm
**开发前请安装依赖**
```bash
npm install 
# or
yarn install 
```

初始状态下，根目录包含`package.json`及`package.publish.json`文件。`package.json`文件为开发依赖及相关启动命令。`package.publish.json`文件为发布npm所需文件。

`package.json`示例

```json
{
  "name": "octopus-ad",
  "version": "2.0.0",
  "description": "Quickapp Sample Template",
  "scripts": {
    // ...
  },
  "dependencies": {
    // ...
  },
  "devDependencies": {
    // ...
  },
  "prettier": {
    // ...
  },
  "husky": {
    // ...
  },
  "lint-staged": {
    // ...
  },
  "keywords": [
    "快应用",
    "快应用示例",
    "快应用模版"
  ],
  "browserslist": [
    "chrome 65"
  ]
}
```

`package.publish.json`示例

```json
{
  "name": "octopus-quickapp-sdk",
  // ====== 发布前一定要修改version ======
  "version": "1.5.1",
  "description": "章鱼快应用广告SDK",
  "files": [
    "components/*",
    "README.md"
  ],
  "keywords": [
    "快应用",
    "广告",
    "章鱼广告"
  ],
  "author": "octopus",
  "license": "ISC",
  "scripts": {
    "published": "gulp published"
  },
  "dependencies": {},
  "devDependencies": {},
  "browserslist": [
    "chrome 65"
  ]
}
```

1. 代码开发完毕后，根目录下运行`npm run pre-publish`，进行项目文件打包及开发、发布`package.json`内容互换
2. 成功运行后，运行`npm login`，按照控制台提示，登录npm账号
3. 登录后运行`npm publish --access public`，发布npm包（**注意version字段，后发布的包版本必须大于上一个版本**）
4. 发布成功后，运行`npm run published`，发布成功后，`package.json`内容互换回开发状态

**执行完第1，2，3步后一定要执行`npm run published`**






