{"id":15424875,"url":"https://github.com/newfuture/miniprogram-network","last_synced_at":"2025-04-12T21:33:51.275Z","repository":{"id":37382127,"uuid":"150256522","full_name":"NewFuture/miniprogram-network","owner":"NewFuture","description":"Redefine the Network API of Wechat MiniProgram (小程序网络库)","archived":false,"fork":false,"pushed_at":"2024-11-18T13:35:41.000Z","size":1547,"stargazers_count":115,"open_issues_count":9,"forks_count":11,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-04T04:48:34.852Z","etag":null,"topics":["axios","download","fetch","lifecycle","miniprogram","network","promise","request","typescript","upload","wechat"],"latest_commit_sha":null,"homepage":"https://miniprogram-network.newfuture.cc","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NewFuture.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-09-25T11:44:22.000Z","updated_at":"2025-04-03T00:37:09.000Z","dependencies_parsed_at":"2024-12-04T00:12:43.719Z","dependency_job_id":null,"html_url":"https://github.com/NewFuture/miniprogram-network","commit_stats":{"total_commits":450,"total_committers":8,"mean_commits":56.25,"dds":"0.10222222222222221","last_synced_commit":"f031be05f19b68b08fdd0e449b3fd3b7b30e6c28"},"previous_names":["newfuture/miniprogram"],"tags_count":45,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NewFuture%2Fminiprogram-network","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NewFuture%2Fminiprogram-network/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NewFuture%2Fminiprogram-network/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NewFuture%2Fminiprogram-network/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NewFuture","download_url":"https://codeload.github.com/NewFuture/miniprogram-network/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248636815,"owners_count":21137527,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["axios","download","fetch","lifecycle","miniprogram","network","promise","request","typescript","upload","wechat"],"created_at":"2024-10-01T17:49:09.117Z","updated_at":"2025-04-12T21:33:51.238Z","avatar_url":"https://github.com/NewFuture.png","language":"TypeScript","readme":"# [miniprogram-network](https://github.com/NewFuture/miniprogram-network)\n\n\u003e 小程序网络库,提供完整`代码自动完成` 和 `类型检查`,支持`Promise`、自动`重试`、`缓存`、`取消`、`自定义超时`、`自动暂停恢复`、全局`拦截`、和`事件监听`等……\n\u003e\n\u003e Redefine the network API of Wechat MiniProgram, including full `IntelliSense` and `Type Checking`, with `Promise`,`retry`,`Cache`,`CancelToken`,`timeout`,`ensureOnline`, global `interceptors`, `event listeners` and more.\n\n## Features 主要功能\n\n* [x] Promise\u003cT\u003e泛型Promise支持\n* [x] Retry 网络错误自动重试\n* [x] Cache 底层缓存支持(包括并发请求合并)\n* [x] CancelToken 可取消操作\n* [x] Timeout 自定义超时时间\n* [x] 确保网络可用时发送请求,离线和切换到后台时暂停发送请求\n* [x] timestamp 记录耗时统计(需开启配置)\n* [x] 每个请求的原生回调接口支持(`onHeadersReceived`事件)和(`onProgressUpdate`事件)\n* [x] Interceptors 拦截器 `transformSend`/ `transformRresponse`自定义数据拦截\n* [x] Listeners 全局事件监听`onSend`,`onResponse`,`onRejected`,`onAbort`,`onComplete`\n* [x] 支持全局默认配置和每个请求单独配置\n* [x] 类型推断和代码自动提示(TypeScript)\n\n## Examples 示例\n\n### 安装\n\n```sh\nnpm i miniprogram-network\n```\n\n### JavaScript\n\n\u003e es5 兼容\n\n```js\nconst Network = require('miniprogram-network');\n// 也可使用 es6 import 写法\n\n// setConfig设置所有网络请求的全局默认配置,一次定义，所有文件中使用均生效\nNetwork.setConfig('baseURL','https://miniprogram-network.newfuture.cc/')\n// 也可Network.REQUEST.Defaults,Network.DOWNLOAD.Defaults,Network.UPLOAD.Defaults 分别设置不同默认配置\nNetwork.REQUEST.Defaults.transformResponse = Network.transformRequestResponseOkData\n\nNetwork.get('index.html')\n    .then(res=\u003econsole.log(res))\n    .finally(()=\u003e{console.info('done')}) //支持 finally操作\n\nNetwork.patch('items/{id}',{dataKey:'dataValue'},{\n        params: {id:123456}, // 绑定模板参数\n        retry:3,// 重试3次\n    }).then((item)=\u003econsole.log(item))\n\nNetwork.download('network/','lcoalpath',{\n        onProgressUpdate:progressUpdateCallBack,//进度回调\n        transformResponse: Network.transformDownloadResponseOkData, //状态码2xx成功,返回本地路径\n    }).then(path=\u003econsole.log(path))\n    .catch(console.error)\n```\n\n### TypeScript\n\n\u003e 装完即用，无需额外配置和类型声明\n\n```ts\nimport {setConfig,REQUEST,download,transformRequestResponseOkData,transformDownloadResponseOkData, delayRetry} from 'miniprogram-network';\n\n// setConfig设置所有网络请求的全局默认配置,一次定义，所有文件中使用均生效\nsetConfig('baseURL', 'https://miniprogram-network.newfuture.cc/');\n// 也可通过 REQUEST.Defaults,DOWNLOAD.Defaults,UPLOAD.Defaults 分别设置不同默认配置\nREQUEST.Defaults.transformResponse = transformRequestResponseOkData;\n// 请求发送失败时, 间隔1s再次重试，最多重试2次\nREQUEST.Defaults.retry = delayRetry(1000,2);\n\nREQUEST.get('index.html')\n    .then(res=\u003econsole.log(res))\n    .finally(()=\u003e{console.info('done')}); //支持 finally操作\n\nREQUEST.patch\u003cItem\u003e('items/{id}',{dataKey:'dataValue'},{\n        params: {id:123456}, // 绑定参数\n        retry:3,// 重试3次\n    }).then((item:Item)=\u003econsole.log(item));\n\ndownload\u003cstring\u003e('network/','lcoalpath',{\n        onProgressUpdate: (res)=\u003econsole.log(res), //进度回调\n        transformResponse: transformDownloadResponseOkData, //状态码2xx成功,返回本地路径\n    }).then((path:string)=\u003econsole.log(path))\n    .catch(console.error);\n```\n\n`miniprogram-network`对网络操作做了统一封装，详细操作和用法可查看完整[miniprogram-network 完整文档](network)\n\n* 如果只需要微信request的相关的HTTP操作API可只使用[miniprogram-request(文档🔗)](request)\n* 如果只需要微信downloadFile的相关下载API可只使用[miniprogram-downloader(文档🔗)](downloader)\n* 如果只需要微信uploadFile的相关上传API可只使用[miniprogram-uploader(文档🔗)](uploader)\n\n\n### IntelliSense \u0026 Types 代码提示和类型检查\n\n包含完整的类型定义,结合编辑器(VScode)等,能提供完整的代码提示和自动完成功能。\n\n![Intelligent code completion](https://user-images.githubusercontent.com/6290356/50153198-b569bd80-0300-11e9-859c-5742d070434a.png)\n\n对于TypeScript提供泛型支持,可完整的进行静态类型检查。\n\n\n## Main Packages 所有包 [![Build Status](https://travis-ci.com/NewFuture/miniprogram-network.svg?branch=master)](https://travis-ci.com/NewFuture/miniprogram-network)\n\n\u003e 如果担心包依赖多,可使用[miniprogram-build](https://github.com/NewFuture/miniprogram-build) 打包小程序rollup 精简为单文件。\n\n\n\ntips: 自`miniprogram-network` \u003e= 5.0.0  底层默认不在直接使用`miniprogram-queue`进行队列封装, 如果有需要可自行引用, 或直接使用 v4.x\n\n\u003e * wx.request 自基础库 1.4.0 (2017.07) 小程序开始支持队列\n\u003e * wx.downloadFile 自基础库 1.4.0 (2017.07) 小程序开始支持队列\n\u003e * wx.uploadFile 自基础库 2.4.1 (2018.11) 小程序开始支持队列\n\n![network-dependencies-graph](https://user-images.githubusercontent.com/6290356/58758745-6f24b580-8552-11e9-890d-02c4559eb400.png)\n\n* [miniprogram-network](network) All in one 小程序网络库库合集[![npm version](https://badge.fury.io/js/miniprogram-network.svg)](https://npmjs.com/package/miniprogram-network)\n    * `Request` from `miniprogram-request`\n    * `Upload` from `miniprogram-uploader`\n    * `Download` from `miniprogram-downloader`\n    * 网络缓存和请求合并\n* [miniprogram-request](request) 小程序请求库 [![npm version](https://badge.fury.io/js/miniprogram-request.svg)](https://npmjs.com/package/miniprogram-request)\n    * [x] Promise支持+finally+泛型\n    * [x] CancelToken 取消支持\n    * [x] retry 网络错误重试\n    * [x] Interceptors 自定义请求/响应拦截\n    * [x] Listeners 事件监听\n    * [x] OnHeadersReceived 响应头回调\n    * [x] axios like API\n* [miniprogram-uploader](uploader) 小程序上传库 [![npm version](https://badge.fury.io/js/miniprogram-uploader.svg)](https://npmjs.com/package/miniprogram-uploader)\n    * [x] Promise支持+finally+泛型\n    * [x] Cancelable 可取消\n    * [x] OnProgressUpdate 进度回调\n    * [x] OnHeadersReceived 响应头回调\n    * [x] retry 网络错误重试\n    * [x] Interceptors 自定义请求/响应拦截\n    * [x] Listeners 事件监听\n* [miniprogram-downloader](downloader) 小程序下载库 [![npm version](https://badge.fury.io/js/miniprogram-downloader.svg)](https://npmjs.com/package/miniprogram-downloader)\n    * [x] Promise支持+finally+泛型\n    * [x] Cancelable 可取消\n    * [x] retry 网络错误重试\n    * [x] OnProgressUpdate 进度回调\n    * [x] OnHeadersReceived 响应头回调\n    * [x] Interceptors 自定义请求/响应拦截\n    * [x] Listeners 事件监听\n* [miniprogram-network-life-cycle](life-cycle) 网络操作流程和事件\n    * [x] 事件周期监听器\n    * [x] 事件周期拦截器\n    * [x] 自定义超时\n    * [x] 时间戳打点\n![life-cycle](https://user-images.githubusercontent.com/6290356/49631309-6bddc080-fa2c-11e8-9a41-88fb50b2a1b7.png)\n* [miniprogram-fetch](fetch) 小程序中使用[Fetch API](https://developer.mozilla.org/zh-CN/docs/Web/API/Fetch_API/Using_Fetch) [![npm version](https://badge.fury.io/js/miniprogram-fetch.svg)](https://npmjs.com/package/miniprogram-fetch)\n    * [x] 自动队列支持\n* [miniprogram-queue](queue) 自定义队列封装 [![npm version](https://badge.fury.io/js/miniprogram-queue.svg)](https://npmjs.com/package/miniprogram-queue)\n    * [x] 可自动注入/手动管理\n    * [x] 支持取消操作(`abort`)\n    * [x] OnProgressUpdate 进度回调\n    * [x] OnHeadersReceived 响应头回调\n    * [x] 支持插队\n    * [x] 支持自定义超时\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnewfuture%2Fminiprogram-network","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnewfuture%2Fminiprogram-network","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnewfuture%2Fminiprogram-network/lists"}