├── .gitignore ├── LICENSE ├── README.md ├── build.js ├── dist └── .keep ├── package-lock.json ├── package.json ├── scripts ├── config.js └── deploy.js └── src ├── config ├── columns.js ├── prod.js └── test.js ├── function ├── addr.js ├── userAgent.js └── uuid.js ├── handler ├── event.js └── user.js └── utils ├── console.js ├── cookie.js └── jsonp.js /.gitignore: -------------------------------------------------------------------------------- 1 | src/config/index.js 2 | node_modules 3 | dist/* -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) BillionChen and other contributors. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # bigDataH5SDK 2 | 3 | ## 需求描述 4 | 5 | 当前系统需求为`采集 h5 开发应用的用户行为数据` 6 | 包括但不限于以下几点: 7 | 8 | 1. 可灵活配置,根据不同项目生成代码 9 | 2. 可多维拓展,预留增加用户行为方式等维度接口 10 | 3. 支持模块化 11 | 4. 项目内自我测试 12 | 5. 规范化的接入方式 13 | 6. 完善的使用手册 14 | 7. 支持debug模式 15 | 16 | * 传入经纬度直接jsonp调用百度api接口 17 | * 刷新sdk-uuid接口,用于进入页面/登录/退出登录 18 | * 获取userAgent接口,进入页面自动调用并存储 19 | * cookie操作类 20 | * 触发阶段监听点击事件 21 | * 监听事件配置属性 22 | 23 | ## 总体方案 24 | 25 | 1. 用新的模块化代码分别编写整个流程的各个小功能,分别编写便于维护,`src`文件夹 26 | 2. 根据不同项目的不同配置用`browserify`分别打包,`build.js`文件 27 | 3. 在本项目内编写对应的测试例子,`example`文件夹 28 | 29 | ## 详细设计 30 | 31 | H5数据采集分为以下几个阶段: 32 | 33 | 1. 获取userAgent,获取地址等一次性的操作 34 | 2. 生成唯一编码,记录用户 35 | 3. 捕获事件,或者用户传入自定义动作 36 | 4. 发送数据到服务器 37 | 38 | * 所有发送到服务器的数据配置在`./src/config/columns.js`里面 39 | * 生产环境的配置在`./src/config/prod.js`里面,测试环境继承生产环境的配置并覆盖部分配置 40 | * 打包时,会根据不同的命令,将生产或者测试环境的文件复制成`./src/config/index.js`文件用于加载,此文件不必修改 41 | * `./src/function/`文件夹包含了地址/ua/uuid等功能,处理主流程以外的系统数据用户数据 42 | * `./src/handler/user.js`实现了记录用户列表/登录状态并修改等操作,并向外提供用户信息 43 | * `./src/handler/event.js`实现了点击事件的捕抓,页面跳转事件,自定义事件等上报逻辑,是主流程逻辑 44 | * 数据传送时会自动组合 `./src/function/addr.js`, `./src/function/userAgent.js`, `./src/handler/user.js` 中提供的数据一并发送无需手动操作 45 | * 这些数据均是单例模式,若非修改只会执行一次 46 | * `./src/index.js`是入口文件,将所有小型功能组合导出到`window.__AE__`下 47 | 48 | ```javascript 49 | // __AE__ 的内部结构 50 | { 51 | setAddress,// 设置地址,传入经度/纬度,自动调用百度的jsonp接口获取地址 52 | login, // 告诉大数据sdk这个用户登录,新建一个uuid以存储操作 53 | logout, // 告诉大数据sdk这个用户退出,还原到原来的游客uuid 54 | // 登录和退出方法目前均没有调用发送数据到后台方法 55 | pageView, // 进入页面会自动采集一次pv,但单页应用需要跳转时手动调用此方法 56 | customEvent, // 用户自定义事件/数据上传,传入一维数据json 57 | clickEvent, // 点击事件或者其他html事件上报(点击事件已自动捕获,不需要另行捕获)传入事件e 58 | // 默认button标签、a标签、有点击类名 DSJ__click 的标签需要采集并发送数据 59 | // 采集上报的按钮名称默认先取 DSJ_text 属性的内容,若无,则采集按钮的中文内容 60 | setOption // 初始化时调用,传入系统/平台名称等,也可以在加载js的script上写,后面介绍 61 | } 62 | ``` 63 | 64 | ## sdk打包流程 65 | 66 | ```bash 67 | npm run build # 生产环境 68 | npm run build-test # 测试环境 69 | ``` 70 | 71 | ## sdk接入 72 | 73 | ```html 74 | 75 |
测试失败
76 | 测试成功一 77 | 78 |
测试成功三
79 | 80 | 81 | 82 | ``` 83 | 84 | ```javascript 85 | let __AE__ = require('./dist/bigdata-sdk.min.js'); 86 | __AE__.init({ 87 | platform: '你的系统名',//你的系统名称 88 | username_key: 'userCode',// 登录时获取的唯一用户名字段 89 | // auto_pv: true, // 自动执行一次pv事件捕获,适合多页面应用 90 | }); 91 | ``` 92 | 93 | --- 94 | 95 | ## License 96 | 97 | [MIT](LICENSE) 98 | 99 | ## 贡献者 100 | 101 | [陈炜标](mailto:980669507@qq.com) 102 | 103 | ## 资源包介绍 104 | 105 | * [browserify](https://www.npmjs.com/package/browserify):用于打包 106 | * [babelify](https://www.npmjs.com/package/babelify):用于es6转换 107 | * [UglifyJS](https://gitee.com/virjar/UglifyJS3):用于压缩代码 108 | 109 | ## 参考 110 | 111 | * [阿里文件对象存储SDK](https://github.com/ali-sdk/ali-oss) 112 | * [大数据之数据采集](https://www.jianshu.com/p/a8a7ee412688) 113 | * [神策分析SDK](https://www.sensorsdata.cn/manual/js_sdk.html) 别家公司开发的sdk文档 114 | * [[].slice.call(arguments,1)](https://blog.csdn.net/crper/article/details/51396063) 用于获取第二个开始的参数 115 | * [navigator](http://www.w3school.com.cn/jsref/dom_obj_navigator.asp) 对象包含的属性描述了正在使用的浏览器。 116 | * [babel7教程](https://blog.zfanw.com/babel-js/) 117 | * [微信小程序无埋点数据收集方案-简书](https://www.jianshu.com/p/6c884b613c4c) 实际上在进行集成SDK的过程中开发者仍然要引入代码,并没有实现完全的无埋点,并且在进行点击等事件采集的时候,仍然需要开发者手动调用SDK统计接口。 118 | * [微信小程序无埋点数据采集方案-掘金](https://juejin.im/post/5a3787626fb9a0451c3a7ef6) 119 | * [揭开JS无埋点技术的神秘面纱](http://unclechen.github.io/2018/06/24/%E6%8F%AD%E5%BC%80JS%E6%97%A0%E5%9F%8B%E7%82%B9%E6%8A%80%E6%9C%AF%E7%9A%84%E7%A5%9E%E7%A7%98%E9%9D%A2%E7%BA%B1/) 120 | -------------------------------------------------------------------------------- /build.js: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env node 2 | 3 | var path = require('path'); 4 | var pkg = require('./package.json'); 5 | 6 | var license = [ 7 | '// bigdata SDK for JavaScript v' + pkg.version, 8 | '// Copyright BillionChen, Inc. or its affiliates. All Rights Reserved.', 9 | '// License at https://github.com/BillionChen/bigDataH5SDK/master/LICENSE' 10 | ].join('\n') + '\n'; 11 | 12 | function build(options, callback) { 13 | if (arguments.length === 1) { 14 | callback = options; 15 | options = {}; 16 | } 17 | 18 | console.error('Building with options: %j', options); 19 | 20 | var browserify = require('browserify'); 21 | // var aliasify = require('aliasify'); 22 | var babelify = require('babelify'); 23 | 24 | 25 | browserify({ 26 | // debug: true, 27 | insertGlobals: true, 28 | basedir: path.resolve(__dirname, '.'), 29 | fullPaths: false, 30 | standalone: '__AE__' 31 | }) 32 | .add('./src/index.js') 33 | .transform(babelify, { 34 | "global": true, 35 | "presets": ["@babel/preset-env"], 36 | "plugins": [ 37 | "@babel/plugin-transform-object-assign", 38 | // "@babel/plugin-transform-runtime" 39 | ], 40 | "only": ['src/*'], 41 | }) 42 | // .transform(aliasify, { 43 | // global: true, 44 | // aliases: { 45 | // 'zlib': false, 46 | // 'iconv-lite': false, 47 | // 'crypto': './shims/crypto.js', 48 | // }, 49 | // verbose: false 50 | // }) 51 | .bundle(function (err, data) { 52 | if (err) return callback(err); 53 | var code = (data || '').toString(); 54 | if (options.minify) { 55 | var uglify = require('uglify-js'); 56 | var minified = uglify.minify(code, { 57 | // fromString: true // 新版本没有这个属性 58 | }); 59 | // console.error(JSON.stringify(minified)); 60 | code = minified.code; 61 | } 62 | code = license + code; 63 | callback(null, code); 64 | }); 65 | } 66 | 67 | // run if we called this tool directly 68 | if (require.main === module) { 69 | var opts = { 70 | minify: process.env.MINIFY ? true : false 71 | }; 72 | 73 | build(opts, function (err, code) { 74 | if (err) console.error(err.message); 75 | else console.log(code); 76 | }); 77 | } 78 | 79 | module.exports = build; -------------------------------------------------------------------------------- /dist/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BillionChen/bigDataH5SDK/3eb68a598345674122c142d66b55e539f415946f/dist/.keep -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bigdata-sdk", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.0.0", 9 | "resolved": "http://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.0.0.tgz", 10 | "integrity": "sha1-BuKrGb21NThVWaq7W6WXKUgoAPg=", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.0.0" 14 | } 15 | }, 16 | "@babel/core": { 17 | "version": "7.1.6", 18 | "resolved": "http://registry.npm.taobao.org/@babel/core/download/@babel/core-7.1.6.tgz", 19 | "integrity": "sha1-NzPL7kMXQpvIfGKynPhYfbp7rrM=", 20 | "dev": true, 21 | "requires": { 22 | "@babel/code-frame": "^7.0.0", 23 | "@babel/generator": "^7.1.6", 24 | "@babel/helpers": "^7.1.5", 25 | "@babel/parser": "^7.1.6", 26 | "@babel/template": "^7.1.2", 27 | "@babel/traverse": "^7.1.6", 28 | "@babel/types": "^7.1.6", 29 | "convert-source-map": "^1.1.0", 30 | "debug": "^4.1.0", 31 | "json5": "^2.1.0", 32 | "lodash": "^4.17.10", 33 | "resolve": "^1.3.2", 34 | "semver": "^5.4.1", 35 | "source-map": "^0.5.0" 36 | } 37 | }, 38 | "@babel/generator": { 39 | "version": "7.1.6", 40 | "resolved": "http://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.1.6.tgz", 41 | "integrity": "sha1-ABMDz4eludCTSUpL8lHXtdA9OZk=", 42 | "dev": true, 43 | "requires": { 44 | "@babel/types": "^7.1.6", 45 | "jsesc": "^2.5.1", 46 | "lodash": "^4.17.10", 47 | "source-map": "^0.5.0", 48 | "trim-right": "^1.0.1" 49 | } 50 | }, 51 | "@babel/helper-annotate-as-pure": { 52 | "version": "7.0.0", 53 | "resolved": "http://registry.npm.taobao.org/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.0.0.tgz", 54 | "integrity": "sha1-Mj053QtQ4Qx8Bsp9djjmhk2MXDI=", 55 | "dev": true, 56 | "requires": { 57 | "@babel/types": "^7.0.0" 58 | } 59 | }, 60 | "@babel/helper-builder-binary-assignment-operator-visitor": { 61 | "version": "7.1.0", 62 | "resolved": "http://registry.npm.taobao.org/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", 63 | "integrity": "sha1-a2lijf5Ah3mODE7Zjj1Kay+9L18=", 64 | "dev": true, 65 | "requires": { 66 | "@babel/helper-explode-assignable-expression": "^7.1.0", 67 | "@babel/types": "^7.0.0" 68 | } 69 | }, 70 | "@babel/helper-call-delegate": { 71 | "version": "7.1.0", 72 | "resolved": "http://registry.npm.taobao.org/@babel/helper-call-delegate/download/@babel/helper-call-delegate-7.1.0.tgz", 73 | "integrity": "sha1-apV/EF83dV6GRTQ9MDiiLhRJzEo=", 74 | "dev": true, 75 | "requires": { 76 | "@babel/helper-hoist-variables": "^7.0.0", 77 | "@babel/traverse": "^7.1.0", 78 | "@babel/types": "^7.0.0" 79 | } 80 | }, 81 | "@babel/helper-define-map": { 82 | "version": "7.1.0", 83 | "resolved": "http://registry.npm.taobao.org/@babel/helper-define-map/download/@babel/helper-define-map-7.1.0.tgz", 84 | "integrity": "sha1-O3TK7DKbPIDBFikIh8DdmuRowgw=", 85 | "dev": true, 86 | "requires": { 87 | "@babel/helper-function-name": "^7.1.0", 88 | "@babel/types": "^7.0.0", 89 | "lodash": "^4.17.10" 90 | } 91 | }, 92 | "@babel/helper-explode-assignable-expression": { 93 | "version": "7.1.0", 94 | "resolved": "http://registry.npm.taobao.org/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.1.0.tgz", 95 | "integrity": "sha1-U3+hP28WdN90WwwA7I/k6ZaByPY=", 96 | "dev": true, 97 | "requires": { 98 | "@babel/traverse": "^7.1.0", 99 | "@babel/types": "^7.0.0" 100 | } 101 | }, 102 | "@babel/helper-function-name": { 103 | "version": "7.1.0", 104 | "resolved": "http://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.1.0.tgz", 105 | "integrity": "sha1-oM6wFoX3M1XUNgwSR/WCv6/I/1M=", 106 | "dev": true, 107 | "requires": { 108 | "@babel/helper-get-function-arity": "^7.0.0", 109 | "@babel/template": "^7.1.0", 110 | "@babel/types": "^7.0.0" 111 | } 112 | }, 113 | "@babel/helper-get-function-arity": { 114 | "version": "7.0.0", 115 | "resolved": "http://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.0.0.tgz", 116 | "integrity": "sha1-g1ctQyDipGVyY3NBE8QoaLZOScM=", 117 | "dev": true, 118 | "requires": { 119 | "@babel/types": "^7.0.0" 120 | } 121 | }, 122 | "@babel/helper-hoist-variables": { 123 | "version": "7.0.0", 124 | "resolved": "http://registry.npm.taobao.org/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.0.0.tgz", 125 | "integrity": "sha1-Rq3ExedYZFrnpF3rkrqwkYwju4g=", 126 | "dev": true, 127 | "requires": { 128 | "@babel/types": "^7.0.0" 129 | } 130 | }, 131 | "@babel/helper-member-expression-to-functions": { 132 | "version": "7.0.0", 133 | "resolved": "http://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.0.0.tgz", 134 | "integrity": "sha1-jNFLCg33/wDwCefXpDaUX0fHoW8=", 135 | "dev": true, 136 | "requires": { 137 | "@babel/types": "^7.0.0" 138 | } 139 | }, 140 | "@babel/helper-module-imports": { 141 | "version": "7.0.0", 142 | "resolved": "http://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.0.0.tgz", 143 | "integrity": "sha1-lggbcRHkhtpNLNlxrRpP4hbMLj0=", 144 | "dev": true, 145 | "requires": { 146 | "@babel/types": "^7.0.0" 147 | } 148 | }, 149 | "@babel/helper-module-transforms": { 150 | "version": "7.1.0", 151 | "resolved": "http://registry.npm.taobao.org/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.1.0.tgz", 152 | "integrity": "sha1-Rw1PlnbZ+tULMkzczl+6u8PaV4c=", 153 | "dev": true, 154 | "requires": { 155 | "@babel/helper-module-imports": "^7.0.0", 156 | "@babel/helper-simple-access": "^7.1.0", 157 | "@babel/helper-split-export-declaration": "^7.0.0", 158 | "@babel/template": "^7.1.0", 159 | "@babel/types": "^7.0.0", 160 | "lodash": "^4.17.10" 161 | } 162 | }, 163 | "@babel/helper-optimise-call-expression": { 164 | "version": "7.0.0", 165 | "resolved": "http://registry.npm.taobao.org/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.0.0.tgz", 166 | "integrity": "sha1-opIMVwKwc8Fd5REGIAqoytIEl9U=", 167 | "dev": true, 168 | "requires": { 169 | "@babel/types": "^7.0.0" 170 | } 171 | }, 172 | "@babel/helper-plugin-utils": { 173 | "version": "7.0.0", 174 | "resolved": "http://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.0.0.tgz", 175 | "integrity": "sha1-u7P77phmHFaQNCN8wDlnupm08lA=", 176 | "dev": true 177 | }, 178 | "@babel/helper-regex": { 179 | "version": "7.0.0", 180 | "resolved": "http://registry.npm.taobao.org/@babel/helper-regex/download/@babel/helper-regex-7.0.0.tgz", 181 | "integrity": "sha1-LBcYkjtX+bvmRwX/5WQKxk2b2yc=", 182 | "dev": true, 183 | "requires": { 184 | "lodash": "^4.17.10" 185 | } 186 | }, 187 | "@babel/helper-remap-async-to-generator": { 188 | "version": "7.1.0", 189 | "resolved": "http://registry.npm.taobao.org/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.1.0.tgz", 190 | "integrity": "sha1-Nh2AghtvONp1vT8HheziCojF/n8=", 191 | "dev": true, 192 | "requires": { 193 | "@babel/helper-annotate-as-pure": "^7.0.0", 194 | "@babel/helper-wrap-function": "^7.1.0", 195 | "@babel/template": "^7.1.0", 196 | "@babel/traverse": "^7.1.0", 197 | "@babel/types": "^7.0.0" 198 | } 199 | }, 200 | "@babel/helper-replace-supers": { 201 | "version": "7.1.0", 202 | "resolved": "http://registry.npm.taobao.org/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.1.0.tgz", 203 | "integrity": "sha1-X8Md5SLsDvCJncmz589qXdZV82I=", 204 | "dev": true, 205 | "requires": { 206 | "@babel/helper-member-expression-to-functions": "^7.0.0", 207 | "@babel/helper-optimise-call-expression": "^7.0.0", 208 | "@babel/traverse": "^7.1.0", 209 | "@babel/types": "^7.0.0" 210 | } 211 | }, 212 | "@babel/helper-simple-access": { 213 | "version": "7.1.0", 214 | "resolved": "http://registry.npm.taobao.org/@babel/helper-simple-access/download/@babel/helper-simple-access-7.1.0.tgz", 215 | "integrity": "sha1-Ze65VMjCRb6qToWdphiPOdceWFw=", 216 | "dev": true, 217 | "requires": { 218 | "@babel/template": "^7.1.0", 219 | "@babel/types": "^7.0.0" 220 | } 221 | }, 222 | "@babel/helper-split-export-declaration": { 223 | "version": "7.0.0", 224 | "resolved": "http://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.0.0.tgz", 225 | "integrity": "sha1-Oq4oXAMRwqsJXZl7jJqUytVH2BM=", 226 | "dev": true, 227 | "requires": { 228 | "@babel/types": "^7.0.0" 229 | } 230 | }, 231 | "@babel/helper-wrap-function": { 232 | "version": "7.1.0", 233 | "resolved": "http://registry.npm.taobao.org/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.1.0.tgz", 234 | "integrity": "sha1-jPVOkZBwYGfwFq+Pdcs9+CnMjGY=", 235 | "dev": true, 236 | "requires": { 237 | "@babel/helper-function-name": "^7.1.0", 238 | "@babel/template": "^7.1.0", 239 | "@babel/traverse": "^7.1.0", 240 | "@babel/types": "^7.0.0" 241 | } 242 | }, 243 | "@babel/helpers": { 244 | "version": "7.1.5", 245 | "resolved": "http://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.1.5.tgz", 246 | "integrity": "sha1-aL/BiV1oXyuPGZXniNv+H2zLGZY=", 247 | "dev": true, 248 | "requires": { 249 | "@babel/template": "^7.1.2", 250 | "@babel/traverse": "^7.1.5", 251 | "@babel/types": "^7.1.5" 252 | } 253 | }, 254 | "@babel/highlight": { 255 | "version": "7.0.0", 256 | "resolved": "http://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.0.0.tgz", 257 | "integrity": "sha1-9xDDjI1Fjm3ZogGvtjf8t4HOmeQ=", 258 | "dev": true, 259 | "requires": { 260 | "chalk": "^2.0.0", 261 | "esutils": "^2.0.2", 262 | "js-tokens": "^4.0.0" 263 | } 264 | }, 265 | "@babel/parser": { 266 | "version": "7.1.6", 267 | "resolved": "http://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.1.6.tgz", 268 | "integrity": "sha1-Ful6yh7BBiMkoBxaan0N+N0YmFQ=", 269 | "dev": true 270 | }, 271 | "@babel/plugin-proposal-async-generator-functions": { 272 | "version": "7.1.0", 273 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.1.0.tgz", 274 | "integrity": "sha1-QcGnAuEAgUVuI6e3TYkZIt0bts4=", 275 | "dev": true, 276 | "requires": { 277 | "@babel/helper-plugin-utils": "^7.0.0", 278 | "@babel/helper-remap-async-to-generator": "^7.1.0", 279 | "@babel/plugin-syntax-async-generators": "^7.0.0" 280 | } 281 | }, 282 | "@babel/plugin-proposal-json-strings": { 283 | "version": "7.0.0", 284 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.0.0.tgz", 285 | "integrity": "sha1-O017XPUeHy5w9SNR0o1E/Clw0B4=", 286 | "dev": true, 287 | "requires": { 288 | "@babel/helper-plugin-utils": "^7.0.0", 289 | "@babel/plugin-syntax-json-strings": "^7.0.0" 290 | } 291 | }, 292 | "@babel/plugin-proposal-object-rest-spread": { 293 | "version": "7.0.0", 294 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.0.0.tgz", 295 | "integrity": "sha1-mhe1R/ZNBna2yc7NTt90qCq4Xn4=", 296 | "dev": true, 297 | "requires": { 298 | "@babel/helper-plugin-utils": "^7.0.0", 299 | "@babel/plugin-syntax-object-rest-spread": "^7.0.0" 300 | } 301 | }, 302 | "@babel/plugin-proposal-optional-catch-binding": { 303 | "version": "7.0.0", 304 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.0.0.tgz", 305 | "integrity": "sha1-thDZKP5VH/cRfULIu0EO7DEqZCU=", 306 | "dev": true, 307 | "requires": { 308 | "@babel/helper-plugin-utils": "^7.0.0", 309 | "@babel/plugin-syntax-optional-catch-binding": "^7.0.0" 310 | } 311 | }, 312 | "@babel/plugin-proposal-unicode-property-regex": { 313 | "version": "7.0.0", 314 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.0.0.tgz", 315 | "integrity": "sha1-SYs5zXJTbNfEsmF30DAibroIzTM=", 316 | "dev": true, 317 | "requires": { 318 | "@babel/helper-plugin-utils": "^7.0.0", 319 | "@babel/helper-regex": "^7.0.0", 320 | "regexpu-core": "^4.2.0" 321 | } 322 | }, 323 | "@babel/plugin-syntax-async-generators": { 324 | "version": "7.0.0", 325 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.0.0.tgz", 326 | "integrity": "sha1-vwiR3Nv1lVg1nQxib9yUkOILwTw=", 327 | "dev": true, 328 | "requires": { 329 | "@babel/helper-plugin-utils": "^7.0.0" 330 | } 331 | }, 332 | "@babel/plugin-syntax-json-strings": { 333 | "version": "7.0.0", 334 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.0.0.tgz", 335 | "integrity": "sha1-DSWaaAkOFbODzjcQ4B1bI/N3DL0=", 336 | "dev": true, 337 | "requires": { 338 | "@babel/helper-plugin-utils": "^7.0.0" 339 | } 340 | }, 341 | "@babel/plugin-syntax-object-rest-spread": { 342 | "version": "7.0.0", 343 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.0.0.tgz", 344 | "integrity": "sha1-N9j7yvIWvWWOoa6764t16I68VJs=", 345 | "dev": true, 346 | "requires": { 347 | "@babel/helper-plugin-utils": "^7.0.0" 348 | } 349 | }, 350 | "@babel/plugin-syntax-optional-catch-binding": { 351 | "version": "7.0.0", 352 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.0.0.tgz", 353 | "integrity": "sha1-iG9yAIs6ixhZd/fLcHE7ReUe5HU=", 354 | "dev": true, 355 | "requires": { 356 | "@babel/helper-plugin-utils": "^7.0.0" 357 | } 358 | }, 359 | "@babel/plugin-transform-arrow-functions": { 360 | "version": "7.0.0", 361 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.0.0.tgz", 362 | "integrity": "sha1-psFIdYSMaKO0sxY6SGU17yXH50k=", 363 | "dev": true, 364 | "requires": { 365 | "@babel/helper-plugin-utils": "^7.0.0" 366 | } 367 | }, 368 | "@babel/plugin-transform-async-to-generator": { 369 | "version": "7.1.0", 370 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.1.0.tgz", 371 | "integrity": "sha1-EJ4DZJbFHdZYV+FqyrO6/fPFeBE=", 372 | "dev": true, 373 | "requires": { 374 | "@babel/helper-module-imports": "^7.0.0", 375 | "@babel/helper-plugin-utils": "^7.0.0", 376 | "@babel/helper-remap-async-to-generator": "^7.1.0" 377 | } 378 | }, 379 | "@babel/plugin-transform-block-scoped-functions": { 380 | "version": "7.0.0", 381 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.0.0.tgz", 382 | "integrity": "sha1-SCs/dRA5J+NyiLO2e2X4SOKqDQc=", 383 | "dev": true, 384 | "requires": { 385 | "@babel/helper-plugin-utils": "^7.0.0" 386 | } 387 | }, 388 | "@babel/plugin-transform-block-scoping": { 389 | "version": "7.1.5", 390 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.1.5.tgz", 391 | "integrity": "sha1-Po4LyaUQRRmSMwKiT3SPcvL2Hzc=", 392 | "dev": true, 393 | "requires": { 394 | "@babel/helper-plugin-utils": "^7.0.0", 395 | "lodash": "^4.17.10" 396 | } 397 | }, 398 | "@babel/plugin-transform-classes": { 399 | "version": "7.1.0", 400 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.1.0.tgz", 401 | "integrity": "sha1-qz+KVkNhgAy8irHKbyEQgDhDIkk=", 402 | "dev": true, 403 | "requires": { 404 | "@babel/helper-annotate-as-pure": "^7.0.0", 405 | "@babel/helper-define-map": "^7.1.0", 406 | "@babel/helper-function-name": "^7.1.0", 407 | "@babel/helper-optimise-call-expression": "^7.0.0", 408 | "@babel/helper-plugin-utils": "^7.0.0", 409 | "@babel/helper-replace-supers": "^7.1.0", 410 | "@babel/helper-split-export-declaration": "^7.0.0", 411 | "globals": "^11.1.0" 412 | } 413 | }, 414 | "@babel/plugin-transform-computed-properties": { 415 | "version": "7.0.0", 416 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.0.0.tgz", 417 | "integrity": "sha1-L7uJAM0+gljyou3pCbkOdVYYXjE=", 418 | "dev": true, 419 | "requires": { 420 | "@babel/helper-plugin-utils": "^7.0.0" 421 | } 422 | }, 423 | "@babel/plugin-transform-destructuring": { 424 | "version": "7.1.3", 425 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.1.3.tgz", 426 | "integrity": "sha1-5p/1DKAfrGy3KGPFROUWwrGTAS8=", 427 | "dev": true, 428 | "requires": { 429 | "@babel/helper-plugin-utils": "^7.0.0" 430 | } 431 | }, 432 | "@babel/plugin-transform-dotall-regex": { 433 | "version": "7.0.0", 434 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.0.0.tgz", 435 | "integrity": "sha1-c6JNppvDw3AlH0Oj0EgZhUYRXlg=", 436 | "dev": true, 437 | "requires": { 438 | "@babel/helper-plugin-utils": "^7.0.0", 439 | "@babel/helper-regex": "^7.0.0", 440 | "regexpu-core": "^4.1.3" 441 | } 442 | }, 443 | "@babel/plugin-transform-duplicate-keys": { 444 | "version": "7.0.0", 445 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.0.0.tgz", 446 | "integrity": "sha1-oGAeWAmR58rOCA5M+RnP1Y2nToY=", 447 | "dev": true, 448 | "requires": { 449 | "@babel/helper-plugin-utils": "^7.0.0" 450 | } 451 | }, 452 | "@babel/plugin-transform-exponentiation-operator": { 453 | "version": "7.1.0", 454 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.1.0.tgz", 455 | "integrity": "sha1-nDTC7n/XfgJ3nPo35AOi4QA8zHM=", 456 | "dev": true, 457 | "requires": { 458 | "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", 459 | "@babel/helper-plugin-utils": "^7.0.0" 460 | } 461 | }, 462 | "@babel/plugin-transform-for-of": { 463 | "version": "7.0.0", 464 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.0.0.tgz", 465 | "integrity": "sha1-8rpOrbg70X3Dx+mzD0cHNl4cPjk=", 466 | "dev": true, 467 | "requires": { 468 | "@babel/helper-plugin-utils": "^7.0.0" 469 | } 470 | }, 471 | "@babel/plugin-transform-function-name": { 472 | "version": "7.1.0", 473 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.1.0.tgz", 474 | "integrity": "sha1-KcVVDVxGII5/cwUW1B7t3Ur/rbs=", 475 | "dev": true, 476 | "requires": { 477 | "@babel/helper-function-name": "^7.1.0", 478 | "@babel/helper-plugin-utils": "^7.0.0" 479 | } 480 | }, 481 | "@babel/plugin-transform-literals": { 482 | "version": "7.0.0", 483 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.0.0.tgz", 484 | "integrity": "sha1-KuwdKc3STEBzWckwzdiekU7o/4Y=", 485 | "dev": true, 486 | "requires": { 487 | "@babel/helper-plugin-utils": "^7.0.0" 488 | } 489 | }, 490 | "@babel/plugin-transform-modules-amd": { 491 | "version": "7.1.0", 492 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.1.0.tgz", 493 | "integrity": "sha1-+eCnBywS4pYHm1pZ9Aj/W5e/hqg=", 494 | "dev": true, 495 | "requires": { 496 | "@babel/helper-module-transforms": "^7.1.0", 497 | "@babel/helper-plugin-utils": "^7.0.0" 498 | } 499 | }, 500 | "@babel/plugin-transform-modules-commonjs": { 501 | "version": "7.1.0", 502 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.1.0.tgz", 503 | "integrity": "sha1-Cp2GRRy7+ym9FRhjBol8Z/b5oFw=", 504 | "dev": true, 505 | "requires": { 506 | "@babel/helper-module-transforms": "^7.1.0", 507 | "@babel/helper-plugin-utils": "^7.0.0", 508 | "@babel/helper-simple-access": "^7.1.0" 509 | } 510 | }, 511 | "@babel/plugin-transform-modules-systemjs": { 512 | "version": "7.1.3", 513 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.1.3.tgz", 514 | "integrity": "sha1-IRmj49thL9dKGdiGUu+/6WE6XbA=", 515 | "dev": true, 516 | "requires": { 517 | "@babel/helper-hoist-variables": "^7.0.0", 518 | "@babel/helper-plugin-utils": "^7.0.0" 519 | } 520 | }, 521 | "@babel/plugin-transform-modules-umd": { 522 | "version": "7.1.0", 523 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.1.0.tgz", 524 | "integrity": "sha1-opp9hdbyjDVhwzlkRCJXzGoh8qg=", 525 | "dev": true, 526 | "requires": { 527 | "@babel/helper-module-transforms": "^7.1.0", 528 | "@babel/helper-plugin-utils": "^7.0.0" 529 | } 530 | }, 531 | "@babel/plugin-transform-new-target": { 532 | "version": "7.0.0", 533 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.0.0.tgz", 534 | "integrity": "sha1-ro+9iVF/p4ktIOZWTmQeh3DDqko=", 535 | "dev": true, 536 | "requires": { 537 | "@babel/helper-plugin-utils": "^7.0.0" 538 | } 539 | }, 540 | "@babel/plugin-transform-object-assign": { 541 | "version": "7.0.0", 542 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-object-assign/download/@babel/plugin-transform-object-assign-7.0.0.tgz", 543 | "integrity": "sha1-/KbXUA2WdcQoaLjziCl5IBuaWtg=", 544 | "dev": true, 545 | "requires": { 546 | "@babel/helper-plugin-utils": "^7.0.0" 547 | } 548 | }, 549 | "@babel/plugin-transform-object-super": { 550 | "version": "7.1.0", 551 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.1.0.tgz", 552 | "integrity": "sha1-sa4ZSgVLgm2NS6fKkUhtStoPkbs=", 553 | "dev": true, 554 | "requires": { 555 | "@babel/helper-plugin-utils": "^7.0.0", 556 | "@babel/helper-replace-supers": "^7.1.0" 557 | } 558 | }, 559 | "@babel/plugin-transform-parameters": { 560 | "version": "7.1.0", 561 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.1.0.tgz", 562 | "integrity": "sha1-RPSS+dYYyRJAJuYjAcKWv2Bqeu0=", 563 | "dev": true, 564 | "requires": { 565 | "@babel/helper-call-delegate": "^7.1.0", 566 | "@babel/helper-get-function-arity": "^7.0.0", 567 | "@babel/helper-plugin-utils": "^7.0.0" 568 | } 569 | }, 570 | "@babel/plugin-transform-regenerator": { 571 | "version": "7.0.0", 572 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.0.0.tgz", 573 | "integrity": "sha1-W0Foa07UC++HTX7WqEvdhJwT4ME=", 574 | "dev": true, 575 | "requires": { 576 | "regenerator-transform": "^0.13.3" 577 | } 578 | }, 579 | "@babel/plugin-transform-runtime": { 580 | "version": "7.1.0", 581 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.1.0.tgz", 582 | "integrity": "sha1-n3aSDUJVG7V34txZTfIptfdiS2M=", 583 | "dev": true, 584 | "requires": { 585 | "@babel/helper-module-imports": "^7.0.0", 586 | "@babel/helper-plugin-utils": "^7.0.0", 587 | "resolve": "^1.8.1", 588 | "semver": "^5.5.1" 589 | } 590 | }, 591 | "@babel/plugin-transform-shorthand-properties": { 592 | "version": "7.0.0", 593 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.0.0.tgz", 594 | "integrity": "sha1-hfivWS3MB2R1QaA1DoyVx79BnRU=", 595 | "dev": true, 596 | "requires": { 597 | "@babel/helper-plugin-utils": "^7.0.0" 598 | } 599 | }, 600 | "@babel/plugin-transform-spread": { 601 | "version": "7.0.0", 602 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.0.0.tgz", 603 | "integrity": "sha1-k1g85I3YyF5T86RgVshW5K8wtJs=", 604 | "dev": true, 605 | "requires": { 606 | "@babel/helper-plugin-utils": "^7.0.0" 607 | } 608 | }, 609 | "@babel/plugin-transform-sticky-regex": { 610 | "version": "7.0.0", 611 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.0.0.tgz", 612 | "integrity": "sha1-MKnWSsKrRu7Ah7hTBTW+zZDnM2Y=", 613 | "dev": true, 614 | "requires": { 615 | "@babel/helper-plugin-utils": "^7.0.0", 616 | "@babel/helper-regex": "^7.0.0" 617 | } 618 | }, 619 | "@babel/plugin-transform-template-literals": { 620 | "version": "7.0.0", 621 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.0.0.tgz", 622 | "integrity": "sha1-CE8ZUu/lsVPdrmnriUX4gsepfGU=", 623 | "dev": true, 624 | "requires": { 625 | "@babel/helper-annotate-as-pure": "^7.0.0", 626 | "@babel/helper-plugin-utils": "^7.0.0" 627 | } 628 | }, 629 | "@babel/plugin-transform-typeof-symbol": { 630 | "version": "7.0.0", 631 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.0.0.tgz", 632 | "integrity": "sha1-Tc8eUulD5SZ7cxO/80f9vg+Bzsk=", 633 | "dev": true, 634 | "requires": { 635 | "@babel/helper-plugin-utils": "^7.0.0" 636 | } 637 | }, 638 | "@babel/plugin-transform-unicode-regex": { 639 | "version": "7.0.0", 640 | "resolved": "http://registry.npm.taobao.org/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.0.0.tgz", 641 | "integrity": "sha1-xngOWxhjp2/nktkO3tn81bUdaPw=", 642 | "dev": true, 643 | "requires": { 644 | "@babel/helper-plugin-utils": "^7.0.0", 645 | "@babel/helper-regex": "^7.0.0", 646 | "regexpu-core": "^4.1.3" 647 | } 648 | }, 649 | "@babel/preset-env": { 650 | "version": "7.1.6", 651 | "resolved": "http://registry.npm.taobao.org/@babel/preset-env/download/@babel/preset-env-7.1.6.tgz", 652 | "integrity": "sha1-oL9Llra/z24ACvxbcrSr58wTrpc=", 653 | "dev": true, 654 | "requires": { 655 | "@babel/helper-module-imports": "^7.0.0", 656 | "@babel/helper-plugin-utils": "^7.0.0", 657 | "@babel/plugin-proposal-async-generator-functions": "^7.1.0", 658 | "@babel/plugin-proposal-json-strings": "^7.0.0", 659 | "@babel/plugin-proposal-object-rest-spread": "^7.0.0", 660 | "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", 661 | "@babel/plugin-proposal-unicode-property-regex": "^7.0.0", 662 | "@babel/plugin-syntax-async-generators": "^7.0.0", 663 | "@babel/plugin-syntax-object-rest-spread": "^7.0.0", 664 | "@babel/plugin-syntax-optional-catch-binding": "^7.0.0", 665 | "@babel/plugin-transform-arrow-functions": "^7.0.0", 666 | "@babel/plugin-transform-async-to-generator": "^7.1.0", 667 | "@babel/plugin-transform-block-scoped-functions": "^7.0.0", 668 | "@babel/plugin-transform-block-scoping": "^7.1.5", 669 | "@babel/plugin-transform-classes": "^7.1.0", 670 | "@babel/plugin-transform-computed-properties": "^7.0.0", 671 | "@babel/plugin-transform-destructuring": "^7.0.0", 672 | "@babel/plugin-transform-dotall-regex": "^7.0.0", 673 | "@babel/plugin-transform-duplicate-keys": "^7.0.0", 674 | "@babel/plugin-transform-exponentiation-operator": "^7.1.0", 675 | "@babel/plugin-transform-for-of": "^7.0.0", 676 | "@babel/plugin-transform-function-name": "^7.1.0", 677 | "@babel/plugin-transform-literals": "^7.0.0", 678 | "@babel/plugin-transform-modules-amd": "^7.1.0", 679 | "@babel/plugin-transform-modules-commonjs": "^7.1.0", 680 | "@babel/plugin-transform-modules-systemjs": "^7.0.0", 681 | "@babel/plugin-transform-modules-umd": "^7.1.0", 682 | "@babel/plugin-transform-new-target": "^7.0.0", 683 | "@babel/plugin-transform-object-super": "^7.1.0", 684 | "@babel/plugin-transform-parameters": "^7.1.0", 685 | "@babel/plugin-transform-regenerator": "^7.0.0", 686 | "@babel/plugin-transform-shorthand-properties": "^7.0.0", 687 | "@babel/plugin-transform-spread": "^7.0.0", 688 | "@babel/plugin-transform-sticky-regex": "^7.0.0", 689 | "@babel/plugin-transform-template-literals": "^7.0.0", 690 | "@babel/plugin-transform-typeof-symbol": "^7.0.0", 691 | "@babel/plugin-transform-unicode-regex": "^7.0.0", 692 | "browserslist": "^4.1.0", 693 | "invariant": "^2.2.2", 694 | "js-levenshtein": "^1.1.3", 695 | "semver": "^5.3.0" 696 | } 697 | }, 698 | "@babel/runtime": { 699 | "version": "7.1.5", 700 | "resolved": "http://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.1.5.tgz", 701 | "integrity": "sha1-QXCQdkHPH2FQj1Y+zjclFQzG/jk=", 702 | "dev": true, 703 | "requires": { 704 | "regenerator-runtime": "^0.12.0" 705 | } 706 | }, 707 | "@babel/template": { 708 | "version": "7.1.2", 709 | "resolved": "http://registry.npm.taobao.org/@babel/template/download/@babel/template-7.1.2.tgz", 710 | "integrity": "sha1-CQSEpXT+9aLS13JqZ07O2lxbVkQ=", 711 | "dev": true, 712 | "requires": { 713 | "@babel/code-frame": "^7.0.0", 714 | "@babel/parser": "^7.1.2", 715 | "@babel/types": "^7.1.2" 716 | } 717 | }, 718 | "@babel/traverse": { 719 | "version": "7.1.6", 720 | "resolved": "http://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.1.6.tgz", 721 | "integrity": "sha1-yNuZY6tM5biUIiQ1SCvY6oVLe1w=", 722 | "dev": true, 723 | "requires": { 724 | "@babel/code-frame": "^7.0.0", 725 | "@babel/generator": "^7.1.6", 726 | "@babel/helper-function-name": "^7.1.0", 727 | "@babel/helper-split-export-declaration": "^7.0.0", 728 | "@babel/parser": "^7.1.6", 729 | "@babel/types": "^7.1.6", 730 | "debug": "^4.1.0", 731 | "globals": "^11.1.0", 732 | "lodash": "^4.17.10" 733 | } 734 | }, 735 | "@babel/types": { 736 | "version": "7.1.6", 737 | "resolved": "http://registry.npm.taobao.org/@babel/types/download/@babel/types-7.1.6.tgz", 738 | "integrity": "sha1-CtszDDooE0ihkCY6zrVA4Q8EvM4=", 739 | "dev": true, 740 | "requires": { 741 | "esutils": "^2.0.2", 742 | "lodash": "^4.17.10", 743 | "to-fast-properties": "^2.0.0" 744 | } 745 | }, 746 | "JSONStream": { 747 | "version": "1.3.5", 748 | "resolved": "http://registry.npm.taobao.org/JSONStream/download/JSONStream-1.3.5.tgz", 749 | "integrity": "sha1-MgjB8I06TZkmGrZPkjArwV4RHKA=", 750 | "dev": true, 751 | "requires": { 752 | "jsonparse": "^1.2.0", 753 | "through": ">=2.2.7 <3" 754 | } 755 | }, 756 | "acorn": { 757 | "version": "6.0.4", 758 | "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-6.0.4.tgz", 759 | "integrity": "sha1-dzd+c1O3LsUQRVCqLSCXov1At1Q=", 760 | "dev": true 761 | }, 762 | "acorn-dynamic-import": { 763 | "version": "4.0.0", 764 | "resolved": "http://registry.npm.taobao.org/acorn-dynamic-import/download/acorn-dynamic-import-4.0.0.tgz", 765 | "integrity": "sha1-SCIQFAWCo2uDw+NC4c/ryqkkCUg=", 766 | "dev": true 767 | }, 768 | "acorn-node": { 769 | "version": "1.6.2", 770 | "resolved": "http://registry.npm.taobao.org/acorn-node/download/acorn-node-1.6.2.tgz", 771 | "integrity": "sha1-t9fOym8i5kF6+TOmLK1N4BBI1dI=", 772 | "dev": true, 773 | "requires": { 774 | "acorn": "^6.0.2", 775 | "acorn-dynamic-import": "^4.0.0", 776 | "acorn-walk": "^6.1.0", 777 | "xtend": "^4.0.1" 778 | } 779 | }, 780 | "acorn-walk": { 781 | "version": "6.1.1", 782 | "resolved": "http://registry.npm.taobao.org/acorn-walk/download/acorn-walk-6.1.1.tgz", 783 | "integrity": "sha1-02O2b1+sXwGP+cOh57b44xDMORM=", 784 | "dev": true 785 | }, 786 | "ansi-regex": { 787 | "version": "3.0.0", 788 | "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", 789 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 790 | "dev": true 791 | }, 792 | "ansi-styles": { 793 | "version": "3.2.1", 794 | "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", 795 | "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", 796 | "dev": true, 797 | "requires": { 798 | "color-convert": "^1.9.0" 799 | } 800 | }, 801 | "array-filter": { 802 | "version": "0.0.1", 803 | "resolved": "http://registry.npm.taobao.org/array-filter/download/array-filter-0.0.1.tgz", 804 | "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", 805 | "dev": true 806 | }, 807 | "array-map": { 808 | "version": "0.0.0", 809 | "resolved": "http://registry.npm.taobao.org/array-map/download/array-map-0.0.0.tgz", 810 | "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", 811 | "dev": true 812 | }, 813 | "array-reduce": { 814 | "version": "0.0.0", 815 | "resolved": "http://registry.npm.taobao.org/array-reduce/download/array-reduce-0.0.0.tgz", 816 | "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", 817 | "dev": true 818 | }, 819 | "asn1": { 820 | "version": "0.2.4", 821 | "resolved": "http://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz", 822 | "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=", 823 | "dev": true, 824 | "requires": { 825 | "safer-buffer": "~2.1.0" 826 | } 827 | }, 828 | "asn1.js": { 829 | "version": "4.10.1", 830 | "resolved": "http://registry.npm.taobao.org/asn1.js/download/asn1.js-4.10.1.tgz", 831 | "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=", 832 | "dev": true, 833 | "requires": { 834 | "bn.js": "^4.0.0", 835 | "inherits": "^2.0.1", 836 | "minimalistic-assert": "^1.0.0" 837 | } 838 | }, 839 | "assert": { 840 | "version": "1.4.1", 841 | "resolved": "http://registry.npm.taobao.org/assert/download/assert-1.4.1.tgz", 842 | "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", 843 | "dev": true, 844 | "requires": { 845 | "util": "0.10.3" 846 | }, 847 | "dependencies": { 848 | "inherits": { 849 | "version": "2.0.1", 850 | "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.1.tgz", 851 | "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", 852 | "dev": true 853 | }, 854 | "util": { 855 | "version": "0.10.3", 856 | "resolved": "http://registry.npm.taobao.org/util/download/util-0.10.3.tgz", 857 | "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", 858 | "dev": true, 859 | "requires": { 860 | "inherits": "2.0.1" 861 | } 862 | } 863 | } 864 | }, 865 | "babelify": { 866 | "version": "10.0.0", 867 | "resolved": "http://registry.npm.taobao.org/babelify/download/babelify-10.0.0.tgz", 868 | "integrity": "sha1-/nOxoiWD8GaA2NBy4loeDR0df7U=", 869 | "dev": true 870 | }, 871 | "balanced-match": { 872 | "version": "1.0.0", 873 | "resolved": "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", 874 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 875 | "dev": true 876 | }, 877 | "base64-js": { 878 | "version": "1.3.0", 879 | "resolved": "http://registry.npm.taobao.org/base64-js/download/base64-js-1.3.0.tgz", 880 | "integrity": "sha1-yrHmEY8FEJXli1KBrqjBzSK/wOM=", 881 | "dev": true 882 | }, 883 | "bn.js": { 884 | "version": "4.11.8", 885 | "resolved": "http://registry.npm.taobao.org/bn.js/download/bn.js-4.11.8.tgz", 886 | "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=", 887 | "dev": true 888 | }, 889 | "brace-expansion": { 890 | "version": "1.1.11", 891 | "resolved": "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz", 892 | "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", 893 | "dev": true, 894 | "requires": { 895 | "balanced-match": "^1.0.0", 896 | "concat-map": "0.0.1" 897 | } 898 | }, 899 | "brorand": { 900 | "version": "1.1.0", 901 | "resolved": "http://registry.npm.taobao.org/brorand/download/brorand-1.1.0.tgz", 902 | "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", 903 | "dev": true 904 | }, 905 | "browser-pack": { 906 | "version": "6.1.0", 907 | "resolved": "http://registry.npm.taobao.org/browser-pack/download/browser-pack-6.1.0.tgz", 908 | "integrity": "sha1-w0uhDQuc4WK1ryJ8cTHJLC7NV3Q=", 909 | "dev": true, 910 | "requires": { 911 | "JSONStream": "^1.0.3", 912 | "combine-source-map": "~0.8.0", 913 | "defined": "^1.0.0", 914 | "safe-buffer": "^5.1.1", 915 | "through2": "^2.0.0", 916 | "umd": "^3.0.0" 917 | } 918 | }, 919 | "browser-resolve": { 920 | "version": "1.11.3", 921 | "resolved": "http://registry.npm.taobao.org/browser-resolve/download/browser-resolve-1.11.3.tgz", 922 | "integrity": "sha1-m3y7PQ9RDky4a9vXlhJNKLWJCvY=", 923 | "dev": true, 924 | "requires": { 925 | "resolve": "1.1.7" 926 | }, 927 | "dependencies": { 928 | "resolve": { 929 | "version": "1.1.7", 930 | "resolved": "http://registry.npm.taobao.org/resolve/download/resolve-1.1.7.tgz", 931 | "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", 932 | "dev": true 933 | } 934 | } 935 | }, 936 | "browserify": { 937 | "version": "16.2.3", 938 | "resolved": "http://registry.npm.taobao.org/browserify/download/browserify-16.2.3.tgz", 939 | "integrity": "sha1-fubmVLpPkrzmqzWZw0hbHMegrQs=", 940 | "dev": true, 941 | "requires": { 942 | "JSONStream": "^1.0.3", 943 | "assert": "^1.4.0", 944 | "browser-pack": "^6.0.1", 945 | "browser-resolve": "^1.11.0", 946 | "browserify-zlib": "~0.2.0", 947 | "buffer": "^5.0.2", 948 | "cached-path-relative": "^1.0.0", 949 | "concat-stream": "^1.6.0", 950 | "console-browserify": "^1.1.0", 951 | "constants-browserify": "~1.0.0", 952 | "crypto-browserify": "^3.0.0", 953 | "defined": "^1.0.0", 954 | "deps-sort": "^2.0.0", 955 | "domain-browser": "^1.2.0", 956 | "duplexer2": "~0.1.2", 957 | "events": "^2.0.0", 958 | "glob": "^7.1.0", 959 | "has": "^1.0.0", 960 | "htmlescape": "^1.1.0", 961 | "https-browserify": "^1.0.0", 962 | "inherits": "~2.0.1", 963 | "insert-module-globals": "^7.0.0", 964 | "labeled-stream-splicer": "^2.0.0", 965 | "mkdirp": "^0.5.0", 966 | "module-deps": "^6.0.0", 967 | "os-browserify": "~0.3.0", 968 | "parents": "^1.0.1", 969 | "path-browserify": "~0.0.0", 970 | "process": "~0.11.0", 971 | "punycode": "^1.3.2", 972 | "querystring-es3": "~0.2.0", 973 | "read-only-stream": "^2.0.0", 974 | "readable-stream": "^2.0.2", 975 | "resolve": "^1.1.4", 976 | "shasum": "^1.0.0", 977 | "shell-quote": "^1.6.1", 978 | "stream-browserify": "^2.0.0", 979 | "stream-http": "^2.0.0", 980 | "string_decoder": "^1.1.1", 981 | "subarg": "^1.0.0", 982 | "syntax-error": "^1.1.1", 983 | "through2": "^2.0.0", 984 | "timers-browserify": "^1.0.1", 985 | "tty-browserify": "0.0.1", 986 | "url": "~0.11.0", 987 | "util": "~0.10.1", 988 | "vm-browserify": "^1.0.0", 989 | "xtend": "^4.0.0" 990 | } 991 | }, 992 | "browserify-aes": { 993 | "version": "1.2.0", 994 | "resolved": "http://registry.npm.taobao.org/browserify-aes/download/browserify-aes-1.2.0.tgz", 995 | "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=", 996 | "dev": true, 997 | "requires": { 998 | "buffer-xor": "^1.0.3", 999 | "cipher-base": "^1.0.0", 1000 | "create-hash": "^1.1.0", 1001 | "evp_bytestokey": "^1.0.3", 1002 | "inherits": "^2.0.1", 1003 | "safe-buffer": "^5.0.1" 1004 | } 1005 | }, 1006 | "browserify-cipher": { 1007 | "version": "1.0.1", 1008 | "resolved": "http://registry.npm.taobao.org/browserify-cipher/download/browserify-cipher-1.0.1.tgz", 1009 | "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=", 1010 | "dev": true, 1011 | "requires": { 1012 | "browserify-aes": "^1.0.4", 1013 | "browserify-des": "^1.0.0", 1014 | "evp_bytestokey": "^1.0.0" 1015 | } 1016 | }, 1017 | "browserify-des": { 1018 | "version": "1.0.2", 1019 | "resolved": "http://registry.npm.taobao.org/browserify-des/download/browserify-des-1.0.2.tgz", 1020 | "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=", 1021 | "dev": true, 1022 | "requires": { 1023 | "cipher-base": "^1.0.1", 1024 | "des.js": "^1.0.0", 1025 | "inherits": "^2.0.1", 1026 | "safe-buffer": "^5.1.2" 1027 | } 1028 | }, 1029 | "browserify-rsa": { 1030 | "version": "4.0.1", 1031 | "resolved": "http://registry.npm.taobao.org/browserify-rsa/download/browserify-rsa-4.0.1.tgz", 1032 | "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", 1033 | "dev": true, 1034 | "requires": { 1035 | "bn.js": "^4.1.0", 1036 | "randombytes": "^2.0.1" 1037 | } 1038 | }, 1039 | "browserify-sign": { 1040 | "version": "4.0.4", 1041 | "resolved": "http://registry.npm.taobao.org/browserify-sign/download/browserify-sign-4.0.4.tgz", 1042 | "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", 1043 | "dev": true, 1044 | "requires": { 1045 | "bn.js": "^4.1.1", 1046 | "browserify-rsa": "^4.0.0", 1047 | "create-hash": "^1.1.0", 1048 | "create-hmac": "^1.1.2", 1049 | "elliptic": "^6.0.0", 1050 | "inherits": "^2.0.1", 1051 | "parse-asn1": "^5.0.0" 1052 | } 1053 | }, 1054 | "browserify-zlib": { 1055 | "version": "0.2.0", 1056 | "resolved": "http://registry.npm.taobao.org/browserify-zlib/download/browserify-zlib-0.2.0.tgz", 1057 | "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", 1058 | "dev": true, 1059 | "requires": { 1060 | "pako": "~1.0.5" 1061 | } 1062 | }, 1063 | "browserslist": { 1064 | "version": "4.3.4", 1065 | "resolved": "http://registry.npm.taobao.org/browserslist/download/browserslist-4.3.4.tgz", 1066 | "integrity": "sha1-RHe3N9tqGwcHcnWyR5HmgNQwBCU=", 1067 | "dev": true, 1068 | "requires": { 1069 | "caniuse-lite": "^1.0.30000899", 1070 | "electron-to-chromium": "^1.3.82", 1071 | "node-releases": "^1.0.1" 1072 | } 1073 | }, 1074 | "buffer": { 1075 | "version": "5.2.1", 1076 | "resolved": "http://registry.npm.taobao.org/buffer/download/buffer-5.2.1.tgz", 1077 | "integrity": "sha1-3Vf6DxCaxZxgJHkETcp7iz0LcdY=", 1078 | "dev": true, 1079 | "requires": { 1080 | "base64-js": "^1.0.2", 1081 | "ieee754": "^1.1.4" 1082 | } 1083 | }, 1084 | "buffer-from": { 1085 | "version": "1.1.1", 1086 | "resolved": "http://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz", 1087 | "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=", 1088 | "dev": true 1089 | }, 1090 | "buffer-xor": { 1091 | "version": "1.0.3", 1092 | "resolved": "http://registry.npm.taobao.org/buffer-xor/download/buffer-xor-1.0.3.tgz", 1093 | "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", 1094 | "dev": true 1095 | }, 1096 | "builtin-status-codes": { 1097 | "version": "3.0.0", 1098 | "resolved": "http://registry.npm.taobao.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz", 1099 | "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", 1100 | "dev": true 1101 | }, 1102 | "cached-path-relative": { 1103 | "version": "1.0.2", 1104 | "resolved": "http://registry.npm.taobao.org/cached-path-relative/download/cached-path-relative-1.0.2.tgz", 1105 | "integrity": "sha1-oT30GW0md2IgzDNW6xR6Utuixts=", 1106 | "dev": true 1107 | }, 1108 | "caniuse-lite": { 1109 | "version": "1.0.30000907", 1110 | "resolved": "http://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30000907.tgz", 1111 | "integrity": "sha1-C5iZveU/scMOIU+xJAI2HgL/XEI=", 1112 | "dev": true 1113 | }, 1114 | "chalk": { 1115 | "version": "2.4.1", 1116 | "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-2.4.1.tgz", 1117 | "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", 1118 | "dev": true, 1119 | "requires": { 1120 | "ansi-styles": "^3.2.1", 1121 | "escape-string-regexp": "^1.0.5", 1122 | "supports-color": "^5.3.0" 1123 | } 1124 | }, 1125 | "cipher-base": { 1126 | "version": "1.0.4", 1127 | "resolved": "http://registry.npm.taobao.org/cipher-base/download/cipher-base-1.0.4.tgz", 1128 | "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", 1129 | "dev": true, 1130 | "requires": { 1131 | "inherits": "^2.0.1", 1132 | "safe-buffer": "^5.0.1" 1133 | } 1134 | }, 1135 | "cli-cursor": { 1136 | "version": "2.1.0", 1137 | "resolved": "http://registry.npm.taobao.org/cli-cursor/download/cli-cursor-2.1.0.tgz", 1138 | "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", 1139 | "dev": true, 1140 | "requires": { 1141 | "restore-cursor": "^2.0.0" 1142 | } 1143 | }, 1144 | "cli-spinners": { 1145 | "version": "1.3.1", 1146 | "resolved": "http://registry.npm.taobao.org/cli-spinners/download/cli-spinners-1.3.1.tgz", 1147 | "integrity": "sha1-ACwZkJEtDVlYDJO9NsBW3pnkJZo=", 1148 | "dev": true 1149 | }, 1150 | "clone": { 1151 | "version": "1.0.4", 1152 | "resolved": "http://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz", 1153 | "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", 1154 | "dev": true 1155 | }, 1156 | "color-convert": { 1157 | "version": "1.9.3", 1158 | "resolved": "http://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz", 1159 | "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", 1160 | "dev": true, 1161 | "requires": { 1162 | "color-name": "1.1.3" 1163 | } 1164 | }, 1165 | "color-name": { 1166 | "version": "1.1.3", 1167 | "resolved": "http://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz", 1168 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 1169 | "dev": true 1170 | }, 1171 | "combine-source-map": { 1172 | "version": "0.8.0", 1173 | "resolved": "http://registry.npm.taobao.org/combine-source-map/download/combine-source-map-0.8.0.tgz", 1174 | "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", 1175 | "dev": true, 1176 | "requires": { 1177 | "convert-source-map": "~1.1.0", 1178 | "inline-source-map": "~0.6.0", 1179 | "lodash.memoize": "~3.0.3", 1180 | "source-map": "~0.5.3" 1181 | }, 1182 | "dependencies": { 1183 | "convert-source-map": { 1184 | "version": "1.1.3", 1185 | "resolved": "http://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.1.3.tgz", 1186 | "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", 1187 | "dev": true 1188 | } 1189 | } 1190 | }, 1191 | "commander": { 1192 | "version": "2.17.1", 1193 | "resolved": "http://registry.npm.taobao.org/commander/download/commander-2.17.1.tgz", 1194 | "integrity": "sha1-vXerfebelCBc6sxy8XFtKfIKd78=", 1195 | "dev": true 1196 | }, 1197 | "concat-map": { 1198 | "version": "0.0.1", 1199 | "resolved": "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", 1200 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 1201 | "dev": true 1202 | }, 1203 | "concat-stream": { 1204 | "version": "1.6.2", 1205 | "resolved": "http://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz", 1206 | "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=", 1207 | "dev": true, 1208 | "requires": { 1209 | "buffer-from": "^1.0.0", 1210 | "inherits": "^2.0.3", 1211 | "readable-stream": "^2.2.2", 1212 | "typedarray": "^0.0.6" 1213 | } 1214 | }, 1215 | "console-browserify": { 1216 | "version": "1.1.0", 1217 | "resolved": "http://registry.npm.taobao.org/console-browserify/download/console-browserify-1.1.0.tgz", 1218 | "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", 1219 | "dev": true, 1220 | "requires": { 1221 | "date-now": "^0.1.4" 1222 | } 1223 | }, 1224 | "constants-browserify": { 1225 | "version": "1.0.0", 1226 | "resolved": "http://registry.npm.taobao.org/constants-browserify/download/constants-browserify-1.0.0.tgz", 1227 | "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", 1228 | "dev": true 1229 | }, 1230 | "convert-source-map": { 1231 | "version": "1.6.0", 1232 | "resolved": "http://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.6.0.tgz", 1233 | "integrity": "sha1-UbU3qMQ+DwTewZk7/83VBOdYrCA=", 1234 | "dev": true, 1235 | "requires": { 1236 | "safe-buffer": "~5.1.1" 1237 | } 1238 | }, 1239 | "core-util-is": { 1240 | "version": "1.0.2", 1241 | "resolved": "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", 1242 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 1243 | "dev": true 1244 | }, 1245 | "create-ecdh": { 1246 | "version": "4.0.3", 1247 | "resolved": "http://registry.npm.taobao.org/create-ecdh/download/create-ecdh-4.0.3.tgz", 1248 | "integrity": "sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8=", 1249 | "dev": true, 1250 | "requires": { 1251 | "bn.js": "^4.1.0", 1252 | "elliptic": "^6.0.0" 1253 | } 1254 | }, 1255 | "create-hash": { 1256 | "version": "1.2.0", 1257 | "resolved": "http://registry.npm.taobao.org/create-hash/download/create-hash-1.2.0.tgz", 1258 | "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=", 1259 | "dev": true, 1260 | "requires": { 1261 | "cipher-base": "^1.0.1", 1262 | "inherits": "^2.0.1", 1263 | "md5.js": "^1.3.4", 1264 | "ripemd160": "^2.0.1", 1265 | "sha.js": "^2.4.0" 1266 | } 1267 | }, 1268 | "create-hmac": { 1269 | "version": "1.1.7", 1270 | "resolved": "http://registry.npm.taobao.org/create-hmac/download/create-hmac-1.1.7.tgz", 1271 | "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=", 1272 | "dev": true, 1273 | "requires": { 1274 | "cipher-base": "^1.0.3", 1275 | "create-hash": "^1.1.0", 1276 | "inherits": "^2.0.1", 1277 | "ripemd160": "^2.0.0", 1278 | "safe-buffer": "^5.0.1", 1279 | "sha.js": "^2.4.8" 1280 | } 1281 | }, 1282 | "cross-env": { 1283 | "version": "5.2.0", 1284 | "resolved": "http://registry.npm.taobao.org/cross-env/download/cross-env-5.2.0.tgz", 1285 | "integrity": "sha1-bs1MAV1Xc+YUA57lKQdmabnRJvI=", 1286 | "dev": true, 1287 | "requires": { 1288 | "cross-spawn": "^6.0.5", 1289 | "is-windows": "^1.0.0" 1290 | } 1291 | }, 1292 | "cross-spawn": { 1293 | "version": "6.0.5", 1294 | "resolved": "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz", 1295 | "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=", 1296 | "dev": true, 1297 | "requires": { 1298 | "nice-try": "^1.0.4", 1299 | "path-key": "^2.0.1", 1300 | "semver": "^5.5.0", 1301 | "shebang-command": "^1.2.0", 1302 | "which": "^1.2.9" 1303 | } 1304 | }, 1305 | "crypto-browserify": { 1306 | "version": "3.12.0", 1307 | "resolved": "http://registry.npm.taobao.org/crypto-browserify/download/crypto-browserify-3.12.0.tgz", 1308 | "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", 1309 | "dev": true, 1310 | "requires": { 1311 | "browserify-cipher": "^1.0.0", 1312 | "browserify-sign": "^4.0.0", 1313 | "create-ecdh": "^4.0.0", 1314 | "create-hash": "^1.1.0", 1315 | "create-hmac": "^1.1.0", 1316 | "diffie-hellman": "^5.0.0", 1317 | "inherits": "^2.0.1", 1318 | "pbkdf2": "^3.0.3", 1319 | "public-encrypt": "^4.0.0", 1320 | "randombytes": "^2.0.0", 1321 | "randomfill": "^1.0.3" 1322 | } 1323 | }, 1324 | "date-now": { 1325 | "version": "0.1.4", 1326 | "resolved": "http://registry.npm.taobao.org/date-now/download/date-now-0.1.4.tgz", 1327 | "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", 1328 | "dev": true 1329 | }, 1330 | "debug": { 1331 | "version": "4.1.0", 1332 | "resolved": "http://registry.npm.taobao.org/debug/download/debug-4.1.0.tgz", 1333 | "integrity": "sha1-NzaHv/pnizixzZH4YbY4UANd3Ic=", 1334 | "dev": true, 1335 | "requires": { 1336 | "ms": "^2.1.1" 1337 | } 1338 | }, 1339 | "defaults": { 1340 | "version": "1.0.3", 1341 | "resolved": "http://registry.npm.taobao.org/defaults/download/defaults-1.0.3.tgz", 1342 | "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", 1343 | "dev": true, 1344 | "requires": { 1345 | "clone": "^1.0.2" 1346 | } 1347 | }, 1348 | "defined": { 1349 | "version": "1.0.0", 1350 | "resolved": "http://registry.npm.taobao.org/defined/download/defined-1.0.0.tgz", 1351 | "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", 1352 | "dev": true 1353 | }, 1354 | "deps-sort": { 1355 | "version": "2.0.0", 1356 | "resolved": "http://registry.npm.taobao.org/deps-sort/download/deps-sort-2.0.0.tgz", 1357 | "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", 1358 | "dev": true, 1359 | "requires": { 1360 | "JSONStream": "^1.0.3", 1361 | "shasum": "^1.0.0", 1362 | "subarg": "^1.0.0", 1363 | "through2": "^2.0.0" 1364 | } 1365 | }, 1366 | "des.js": { 1367 | "version": "1.0.0", 1368 | "resolved": "http://registry.npm.taobao.org/des.js/download/des.js-1.0.0.tgz", 1369 | "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", 1370 | "dev": true, 1371 | "requires": { 1372 | "inherits": "^2.0.1", 1373 | "minimalistic-assert": "^1.0.0" 1374 | } 1375 | }, 1376 | "detective": { 1377 | "version": "5.1.0", 1378 | "resolved": "http://registry.npm.taobao.org/detective/download/detective-5.1.0.tgz", 1379 | "integrity": "sha1-eiDYkjbXszHM6mWDLnEjtVUbt8s=", 1380 | "dev": true, 1381 | "requires": { 1382 | "acorn-node": "^1.3.0", 1383 | "defined": "^1.0.0", 1384 | "minimist": "^1.1.1" 1385 | } 1386 | }, 1387 | "diffie-hellman": { 1388 | "version": "5.0.3", 1389 | "resolved": "http://registry.npm.taobao.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz", 1390 | "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=", 1391 | "dev": true, 1392 | "requires": { 1393 | "bn.js": "^4.1.0", 1394 | "miller-rabin": "^4.0.0", 1395 | "randombytes": "^2.0.0" 1396 | } 1397 | }, 1398 | "domain-browser": { 1399 | "version": "1.2.0", 1400 | "resolved": "http://registry.npm.taobao.org/domain-browser/download/domain-browser-1.2.0.tgz", 1401 | "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=", 1402 | "dev": true 1403 | }, 1404 | "duplexer2": { 1405 | "version": "0.1.4", 1406 | "resolved": "http://registry.npm.taobao.org/duplexer2/download/duplexer2-0.1.4.tgz", 1407 | "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", 1408 | "dev": true, 1409 | "requires": { 1410 | "readable-stream": "^2.0.2" 1411 | } 1412 | }, 1413 | "electron-to-chromium": { 1414 | "version": "1.3.84", 1415 | "resolved": "http://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.84.tgz", 1416 | "integrity": "sha1-LlXfWegY8VCp9htTRx6/Tw/uzGU=", 1417 | "dev": true 1418 | }, 1419 | "elliptic": { 1420 | "version": "6.4.1", 1421 | "resolved": "http://registry.npm.taobao.org/elliptic/download/elliptic-6.4.1.tgz", 1422 | "integrity": "sha1-wtC3d2kRuGcixjLDwGxg8vgZk5o=", 1423 | "dev": true, 1424 | "requires": { 1425 | "bn.js": "^4.4.0", 1426 | "brorand": "^1.0.1", 1427 | "hash.js": "^1.0.0", 1428 | "hmac-drbg": "^1.0.0", 1429 | "inherits": "^2.0.1", 1430 | "minimalistic-assert": "^1.0.0", 1431 | "minimalistic-crypto-utils": "^1.0.0" 1432 | } 1433 | }, 1434 | "escape-string-regexp": { 1435 | "version": "1.0.5", 1436 | "resolved": "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz", 1437 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1438 | "dev": true 1439 | }, 1440 | "esutils": { 1441 | "version": "2.0.2", 1442 | "resolved": "http://registry.npm.taobao.org/esutils/download/esutils-2.0.2.tgz", 1443 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", 1444 | "dev": true 1445 | }, 1446 | "events": { 1447 | "version": "2.1.0", 1448 | "resolved": "http://registry.npm.taobao.org/events/download/events-2.1.0.tgz", 1449 | "integrity": "sha1-KpoeGOYQbg6BKqnr1KgZs8KcC6U=", 1450 | "dev": true 1451 | }, 1452 | "evp_bytestokey": { 1453 | "version": "1.0.3", 1454 | "resolved": "http://registry.npm.taobao.org/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz", 1455 | "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", 1456 | "dev": true, 1457 | "requires": { 1458 | "md5.js": "^1.3.4", 1459 | "safe-buffer": "^5.1.1" 1460 | } 1461 | }, 1462 | "fs.realpath": { 1463 | "version": "1.0.0", 1464 | "resolved": "http://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz", 1465 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1466 | "dev": true 1467 | }, 1468 | "function-bind": { 1469 | "version": "1.1.1", 1470 | "resolved": "http://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz", 1471 | "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", 1472 | "dev": true 1473 | }, 1474 | "get-assigned-identifiers": { 1475 | "version": "1.2.0", 1476 | "resolved": "http://registry.npm.taobao.org/get-assigned-identifiers/download/get-assigned-identifiers-1.2.0.tgz", 1477 | "integrity": "sha1-bb9BHeZIy6+NkWnrsNLVdhkeL/E=", 1478 | "dev": true 1479 | }, 1480 | "glob": { 1481 | "version": "7.1.3", 1482 | "resolved": "http://registry.npm.taobao.org/glob/download/glob-7.1.3.tgz", 1483 | "integrity": "sha1-OWCDLT8VdBCDQtr9OmezMsCWnfE=", 1484 | "dev": true, 1485 | "requires": { 1486 | "fs.realpath": "^1.0.0", 1487 | "inflight": "^1.0.4", 1488 | "inherits": "2", 1489 | "minimatch": "^3.0.4", 1490 | "once": "^1.3.0", 1491 | "path-is-absolute": "^1.0.0" 1492 | } 1493 | }, 1494 | "globals": { 1495 | "version": "11.9.0", 1496 | "resolved": "http://registry.npm.taobao.org/globals/download/globals-11.9.0.tgz", 1497 | "integrity": "sha1-veI2gI6YfykHaKk9BlBg145qskk=", 1498 | "dev": true 1499 | }, 1500 | "has": { 1501 | "version": "1.0.3", 1502 | "resolved": "http://registry.npm.taobao.org/has/download/has-1.0.3.tgz", 1503 | "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", 1504 | "dev": true, 1505 | "requires": { 1506 | "function-bind": "^1.1.1" 1507 | } 1508 | }, 1509 | "has-flag": { 1510 | "version": "3.0.0", 1511 | "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz", 1512 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1513 | "dev": true 1514 | }, 1515 | "hash-base": { 1516 | "version": "3.0.4", 1517 | "resolved": "http://registry.npm.taobao.org/hash-base/download/hash-base-3.0.4.tgz", 1518 | "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", 1519 | "dev": true, 1520 | "requires": { 1521 | "inherits": "^2.0.1", 1522 | "safe-buffer": "^5.0.1" 1523 | } 1524 | }, 1525 | "hash.js": { 1526 | "version": "1.1.5", 1527 | "resolved": "http://registry.npm.taobao.org/hash.js/download/hash.js-1.1.5.tgz", 1528 | "integrity": "sha1-44q0uF37HgxA/pJlwOm1SFTCOBI=", 1529 | "dev": true, 1530 | "requires": { 1531 | "inherits": "^2.0.3", 1532 | "minimalistic-assert": "^1.0.1" 1533 | } 1534 | }, 1535 | "hmac-drbg": { 1536 | "version": "1.0.1", 1537 | "resolved": "http://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz", 1538 | "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", 1539 | "dev": true, 1540 | "requires": { 1541 | "hash.js": "^1.0.3", 1542 | "minimalistic-assert": "^1.0.0", 1543 | "minimalistic-crypto-utils": "^1.0.1" 1544 | } 1545 | }, 1546 | "htmlescape": { 1547 | "version": "1.1.1", 1548 | "resolved": "http://registry.npm.taobao.org/htmlescape/download/htmlescape-1.1.1.tgz", 1549 | "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", 1550 | "dev": true 1551 | }, 1552 | "https-browserify": { 1553 | "version": "1.0.0", 1554 | "resolved": "http://registry.npm.taobao.org/https-browserify/download/https-browserify-1.0.0.tgz", 1555 | "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", 1556 | "dev": true 1557 | }, 1558 | "ieee754": { 1559 | "version": "1.1.12", 1560 | "resolved": "http://registry.npm.taobao.org/ieee754/download/ieee754-1.1.12.tgz", 1561 | "integrity": "sha1-UL8k5bnIu5ivSWTJQc2wkY2ntgs=", 1562 | "dev": true 1563 | }, 1564 | "inflight": { 1565 | "version": "1.0.6", 1566 | "resolved": "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", 1567 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1568 | "dev": true, 1569 | "requires": { 1570 | "once": "^1.3.0", 1571 | "wrappy": "1" 1572 | } 1573 | }, 1574 | "inherits": { 1575 | "version": "2.0.3", 1576 | "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", 1577 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 1578 | "dev": true 1579 | }, 1580 | "inline-source-map": { 1581 | "version": "0.6.2", 1582 | "resolved": "http://registry.npm.taobao.org/inline-source-map/download/inline-source-map-0.6.2.tgz", 1583 | "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", 1584 | "dev": true, 1585 | "requires": { 1586 | "source-map": "~0.5.3" 1587 | } 1588 | }, 1589 | "insert-module-globals": { 1590 | "version": "7.2.0", 1591 | "resolved": "http://registry.npm.taobao.org/insert-module-globals/download/insert-module-globals-7.2.0.tgz", 1592 | "integrity": "sha1-7IfltCcoR54ye9XFxxYR3ftHUro=", 1593 | "dev": true, 1594 | "requires": { 1595 | "JSONStream": "^1.0.3", 1596 | "acorn-node": "^1.5.2", 1597 | "combine-source-map": "^0.8.0", 1598 | "concat-stream": "^1.6.1", 1599 | "is-buffer": "^1.1.0", 1600 | "path-is-absolute": "^1.0.1", 1601 | "process": "~0.11.0", 1602 | "through2": "^2.0.0", 1603 | "undeclared-identifiers": "^1.1.2", 1604 | "xtend": "^4.0.0" 1605 | } 1606 | }, 1607 | "invariant": { 1608 | "version": "2.2.4", 1609 | "resolved": "http://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz", 1610 | "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=", 1611 | "dev": true, 1612 | "requires": { 1613 | "loose-envify": "^1.0.0" 1614 | } 1615 | }, 1616 | "is-buffer": { 1617 | "version": "1.1.6", 1618 | "resolved": "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz", 1619 | "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", 1620 | "dev": true 1621 | }, 1622 | "is-windows": { 1623 | "version": "1.0.2", 1624 | "resolved": "http://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz", 1625 | "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=", 1626 | "dev": true 1627 | }, 1628 | "isarray": { 1629 | "version": "1.0.0", 1630 | "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", 1631 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 1632 | "dev": true 1633 | }, 1634 | "isexe": { 1635 | "version": "2.0.0", 1636 | "resolved": "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz", 1637 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1638 | "dev": true 1639 | }, 1640 | "js-levenshtein": { 1641 | "version": "1.1.4", 1642 | "resolved": "http://registry.npm.taobao.org/js-levenshtein/download/js-levenshtein-1.1.4.tgz", 1643 | "integrity": "sha1-Olbjy/WJygCB6yLNm6CxKQoW0m4=", 1644 | "dev": true 1645 | }, 1646 | "js-tokens": { 1647 | "version": "4.0.0", 1648 | "resolved": "http://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz", 1649 | "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=", 1650 | "dev": true 1651 | }, 1652 | "jsesc": { 1653 | "version": "2.5.2", 1654 | "resolved": "http://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz", 1655 | "integrity": "sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q=", 1656 | "dev": true 1657 | }, 1658 | "json-stable-stringify": { 1659 | "version": "0.0.1", 1660 | "resolved": "http://registry.npm.taobao.org/json-stable-stringify/download/json-stable-stringify-0.0.1.tgz", 1661 | "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", 1662 | "dev": true, 1663 | "requires": { 1664 | "jsonify": "~0.0.0" 1665 | } 1666 | }, 1667 | "json5": { 1668 | "version": "2.1.0", 1669 | "resolved": "http://registry.npm.taobao.org/json5/download/json5-2.1.0.tgz", 1670 | "integrity": "sha1-56DGLEgoXGKNIKELhcibuAfDKFA=", 1671 | "dev": true, 1672 | "requires": { 1673 | "minimist": "^1.2.0" 1674 | } 1675 | }, 1676 | "jsonify": { 1677 | "version": "0.0.0", 1678 | "resolved": "http://registry.npm.taobao.org/jsonify/download/jsonify-0.0.0.tgz", 1679 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", 1680 | "dev": true 1681 | }, 1682 | "jsonparse": { 1683 | "version": "1.3.1", 1684 | "resolved": "http://registry.npm.taobao.org/jsonparse/download/jsonparse-1.3.1.tgz", 1685 | "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", 1686 | "dev": true 1687 | }, 1688 | "labeled-stream-splicer": { 1689 | "version": "2.0.1", 1690 | "resolved": "http://registry.npm.taobao.org/labeled-stream-splicer/download/labeled-stream-splicer-2.0.1.tgz", 1691 | "integrity": "sha1-nP+jL9meFhL9HYao25YkFtUpKSY=", 1692 | "dev": true, 1693 | "requires": { 1694 | "inherits": "^2.0.1", 1695 | "isarray": "^2.0.4", 1696 | "stream-splicer": "^2.0.0" 1697 | }, 1698 | "dependencies": { 1699 | "isarray": { 1700 | "version": "2.0.4", 1701 | "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-2.0.4.tgz", 1702 | "integrity": "sha1-OOe8uw87obeTPIa6GJTd/DeBu7c=", 1703 | "dev": true 1704 | } 1705 | } 1706 | }, 1707 | "lodash": { 1708 | "version": "4.17.11", 1709 | "resolved": "http://registry.npm.taobao.org/lodash/download/lodash-4.17.11.tgz", 1710 | "integrity": "sha1-s56mIp72B+zYniyN8SU2iRysm40=", 1711 | "dev": true 1712 | }, 1713 | "lodash.memoize": { 1714 | "version": "3.0.4", 1715 | "resolved": "http://registry.npm.taobao.org/lodash.memoize/download/lodash.memoize-3.0.4.tgz", 1716 | "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", 1717 | "dev": true 1718 | }, 1719 | "log-symbols": { 1720 | "version": "2.2.0", 1721 | "resolved": "http://registry.npm.taobao.org/log-symbols/download/log-symbols-2.2.0.tgz", 1722 | "integrity": "sha1-V0Dhxdbw39pK2TI7UzIQfva0xAo=", 1723 | "dev": true, 1724 | "requires": { 1725 | "chalk": "^2.0.1" 1726 | } 1727 | }, 1728 | "loose-envify": { 1729 | "version": "1.4.0", 1730 | "resolved": "http://registry.npm.taobao.org/loose-envify/download/loose-envify-1.4.0.tgz", 1731 | "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=", 1732 | "dev": true, 1733 | "requires": { 1734 | "js-tokens": "^3.0.0 || ^4.0.0" 1735 | } 1736 | }, 1737 | "md5.js": { 1738 | "version": "1.3.5", 1739 | "resolved": "http://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz", 1740 | "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=", 1741 | "dev": true, 1742 | "requires": { 1743 | "hash-base": "^3.0.0", 1744 | "inherits": "^2.0.1", 1745 | "safe-buffer": "^5.1.2" 1746 | } 1747 | }, 1748 | "miller-rabin": { 1749 | "version": "4.0.1", 1750 | "resolved": "http://registry.npm.taobao.org/miller-rabin/download/miller-rabin-4.0.1.tgz", 1751 | "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=", 1752 | "dev": true, 1753 | "requires": { 1754 | "bn.js": "^4.0.0", 1755 | "brorand": "^1.0.1" 1756 | } 1757 | }, 1758 | "mimic-fn": { 1759 | "version": "1.2.0", 1760 | "resolved": "http://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz", 1761 | "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=", 1762 | "dev": true 1763 | }, 1764 | "minimalistic-assert": { 1765 | "version": "1.0.1", 1766 | "resolved": "http://registry.npm.taobao.org/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz", 1767 | "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=", 1768 | "dev": true 1769 | }, 1770 | "minimalistic-crypto-utils": { 1771 | "version": "1.0.1", 1772 | "resolved": "http://registry.npm.taobao.org/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz", 1773 | "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", 1774 | "dev": true 1775 | }, 1776 | "minimatch": { 1777 | "version": "3.0.4", 1778 | "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", 1779 | "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", 1780 | "dev": true, 1781 | "requires": { 1782 | "brace-expansion": "^1.1.7" 1783 | } 1784 | }, 1785 | "minimist": { 1786 | "version": "1.2.0", 1787 | "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", 1788 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 1789 | "dev": true 1790 | }, 1791 | "mkdirp": { 1792 | "version": "0.5.1", 1793 | "resolved": "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz", 1794 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 1795 | "dev": true, 1796 | "requires": { 1797 | "minimist": "0.0.8" 1798 | }, 1799 | "dependencies": { 1800 | "minimist": { 1801 | "version": "0.0.8", 1802 | "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz", 1803 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 1804 | "dev": true 1805 | } 1806 | } 1807 | }, 1808 | "module-deps": { 1809 | "version": "6.2.0", 1810 | "resolved": "http://registry.npm.taobao.org/module-deps/download/module-deps-6.2.0.tgz", 1811 | "integrity": "sha1-1BoueQJFzjGRceTnxNjHOZO6PNU=", 1812 | "dev": true, 1813 | "requires": { 1814 | "JSONStream": "^1.0.3", 1815 | "browser-resolve": "^1.7.0", 1816 | "cached-path-relative": "^1.0.0", 1817 | "concat-stream": "~1.6.0", 1818 | "defined": "^1.0.0", 1819 | "detective": "^5.0.2", 1820 | "duplexer2": "^0.1.2", 1821 | "inherits": "^2.0.1", 1822 | "parents": "^1.0.0", 1823 | "readable-stream": "^2.0.2", 1824 | "resolve": "^1.4.0", 1825 | "stream-combiner2": "^1.1.1", 1826 | "subarg": "^1.0.0", 1827 | "through2": "^2.0.0", 1828 | "xtend": "^4.0.0" 1829 | } 1830 | }, 1831 | "ms": { 1832 | "version": "2.1.1", 1833 | "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz", 1834 | "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", 1835 | "dev": true 1836 | }, 1837 | "nice-try": { 1838 | "version": "1.0.5", 1839 | "resolved": "http://registry.npm.taobao.org/nice-try/download/nice-try-1.0.5.tgz", 1840 | "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=", 1841 | "dev": true 1842 | }, 1843 | "node-releases": { 1844 | "version": "1.0.3", 1845 | "resolved": "http://registry.npm.taobao.org/node-releases/download/node-releases-1.0.3.tgz", 1846 | "integrity": "sha1-NBTthFlQlkWcJRaZv8tH2IMkqeQ=", 1847 | "dev": true, 1848 | "requires": { 1849 | "semver": "^5.3.0" 1850 | } 1851 | }, 1852 | "once": { 1853 | "version": "1.4.0", 1854 | "resolved": "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz", 1855 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1856 | "dev": true, 1857 | "requires": { 1858 | "wrappy": "1" 1859 | } 1860 | }, 1861 | "onetime": { 1862 | "version": "2.0.1", 1863 | "resolved": "http://registry.npm.taobao.org/onetime/download/onetime-2.0.1.tgz", 1864 | "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", 1865 | "dev": true, 1866 | "requires": { 1867 | "mimic-fn": "^1.0.0" 1868 | } 1869 | }, 1870 | "ora": { 1871 | "version": "3.0.0", 1872 | "resolved": "http://registry.npm.taobao.org/ora/download/ora-3.0.0.tgz", 1873 | "integrity": "sha1-gXnjUluar9mSQtY8wgb9ZHMnQdA=", 1874 | "dev": true, 1875 | "requires": { 1876 | "chalk": "^2.3.1", 1877 | "cli-cursor": "^2.1.0", 1878 | "cli-spinners": "^1.1.0", 1879 | "log-symbols": "^2.2.0", 1880 | "strip-ansi": "^4.0.0", 1881 | "wcwidth": "^1.0.1" 1882 | } 1883 | }, 1884 | "os-browserify": { 1885 | "version": "0.3.0", 1886 | "resolved": "http://registry.npm.taobao.org/os-browserify/download/os-browserify-0.3.0.tgz", 1887 | "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", 1888 | "dev": true 1889 | }, 1890 | "pako": { 1891 | "version": "1.0.6", 1892 | "resolved": "http://registry.npm.taobao.org/pako/download/pako-1.0.6.tgz", 1893 | "integrity": "sha1-AQEhG6pwxLykoPY/Igbpe3368lg=", 1894 | "dev": true 1895 | }, 1896 | "parents": { 1897 | "version": "1.0.1", 1898 | "resolved": "http://registry.npm.taobao.org/parents/download/parents-1.0.1.tgz", 1899 | "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", 1900 | "dev": true, 1901 | "requires": { 1902 | "path-platform": "~0.11.15" 1903 | } 1904 | }, 1905 | "parse-asn1": { 1906 | "version": "5.1.1", 1907 | "resolved": "http://registry.npm.taobao.org/parse-asn1/download/parse-asn1-5.1.1.tgz", 1908 | "integrity": "sha1-9r8pOBgzK9DatU77Fgh3JHRebKg=", 1909 | "dev": true, 1910 | "requires": { 1911 | "asn1.js": "^4.0.0", 1912 | "browserify-aes": "^1.0.0", 1913 | "create-hash": "^1.1.0", 1914 | "evp_bytestokey": "^1.0.0", 1915 | "pbkdf2": "^3.0.3" 1916 | } 1917 | }, 1918 | "path-browserify": { 1919 | "version": "0.0.1", 1920 | "resolved": "http://registry.npm.taobao.org/path-browserify/download/path-browserify-0.0.1.tgz", 1921 | "integrity": "sha1-5sTd1+06onxoogzE5Q4aTug7vEo=", 1922 | "dev": true 1923 | }, 1924 | "path-is-absolute": { 1925 | "version": "1.0.1", 1926 | "resolved": "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", 1927 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1928 | "dev": true 1929 | }, 1930 | "path-key": { 1931 | "version": "2.0.1", 1932 | "resolved": "http://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz", 1933 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", 1934 | "dev": true 1935 | }, 1936 | "path-parse": { 1937 | "version": "1.0.6", 1938 | "resolved": "http://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz", 1939 | "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=", 1940 | "dev": true 1941 | }, 1942 | "path-platform": { 1943 | "version": "0.11.15", 1944 | "resolved": "http://registry.npm.taobao.org/path-platform/download/path-platform-0.11.15.tgz", 1945 | "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", 1946 | "dev": true 1947 | }, 1948 | "pbkdf2": { 1949 | "version": "3.0.17", 1950 | "resolved": "http://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.0.17.tgz", 1951 | "integrity": "sha1-l2wgZTBhexTrsyEUI597CTNuk6Y=", 1952 | "dev": true, 1953 | "requires": { 1954 | "create-hash": "^1.1.2", 1955 | "create-hmac": "^1.1.4", 1956 | "ripemd160": "^2.0.1", 1957 | "safe-buffer": "^5.0.1", 1958 | "sha.js": "^2.4.8" 1959 | } 1960 | }, 1961 | "private": { 1962 | "version": "0.1.8", 1963 | "resolved": "http://registry.npm.taobao.org/private/download/private-0.1.8.tgz", 1964 | "integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8=", 1965 | "dev": true 1966 | }, 1967 | "process": { 1968 | "version": "0.11.10", 1969 | "resolved": "http://registry.npm.taobao.org/process/download/process-0.11.10.tgz", 1970 | "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", 1971 | "dev": true 1972 | }, 1973 | "process-nextick-args": { 1974 | "version": "2.0.0", 1975 | "resolved": "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.0.tgz", 1976 | "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=", 1977 | "dev": true 1978 | }, 1979 | "public-encrypt": { 1980 | "version": "4.0.3", 1981 | "resolved": "http://registry.npm.taobao.org/public-encrypt/download/public-encrypt-4.0.3.tgz", 1982 | "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=", 1983 | "dev": true, 1984 | "requires": { 1985 | "bn.js": "^4.1.0", 1986 | "browserify-rsa": "^4.0.0", 1987 | "create-hash": "^1.1.0", 1988 | "parse-asn1": "^5.0.0", 1989 | "randombytes": "^2.0.1", 1990 | "safe-buffer": "^5.1.2" 1991 | } 1992 | }, 1993 | "punycode": { 1994 | "version": "1.4.1", 1995 | "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz", 1996 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", 1997 | "dev": true 1998 | }, 1999 | "querystring": { 2000 | "version": "0.2.0", 2001 | "resolved": "http://registry.npm.taobao.org/querystring/download/querystring-0.2.0.tgz", 2002 | "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", 2003 | "dev": true 2004 | }, 2005 | "querystring-es3": { 2006 | "version": "0.2.1", 2007 | "resolved": "http://registry.npm.taobao.org/querystring-es3/download/querystring-es3-0.2.1.tgz", 2008 | "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", 2009 | "dev": true 2010 | }, 2011 | "randombytes": { 2012 | "version": "2.0.6", 2013 | "resolved": "http://registry.npm.taobao.org/randombytes/download/randombytes-2.0.6.tgz", 2014 | "integrity": "sha1-0wLFIpSFiISKjTAMkytEwkIx2oA=", 2015 | "dev": true, 2016 | "requires": { 2017 | "safe-buffer": "^5.1.0" 2018 | } 2019 | }, 2020 | "randomfill": { 2021 | "version": "1.0.4", 2022 | "resolved": "http://registry.npm.taobao.org/randomfill/download/randomfill-1.0.4.tgz", 2023 | "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=", 2024 | "dev": true, 2025 | "requires": { 2026 | "randombytes": "^2.0.5", 2027 | "safe-buffer": "^5.1.0" 2028 | } 2029 | }, 2030 | "read-only-stream": { 2031 | "version": "2.0.0", 2032 | "resolved": "http://registry.npm.taobao.org/read-only-stream/download/read-only-stream-2.0.0.tgz", 2033 | "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", 2034 | "dev": true, 2035 | "requires": { 2036 | "readable-stream": "^2.0.2" 2037 | } 2038 | }, 2039 | "readable-stream": { 2040 | "version": "2.3.6", 2041 | "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.6.tgz", 2042 | "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", 2043 | "dev": true, 2044 | "requires": { 2045 | "core-util-is": "~1.0.0", 2046 | "inherits": "~2.0.3", 2047 | "isarray": "~1.0.0", 2048 | "process-nextick-args": "~2.0.0", 2049 | "safe-buffer": "~5.1.1", 2050 | "string_decoder": "~1.1.1", 2051 | "util-deprecate": "~1.0.1" 2052 | } 2053 | }, 2054 | "regenerate": { 2055 | "version": "1.4.0", 2056 | "resolved": "http://registry.npm.taobao.org/regenerate/download/regenerate-1.4.0.tgz", 2057 | "integrity": "sha1-SoVuxLVuQHfFV1icroXnpMiGmhE=", 2058 | "dev": true 2059 | }, 2060 | "regenerate-unicode-properties": { 2061 | "version": "7.0.0", 2062 | "resolved": "http://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-7.0.0.tgz", 2063 | "integrity": "sha1-EHQFr8xKGQ7F7UUOyqAO0Mr6ekw=", 2064 | "dev": true, 2065 | "requires": { 2066 | "regenerate": "^1.4.0" 2067 | } 2068 | }, 2069 | "regenerator-runtime": { 2070 | "version": "0.12.1", 2071 | "resolved": "http://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.12.1.tgz", 2072 | "integrity": "sha1-+hpxVEdkwDb4xJsToIsllMn4oN4=", 2073 | "dev": true 2074 | }, 2075 | "regenerator-transform": { 2076 | "version": "0.13.3", 2077 | "resolved": "http://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.13.3.tgz", 2078 | "integrity": "sha1-JkvZ/zioziSwbgY2SWsshWtXvLs=", 2079 | "dev": true, 2080 | "requires": { 2081 | "private": "^0.1.6" 2082 | } 2083 | }, 2084 | "regexpu-core": { 2085 | "version": "4.2.0", 2086 | "resolved": "http://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.2.0.tgz", 2087 | "integrity": "sha1-o3RPoDgGz/4UbepEIaPnO9zEex0=", 2088 | "dev": true, 2089 | "requires": { 2090 | "regenerate": "^1.4.0", 2091 | "regenerate-unicode-properties": "^7.0.0", 2092 | "regjsgen": "^0.4.0", 2093 | "regjsparser": "^0.3.0", 2094 | "unicode-match-property-ecmascript": "^1.0.4", 2095 | "unicode-match-property-value-ecmascript": "^1.0.2" 2096 | } 2097 | }, 2098 | "regjsgen": { 2099 | "version": "0.4.0", 2100 | "resolved": "http://registry.npm.taobao.org/regjsgen/download/regjsgen-0.4.0.tgz", 2101 | "integrity": "sha1-wetMiaIJJj+HF8eCWRUjkT7eJWE=", 2102 | "dev": true 2103 | }, 2104 | "regjsparser": { 2105 | "version": "0.3.0", 2106 | "resolved": "http://registry.npm.taobao.org/regjsparser/download/regjsparser-0.3.0.tgz", 2107 | "integrity": "sha1-PDJtp/z9afoNMyV1pByMDN9YjJY=", 2108 | "dev": true, 2109 | "requires": { 2110 | "jsesc": "~0.5.0" 2111 | }, 2112 | "dependencies": { 2113 | "jsesc": { 2114 | "version": "0.5.0", 2115 | "resolved": "http://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz", 2116 | "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", 2117 | "dev": true 2118 | } 2119 | } 2120 | }, 2121 | "resolve": { 2122 | "version": "1.8.1", 2123 | "resolved": "http://registry.npm.taobao.org/resolve/download/resolve-1.8.1.tgz", 2124 | "integrity": "sha1-gvHsGaQjrB+9CAsLqwa6NuhKeiY=", 2125 | "dev": true, 2126 | "requires": { 2127 | "path-parse": "^1.0.5" 2128 | } 2129 | }, 2130 | "restore-cursor": { 2131 | "version": "2.0.0", 2132 | "resolved": "http://registry.npm.taobao.org/restore-cursor/download/restore-cursor-2.0.0.tgz", 2133 | "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", 2134 | "dev": true, 2135 | "requires": { 2136 | "onetime": "^2.0.0", 2137 | "signal-exit": "^3.0.2" 2138 | } 2139 | }, 2140 | "ripemd160": { 2141 | "version": "2.0.2", 2142 | "resolved": "http://registry.npm.taobao.org/ripemd160/download/ripemd160-2.0.2.tgz", 2143 | "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=", 2144 | "dev": true, 2145 | "requires": { 2146 | "hash-base": "^3.0.0", 2147 | "inherits": "^2.0.1" 2148 | } 2149 | }, 2150 | "safe-buffer": { 2151 | "version": "5.1.2", 2152 | "resolved": "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", 2153 | "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=", 2154 | "dev": true 2155 | }, 2156 | "safer-buffer": { 2157 | "version": "2.1.2", 2158 | "resolved": "http://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz", 2159 | "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=", 2160 | "dev": true 2161 | }, 2162 | "semver": { 2163 | "version": "5.6.0", 2164 | "resolved": "http://registry.npm.taobao.org/semver/download/semver-5.6.0.tgz", 2165 | "integrity": "sha1-fnQlb7qknHWqfHogXMInmcrIAAQ=", 2166 | "dev": true 2167 | }, 2168 | "sha.js": { 2169 | "version": "2.4.11", 2170 | "resolved": "http://registry.npm.taobao.org/sha.js/download/sha.js-2.4.11.tgz", 2171 | "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=", 2172 | "dev": true, 2173 | "requires": { 2174 | "inherits": "^2.0.1", 2175 | "safe-buffer": "^5.0.1" 2176 | } 2177 | }, 2178 | "shasum": { 2179 | "version": "1.0.2", 2180 | "resolved": "http://registry.npm.taobao.org/shasum/download/shasum-1.0.2.tgz", 2181 | "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", 2182 | "dev": true, 2183 | "requires": { 2184 | "json-stable-stringify": "~0.0.0", 2185 | "sha.js": "~2.4.4" 2186 | } 2187 | }, 2188 | "shebang-command": { 2189 | "version": "1.2.0", 2190 | "resolved": "http://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz", 2191 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 2192 | "dev": true, 2193 | "requires": { 2194 | "shebang-regex": "^1.0.0" 2195 | } 2196 | }, 2197 | "shebang-regex": { 2198 | "version": "1.0.0", 2199 | "resolved": "http://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz", 2200 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 2201 | "dev": true 2202 | }, 2203 | "shell-quote": { 2204 | "version": "1.6.1", 2205 | "resolved": "http://registry.npm.taobao.org/shell-quote/download/shell-quote-1.6.1.tgz", 2206 | "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", 2207 | "dev": true, 2208 | "requires": { 2209 | "array-filter": "~0.0.0", 2210 | "array-map": "~0.0.0", 2211 | "array-reduce": "~0.0.0", 2212 | "jsonify": "~0.0.0" 2213 | } 2214 | }, 2215 | "signal-exit": { 2216 | "version": "3.0.2", 2217 | "resolved": "http://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz", 2218 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", 2219 | "dev": true 2220 | }, 2221 | "simple-concat": { 2222 | "version": "1.0.0", 2223 | "resolved": "http://registry.npm.taobao.org/simple-concat/download/simple-concat-1.0.0.tgz", 2224 | "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", 2225 | "dev": true 2226 | }, 2227 | "source-map": { 2228 | "version": "0.5.7", 2229 | "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", 2230 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 2231 | "dev": true 2232 | }, 2233 | "ssh2": { 2234 | "version": "0.6.1", 2235 | "resolved": "http://registry.npm.taobao.org/ssh2/download/ssh2-0.6.1.tgz", 2236 | "integrity": "sha1-Xd4ac5S7l4sfnC8BSv/uL1STvUA=", 2237 | "dev": true, 2238 | "requires": { 2239 | "ssh2-streams": "~0.2.0" 2240 | } 2241 | }, 2242 | "ssh2-streams": { 2243 | "version": "0.2.1", 2244 | "resolved": "http://registry.npm.taobao.org/ssh2-streams/download/ssh2-streams-0.2.1.tgz", 2245 | "integrity": "sha1-nJyZZL5g6WRFda8yhnf2Sx5cvXk=", 2246 | "dev": true, 2247 | "requires": { 2248 | "asn1": "~0.2.0", 2249 | "semver": "^5.1.0", 2250 | "streamsearch": "~0.1.2" 2251 | } 2252 | }, 2253 | "stream-browserify": { 2254 | "version": "2.0.1", 2255 | "resolved": "http://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.1.tgz", 2256 | "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", 2257 | "dev": true, 2258 | "requires": { 2259 | "inherits": "~2.0.1", 2260 | "readable-stream": "^2.0.2" 2261 | } 2262 | }, 2263 | "stream-combiner2": { 2264 | "version": "1.1.1", 2265 | "resolved": "http://registry.npm.taobao.org/stream-combiner2/download/stream-combiner2-1.1.1.tgz", 2266 | "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", 2267 | "dev": true, 2268 | "requires": { 2269 | "duplexer2": "~0.1.0", 2270 | "readable-stream": "^2.0.2" 2271 | } 2272 | }, 2273 | "stream-http": { 2274 | "version": "2.8.3", 2275 | "resolved": "http://registry.npm.taobao.org/stream-http/download/stream-http-2.8.3.tgz", 2276 | "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=", 2277 | "dev": true, 2278 | "requires": { 2279 | "builtin-status-codes": "^3.0.0", 2280 | "inherits": "^2.0.1", 2281 | "readable-stream": "^2.3.6", 2282 | "to-arraybuffer": "^1.0.0", 2283 | "xtend": "^4.0.0" 2284 | } 2285 | }, 2286 | "stream-splicer": { 2287 | "version": "2.0.0", 2288 | "resolved": "http://registry.npm.taobao.org/stream-splicer/download/stream-splicer-2.0.0.tgz", 2289 | "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", 2290 | "dev": true, 2291 | "requires": { 2292 | "inherits": "^2.0.1", 2293 | "readable-stream": "^2.0.2" 2294 | } 2295 | }, 2296 | "streamsearch": { 2297 | "version": "0.1.2", 2298 | "resolved": "http://registry.npm.taobao.org/streamsearch/download/streamsearch-0.1.2.tgz", 2299 | "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=", 2300 | "dev": true 2301 | }, 2302 | "string_decoder": { 2303 | "version": "1.1.1", 2304 | "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz", 2305 | "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", 2306 | "dev": true, 2307 | "requires": { 2308 | "safe-buffer": "~5.1.0" 2309 | } 2310 | }, 2311 | "strip-ansi": { 2312 | "version": "4.0.0", 2313 | "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz", 2314 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 2315 | "dev": true, 2316 | "requires": { 2317 | "ansi-regex": "^3.0.0" 2318 | } 2319 | }, 2320 | "subarg": { 2321 | "version": "1.0.0", 2322 | "resolved": "http://registry.npm.taobao.org/subarg/download/subarg-1.0.0.tgz", 2323 | "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", 2324 | "dev": true, 2325 | "requires": { 2326 | "minimist": "^1.1.0" 2327 | } 2328 | }, 2329 | "supports-color": { 2330 | "version": "5.5.0", 2331 | "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz", 2332 | "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", 2333 | "dev": true, 2334 | "requires": { 2335 | "has-flag": "^3.0.0" 2336 | } 2337 | }, 2338 | "syntax-error": { 2339 | "version": "1.4.0", 2340 | "resolved": "http://registry.npm.taobao.org/syntax-error/download/syntax-error-1.4.0.tgz", 2341 | "integrity": "sha1-LZ1P9cBkrLcRWUo+O5UFStUdkHw=", 2342 | "dev": true, 2343 | "requires": { 2344 | "acorn-node": "^1.2.0" 2345 | } 2346 | }, 2347 | "through": { 2348 | "version": "2.3.8", 2349 | "resolved": "http://registry.npm.taobao.org/through/download/through-2.3.8.tgz", 2350 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 2351 | "dev": true 2352 | }, 2353 | "through2": { 2354 | "version": "2.0.5", 2355 | "resolved": "http://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz", 2356 | "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=", 2357 | "dev": true, 2358 | "requires": { 2359 | "readable-stream": "~2.3.6", 2360 | "xtend": "~4.0.1" 2361 | } 2362 | }, 2363 | "timers-browserify": { 2364 | "version": "1.4.2", 2365 | "resolved": "http://registry.npm.taobao.org/timers-browserify/download/timers-browserify-1.4.2.tgz", 2366 | "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", 2367 | "dev": true, 2368 | "requires": { 2369 | "process": "~0.11.0" 2370 | } 2371 | }, 2372 | "to-arraybuffer": { 2373 | "version": "1.0.1", 2374 | "resolved": "http://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz", 2375 | "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", 2376 | "dev": true 2377 | }, 2378 | "to-fast-properties": { 2379 | "version": "2.0.0", 2380 | "resolved": "http://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz", 2381 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", 2382 | "dev": true 2383 | }, 2384 | "trim-right": { 2385 | "version": "1.0.1", 2386 | "resolved": "http://registry.npm.taobao.org/trim-right/download/trim-right-1.0.1.tgz", 2387 | "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", 2388 | "dev": true 2389 | }, 2390 | "tty-browserify": { 2391 | "version": "0.0.1", 2392 | "resolved": "http://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.1.tgz", 2393 | "integrity": "sha1-PwUlHuF5BN/QZ3VGZw25ZRaCuBE=", 2394 | "dev": true 2395 | }, 2396 | "typedarray": { 2397 | "version": "0.0.6", 2398 | "resolved": "http://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz", 2399 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 2400 | "dev": true 2401 | }, 2402 | "uglify-js": { 2403 | "version": "3.4.9", 2404 | "resolved": "http://registry.npm.taobao.org/uglify-js/download/uglify-js-3.4.9.tgz", 2405 | "integrity": "sha1-rwLxgMEgfXZDLkc+0koo9KeCuuM=", 2406 | "dev": true, 2407 | "requires": { 2408 | "commander": "~2.17.1", 2409 | "source-map": "~0.6.1" 2410 | }, 2411 | "dependencies": { 2412 | "source-map": { 2413 | "version": "0.6.1", 2414 | "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", 2415 | "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", 2416 | "dev": true 2417 | } 2418 | } 2419 | }, 2420 | "umd": { 2421 | "version": "3.0.3", 2422 | "resolved": "http://registry.npm.taobao.org/umd/download/umd-3.0.3.tgz", 2423 | "integrity": "sha1-qp/mU8QrkJdnhInAEACstp8LJs8=", 2424 | "dev": true 2425 | }, 2426 | "undeclared-identifiers": { 2427 | "version": "1.1.2", 2428 | "resolved": "http://registry.npm.taobao.org/undeclared-identifiers/download/undeclared-identifiers-1.1.2.tgz", 2429 | "integrity": "sha1-fYUKmIh8/0vQv2SZnAFNCO1tGsw=", 2430 | "dev": true, 2431 | "requires": { 2432 | "acorn-node": "^1.3.0", 2433 | "get-assigned-identifiers": "^1.2.0", 2434 | "simple-concat": "^1.0.0", 2435 | "xtend": "^4.0.1" 2436 | } 2437 | }, 2438 | "unicode-canonical-property-names-ecmascript": { 2439 | "version": "1.0.4", 2440 | "resolved": "http://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz", 2441 | "integrity": "sha1-JhmADEyCWADv3YNDr33Zkzy+KBg=", 2442 | "dev": true 2443 | }, 2444 | "unicode-match-property-ecmascript": { 2445 | "version": "1.0.4", 2446 | "resolved": "http://registry.npm.taobao.org/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-1.0.4.tgz", 2447 | "integrity": "sha1-jtKjJWmWG86SJ9Cc0/+7j+1fAgw=", 2448 | "dev": true, 2449 | "requires": { 2450 | "unicode-canonical-property-names-ecmascript": "^1.0.4", 2451 | "unicode-property-aliases-ecmascript": "^1.0.4" 2452 | } 2453 | }, 2454 | "unicode-match-property-value-ecmascript": { 2455 | "version": "1.0.2", 2456 | "resolved": "http://registry.npm.taobao.org/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.0.2.tgz", 2457 | "integrity": "sha1-nx3HaSbWzPRSMQVk/YNKzgWWY9Q=", 2458 | "dev": true 2459 | }, 2460 | "unicode-property-aliases-ecmascript": { 2461 | "version": "1.0.4", 2462 | "resolved": "http://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.0.4.tgz", 2463 | "integrity": "sha1-WlM/MbQxfqdvF9gH+g0RZUYRHdA=", 2464 | "dev": true 2465 | }, 2466 | "url": { 2467 | "version": "0.11.0", 2468 | "resolved": "http://registry.npm.taobao.org/url/download/url-0.11.0.tgz", 2469 | "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", 2470 | "dev": true, 2471 | "requires": { 2472 | "punycode": "1.3.2", 2473 | "querystring": "0.2.0" 2474 | }, 2475 | "dependencies": { 2476 | "punycode": { 2477 | "version": "1.3.2", 2478 | "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz", 2479 | "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", 2480 | "dev": true 2481 | } 2482 | } 2483 | }, 2484 | "util": { 2485 | "version": "0.10.4", 2486 | "resolved": "http://registry.npm.taobao.org/util/download/util-0.10.4.tgz", 2487 | "integrity": "sha1-OqASW/5mikZy3liFfTrOJ+y3aQE=", 2488 | "dev": true, 2489 | "requires": { 2490 | "inherits": "2.0.3" 2491 | } 2492 | }, 2493 | "util-deprecate": { 2494 | "version": "1.0.2", 2495 | "resolved": "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", 2496 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 2497 | "dev": true 2498 | }, 2499 | "vm-browserify": { 2500 | "version": "1.1.0", 2501 | "resolved": "http://registry.npm.taobao.org/vm-browserify/download/vm-browserify-1.1.0.tgz", 2502 | "integrity": "sha1-vXbWojMj4sqP+hICjcBFWcdfkBk=", 2503 | "dev": true 2504 | }, 2505 | "wcwidth": { 2506 | "version": "1.0.1", 2507 | "resolved": "http://registry.npm.taobao.org/wcwidth/download/wcwidth-1.0.1.tgz", 2508 | "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", 2509 | "dev": true, 2510 | "requires": { 2511 | "defaults": "^1.0.3" 2512 | } 2513 | }, 2514 | "which": { 2515 | "version": "1.3.1", 2516 | "resolved": "http://registry.npm.taobao.org/which/download/which-1.3.1.tgz", 2517 | "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", 2518 | "dev": true, 2519 | "requires": { 2520 | "isexe": "^2.0.0" 2521 | } 2522 | }, 2523 | "wrappy": { 2524 | "version": "1.0.2", 2525 | "resolved": "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", 2526 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 2527 | "dev": true 2528 | }, 2529 | "xtend": { 2530 | "version": "4.0.1", 2531 | "resolved": "http://registry.npm.taobao.org/xtend/download/xtend-4.0.1.tgz", 2532 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", 2533 | "dev": true 2534 | } 2535 | } 2536 | } 2537 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bigdata-sdk", 3 | "version": "1.0.0", 4 | "description": "大数据h5采集sdk", 5 | "main": "./dist/bigdata-sdk.min.js", 6 | "scripts": { 7 | "build-test": "cp -f ./src/config/test.js ./src/config/index.js && node ./build.js > ./dist/bigdata-sdk.test.js && cross-env MINIFY=1 node ./build.js > ./dist/bigdata-sdk.test.min.js", 8 | "build": "cp -f ./src/config/prod.js ./src/config/index.js && node ./build.js > ./dist/bigdata-sdk.js && cross-env MINIFY=1 node ./build.js > ./dist/bigdata-sdk.min.js", 9 | "deploySit": "node scripts/deploy.js --sit" 10 | }, 11 | "keywords": [ 12 | "bigdata", 13 | "sdk" 14 | ], 15 | "author": "BillionChen", 16 | "license": "MIT", 17 | "devDependencies": { 18 | "@babel/core": "^7.1.2", 19 | "@babel/plugin-transform-object-assign": "^7.0.0", 20 | "@babel/plugin-transform-runtime": "^7.1.0", 21 | "@babel/preset-env": "^7.1.0", 22 | "@babel/runtime": "^7.1.2", 23 | "babelify": "^10.0.0", 24 | "browserify": "^16.2.3", 25 | "cross-env": "^5.2.0", 26 | "cross-spawn": "^6.0.5", 27 | "glob": "^7.1.3", 28 | "ora": "^3.0.0", 29 | "ssh2": "^0.6.1", 30 | "uglify-js": "^3.4.9" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /scripts/config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | sit: { 3 | // 服务器文件路径 4 | remotePath: '', 5 | username: '', 6 | password: '', 7 | host: '', 8 | port: 22 9 | }, 10 | uat: { 11 | remotePath: '', 12 | username: '', 13 | password: '', 14 | host: '', 15 | port: 22 16 | }, 17 | prod: { 18 | remotePath: '', 19 | username: '', 20 | password: '', 21 | host: '', 22 | port: 22 23 | } 24 | }; 25 | -------------------------------------------------------------------------------- /scripts/deploy.js: -------------------------------------------------------------------------------- 1 | const Client = require('ssh2').Client 2 | const spawn = require("cross-spawn") 3 | const path = require('path') 4 | const ora = require('ora'); 5 | const glob = require("glob") 6 | const env = process.argv[process.argv.length - 1].replace('--', '') 7 | let config = require('./config.js')[env]; 8 | if (!config) { 9 | console.log(`找不到${env}环境用户配置文件`) 10 | return 11 | } 12 | const cwd = path.dirname(__dirname) 13 | 14 | const spinner = ora('开始打包...').start(); 15 | const remotePath = config.remotePath 16 | 17 | // const build = spawn('yarn', [`build:${env}`], { 18 | const build = spawn('yarn', [`build-test`], { 19 | cwd: cwd 20 | }) 21 | build.on('close', function(code) { 22 | if (code !== 0) { 23 | console.log('打包失败') 24 | spinner.stop() 25 | return 26 | } 27 | spinner.text = "打包完成,开始上传..." 28 | const conn = new Client(); 29 | conn.on('ready', function() { 30 | glob('**/*.*',{ 31 | cwd: path.join(cwd, 'dist') 32 | }, function (err, files) { 33 | let length = files.length, index = 0 34 | conn.sftp((err, sftp) => { 35 | spinner.stop() 36 | const upload = () => { 37 | const currentFile = files[index++] 38 | if ( !currentFile || index > length ) { 39 | console.log('上传完毕') 40 | conn.end(); 41 | return; 42 | } 43 | sftp.fastPut(path.join(cwd,'dist', currentFile), path.join(remotePath, currentFile).replace(/\\/g, '/'), function(err, result){ 44 | if (err) { 45 | console.log(err, '出错了') 46 | return 47 | } 48 | console.log(`${currentFile}上传成功`) 49 | upload() 50 | }); 51 | } 52 | upload() 53 | }) 54 | }) 55 | 56 | }).connect({ 57 | host: config.host, 58 | port: config.port, 59 | username: config.username, 60 | password: config.password 61 | }); 62 | }); -------------------------------------------------------------------------------- /src/config/columns.js: -------------------------------------------------------------------------------- 1 | export default { 2 | uname: "uname", //登陆成功后显示的用户名 3 | uid: "uuid", //登陆ID 4 | uID: "uID", //用户唯一标识 5 | sid: "sessionId",// 会话id 6 | ifLogin: "iflogin", //是否登陆 7 | uonly: "uonly", // 基于设备的唯一标识:由前端js生成,标识设备,不同的设备不一致 8 | 9 | deviceInformation: "deviceInformation", //设备信息 10 | usystem: "system_type", //操作系统 11 | uretion: "uvertion", //系统版本 12 | resolution: "resolution", //分辨率 13 | platform: "uusource", //来源 14 | 15 | eventName: "action_type_name", //事件名称 16 | eventDate: "action_time", //事件发生的时间 17 | userCname: "button_link_name", //按钮名称 18 | 19 | currentUrl: "curr_page_url", //当前页面URL 20 | title: "curr_page_title", //页面标题 21 | referrerUrl: "last_ref", //上一个页面url 22 | referrerTitlt: "last_title", //上一个页面标题 23 | interview: "interview_time", //进入页面的时间 24 | 25 | longitude: "longitude",//经度 26 | latitude: "latitude",//纬度 27 | addr: "addr",//详细地址信息 28 | country: "country",//获取国家 29 | province: "province",//获取省份 30 | city: "city",//获取城市 31 | district: "district",//获取县区 32 | town: "town",//获取镇 33 | street: "street"//获取街道信息 34 | } -------------------------------------------------------------------------------- /src/config/prod.js: -------------------------------------------------------------------------------- 1 | export default { 2 | NODE_ENV: 'prod',// 环境名称 3 | BAIDU_MAP_AK: '', 4 | STORAGE_PREFIX: 'dsj_',// 存储变量命名空间/前缀 5 | STORAGE_ADDRESS: 'address_info',// 地址存储 6 | STORAGE_USER_AGENT: 'user_agent_info',// ua存储 7 | STORAGE_USERINFO: 'user_info',// 用户列表存储 8 | STORAGE_PAGE:'page_info',// 保存当前页面和之前页面的信息 9 | 10 | CONSOLE_DEBUG: false, 11 | CONSOLE_LOG: false, 12 | CONSOLE_INFO: true, 13 | CONSOLE_WARN: true, 14 | 15 | SERVER_URL: 'http://localhost:8080/dsj/', 16 | 17 | SESSION_TIMEOUT: 600,// 单位秒,默认 10分钟 18 | 19 | // 以下为配置项 20 | USERNAME_KEY: '',// 用户名取值字段 21 | PLATFORM: '',// 平台名称 22 | AUTO_PV: false,// 进入页面或者刷新时自动调用pageView开关 23 | } -------------------------------------------------------------------------------- /src/config/test.js: -------------------------------------------------------------------------------- 1 | import config from './prod'; 2 | export default Object.assign(config, { 3 | NODE_ENV: 'test', 4 | BAIDU_MAP_AK: '', 5 | 6 | CONSOLE_DEBUG: true, 7 | CONSOLE_LOG: true, 8 | CONSOLE_INFO: true, 9 | CONSOLE_WARN: true, 10 | 11 | SERVER_URL: 'http://localhost:8080/dsj/', 12 | }); -------------------------------------------------------------------------------- /src/function/addr.js: -------------------------------------------------------------------------------- 1 | // 大数据采集经纬度 2 | import jsonp from '../utils/jsonp'; 3 | import config from '../config'; 4 | import columns from '../config/columns'; 5 | import console from '../utils/console'; 6 | class Address { 7 | constructor() { 8 | this.value = sessionStorage.getItem(this.storageKey) && sessionStorage.getItem(this.storageKey) !== 'undefined' ? 9 | JSON.parse(sessionStorage.getItem(this.storageKey)) : 10 | null; 11 | } 12 | 13 | // ps: 百度地图和腾讯地图经纬度获取的值不一样 14 | setAddress (latitude, longitude) { 15 | return new Promise((resolve, reject) => { 16 | jsonp({ 17 | url: 'https://api.map.baidu.com/geocoder/v2/', 18 | data: { 19 | coordtype: 'wgs84ll', 20 | ak: config.BAIDU_MAP_AK, 21 | location: latitude + ',' + longitude, 22 | output: 'json', 23 | extensions_town: 'true' 24 | }, 25 | callbackName: 'baidumapGetLocation', 26 | time: 5000, 27 | success: data => { 28 | // console.log('jsonp getLocation success'); 29 | this.value = { 30 | location: data.result.location, 31 | formatted_address: data.result.formatted_address, 32 | addressComponent: data.result.addressComponent 33 | }; 34 | sessionStorage.setItem(this.storageKey, JSON.stringify(this.value)); 35 | // 此处放成功后执行的代码 36 | resolve(this.value); 37 | }, 38 | error: function (e) { 39 | reject(e || new Error('获取地理数据失败,请检查网络')); 40 | } 41 | }); 42 | }); 43 | } 44 | 45 | get storageKey () { 46 | return config.STORAGE_PREFIX + config.STORAGE_ADDRESS; 47 | } 48 | 49 | set value (e) { 50 | this._value = e; 51 | } 52 | 53 | get value () { 54 | return this._value || {}; 55 | } 56 | 57 | get location () { 58 | return this.value.location || {}; 59 | } 60 | 61 | get addressComponent () { 62 | return this.value.addressComponent || {}; 63 | } 64 | 65 | // 给最后组合数据用的 66 | get data () { 67 | return { 68 | [columns.longitude]: this.location.lng || null, //获取经度 69 | [columns.latitude]: this.location.lat || null, //获取纬度 70 | [columns.addr]: this.value.formatted_address || null, //获取详细地址 71 | [columns.country]: this.addressComponent.country || null, //获取国家 72 | [columns.province]: this.addressComponent.province || null, //获取省份 73 | [columns.city]: this.addressComponent.city || null, //获取城市 74 | [columns.district]: this.addressComponent.district || null, //获取县区 75 | [columns.town]: this.addressComponent.town || null, //获取镇 76 | [columns.street]: this.addressComponent.street || null //获取街道信息 77 | }; 78 | } 79 | 80 | } 81 | export default new Address(); 82 | 83 | // 以下是jsonp接口返回结果格式 84 | /* { 85 | 'status': 0, 86 | 'result': { 87 | 'location': { 88 | 'lng': 113.25017872995559, 89 | 'lat': 22.9468554669509 90 | }, 91 | 'formatted_address': '广东省佛山市顺德区G105(京珠线)', 92 | 'business': '陈村', 93 | 'addressComponent': { 94 | 'country': '中国', 95 | 'country_code': 0, 96 | 'country_code_iso': 'CHN', 97 | 'country_code_iso2': 'CN', 98 | 'province': '广东省', 99 | 'city': '佛山市', 100 | 'city_level': 2, 101 | 'district': '顺德区', 102 | 'town': '北滘镇', 103 | 'adcode': '440606', 104 | 'street': 'G105(京珠线)', 105 | 'street_number': '', 106 | 'direction': '', 107 | 'distance': '' 108 | }, 109 | 'pois': [], 110 | 'roads': [], 111 | 'poiRegions': [], 112 | 'sematic_description': '物流大厦附近46米', 113 | 'cityCode': 138 114 | } 115 | } */ -------------------------------------------------------------------------------- /src/function/userAgent.js: -------------------------------------------------------------------------------- 1 | import console from '../utils/console'; 2 | import columns from '../config/columns'; 3 | import config from '../config'; 4 | class UserAgent { 5 | constructor () { 6 | this.data = sessionStorage.getItem(this.storageKey) && sessionStorage.getItem(this.storageKey) !== 'undefined' ? 7 | JSON.parse(sessionStorage.getItem(this.storageKey)) : 8 | this._getUserAgent(); 9 | // console.log('userAgent:', this.data); 10 | } 11 | 12 | // 获取并缓存ua 13 | _getUserAgent() { 14 | var deviceInformation = ""; //设备信息 15 | var usystem = ""; //操作系统 16 | // navigator 对象是浏览器自带的,可以直接调用获取信息 17 | var str = navigator.userAgent.toLowerCase(); 18 | var uretion = ""; //系统版本 19 | if (/(iPhone|iPad|iPod|iOS|mac)/i.test(navigator.userAgent)) { 20 | var ver = str.match(/ os (.*?) like mac os/); 21 | var width = window.screen.width; 22 | // ubrand = "iphone"; 23 | usystem = "ios"; 24 | uretion = ver[1]; 25 | //设备信息 26 | var i = str.match(/[(\b]/).index; 27 | var s = str.match(/[)\b]/).index + 1; 28 | deviceInformation = str.substring(i, s); 29 | //操作系统,PC端有系统版本 30 | } else if (/(Android)/i.test(navigator.userAgent)) { 31 | var ver = str.match(/android (.*?); (.*?)build/); 32 | usystem = "android"; 33 | uretion = ver[1]; 34 | //设备信息 35 | var i = str.match(/[(\b]/).index; 36 | var s = str.match(/[)\b]/).index + 1; 37 | deviceInformation = str.substring(i, s); 38 | } else { 39 | usystem = "window"; 40 | //设备信息 41 | var i = str.match(/[(\b]/).index; 42 | var s = str.match(/[)\b]/).index + 1; 43 | deviceInformation = str.substring(i, s); 44 | var ver = deviceInformation.split(";"); 45 | 46 | //根据nt版本判断操作系统 47 | if (deviceInformation.search("6.1")) { 48 | uretion = "win7"; 49 | } else if (deviceInformation.search("6.2")) { 50 | uretion = "win8"; 51 | } else if (deviceInformation.search("6.3")) { 52 | uretion = "win8.1"; 53 | } else if (deviceInformation.search("10.0")) { 54 | uretion = "win10"; 55 | } else { 56 | uretion = "win xp"; 57 | } 58 | } 59 | let rs = { 60 | [columns.deviceInformation]: deviceInformation,//设备信息 61 | [columns.usystem]: usystem,//操作系统 62 | [columns.uretion]: uretion,//系统版本 63 | [columns.resolution]: window.screen.width * window.devicePixelRatio + "," + screen.height * window.devicePixelRatio, //获取屏幕实际分辨率 64 | }; 65 | sessionStorage.setItem(this.storageKey, JSON.stringify(this.data)); 66 | return rs; 67 | } 68 | 69 | get storageKey () { 70 | return config.STORAGE_PREFIX + config.STORAGE_USER_AGENT; 71 | } 72 | 73 | get data () { 74 | return this._data; 75 | } 76 | 77 | set data (v) { 78 | this._data = v; 79 | } 80 | } 81 | 82 | // 此处待定ua的storage的key 83 | export default new UserAgent(); -------------------------------------------------------------------------------- /src/function/uuid.js: -------------------------------------------------------------------------------- 1 | import console from '../utils/console'; 2 | //产生随机用户ID 3 | class Uuid { 4 | constructor() { 5 | this.value = this._generateId(); 6 | // console.log('生成了uuid:', this.value); 7 | } 8 | 9 | get value() { 10 | return this._value; 11 | } 12 | 13 | set value (v) { 14 | this._value = v; 15 | } 16 | 17 | _generateId() { 18 | var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; 19 | var tmpid = []; 20 | var r; 21 | tmpid[8] = tmpid[13] = tmpid[18] = tmpid[23] = '-'; 22 | tmpid[14] = '4'; 23 | for (var i = 0; i < 36; i++) { 24 | if (!tmpid[i]) { 25 | r = 0 | Math.random() * 16; 26 | tmpid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r]; 27 | } 28 | } 29 | return tmpid.join(''); 30 | } 31 | } 32 | 33 | export default Uuid; -------------------------------------------------------------------------------- /src/handler/event.js: -------------------------------------------------------------------------------- 1 | import config from '../config'; 2 | import columns from '../config/columns'; 3 | import user from './user'; 4 | import userAgent from '../function/userAgent'; 5 | import address from '../function/addr'; 6 | 7 | let storageKey = config.STORAGE_PREFIX + config.STORAGE_PAGE; 8 | 9 | let pageObj = null; 10 | 11 | const setPageObj = function (last, current) { 12 | let lastPageObj = last || pageObj || sessionStorage.getItem(storageKey) && 13 | sessionStorage.getItem(storageKey) !== 'undefined' ? 14 | JSON.parse(sessionStorage.getItem(storageKey)) : { 15 | interview: null, 16 | title: null, 17 | url: null 18 | }; 19 | let currentPageObj = current || { 20 | title: document.title, 21 | url: window.location.href, 22 | interview: new Date().getTime(), 23 | }; 24 | pageObj = { 25 | lastPageObj: {// 这里重新记录一下上个页面 26 | interview: lastPageObj.interview, 27 | title: lastPageObj.title, 28 | url: lastPageObj.url 29 | }, 30 | ...currentPageObj 31 | }; 32 | // ps: 这里好粗糙啊,只能兼容单页面应用;app新开webview需要另外一种写法,需要监听关闭webview 33 | // 如果刷新,则不保存 34 | if (pageObj.lastPageObj.url !== pageObj.url) { 35 | sessionStorage.setItem(storageKey, JSON.stringify(pageObj)); 36 | } 37 | } 38 | 39 | const getPageObjData = function () { 40 | return pageObj ? { 41 | [columns.interview]: pageObj.interview,// 进入页面的时间 42 | [columns.currentUrl]: urlFilter(pageObj.url),//当前页面的URL 43 | [columns.title]: pageObj.title,// 当前页面的标题 44 | [columns.referrerUrl]: urlFilter(pageObj.lastPageObj.url),//上个页面的URL 45 | [columns.referrerTitlt]: pageObj.lastPageObj.title,//上一个页面的标题 46 | } : { 47 | [columns.title]: document.title, 48 | [columns.currentUrl]: window.location.href, 49 | [columns.interview]: new Date().getTime(), 50 | [columns.referrerUrl]:null, 51 | [columns.referrerTitlt]:null 52 | }; 53 | } 54 | 55 | // 报告跳转事件 56 | export const pageView = function (last, current) { 57 | // 设置初次访问时间 58 | setTimeout(function() { 59 | setPageObj(last, current); 60 | user.updateLastVisitTime(); 61 | let data = setUpData({ 62 | [columns.eventName]: 'p_v', // 这里配置事件名称 63 | [columns.eventDate]: null,// 事件发生时的时间 64 | [columns.userCname]: null,// 按钮名称 65 | }) 66 | send(data); 67 | }); 68 | } 69 | 70 | // 报告点击事件 71 | export const clickEvent = function (e) { 72 | // console.log('点击'); 73 | let tg = getClickTarget(e.target); 74 | // console.log('触发了点击', tg); 75 | user.updateLastVisitTime(); 76 | if (tg) { 77 | let actionName = tg.getAttribute("DSJ_text") || tg.textContent.match(/[\u4e00-\u9fa5]/g).join("") || null; 78 | let data = setUpData({ 79 | [columns.eventName]: 'e_e', // 这里配置事件名称 80 | [columns.eventDate]: new Date().getTime(),// 事件发生时的时间 81 | [columns.userCname]: actionName,// 按钮名称 82 | }) 83 | send(data); 84 | user.updateLastVisitTime(); 85 | } 86 | } 87 | 88 | const getClickTarget = function (node, lv) { 89 | // 默认button标签、a标签、有点击类的标签需要采集并发送数据 90 | // if (tg.nodeName === 'BUTTON' || tg.nodeName === 'A' || tg.classList.contains('DSJ__click')) { 91 | lv = lv || 1; 92 | if (node.classList.contains('DSJ__click') || node.getAttribute("DSJ") !== null) { 93 | return node; 94 | } else if (lv <= 3 && node.parentNode.nodeName !== 'BODY') { 95 | return getClickTarget(node.parentNode, lv++); 96 | } else { 97 | return null 98 | } 99 | } 100 | 101 | // 监听点击事件 102 | const clickWatch = function () { 103 | if(document.addEventListener){ 104 | document.addEventListener("click", clickEvent, true); 105 | }else if(document.attachEvent){//兼容IE 106 | document.attachEvent("click", clickEvent); 107 | } 108 | } 109 | 110 | clickWatch(); 111 | 112 | // 报告自定义事件 113 | export const customEvent = function (data) { 114 | user.updateLastVisitTime(); 115 | let mydata = setUpData({ 116 | [columns.eventName]: 'p_e', // 这里配置事件名称 117 | [columns.eventDate]: new Date().getTime(),// 事件发生时的时间 118 | [columns.userCname]: '自定义事件',// 按钮名称 119 | }) 120 | for(let i in data){//遍历属性 121 | mydata["pm_"+i]=data[i];//防止冲突加上前缀pm 122 | } 123 | send(mydata); 124 | } 125 | 126 | function urlFilter (url) { 127 | return url 128 | } 129 | 130 | // 组合数据 131 | function setUpData (data) { 132 | return { 133 | [columns.platform]: config.PLATFORM,// 系统平台 134 | ...userAgent.data,// ua相关信息 135 | ...address.data,// 地址相关信息 136 | ...user.data,// 用户信息 137 | ...getPageObjData(), 138 | ...data // 传入的参数 139 | } 140 | } 141 | 142 | // 发送到服务器 143 | function send(data) { 144 | if (typeof data !== 'string') data = JSON.stringify(data); 145 | //创建一个图片对象,参数为宽度和高度 146 | var i2 = new Image(1, 1); 147 | //图片加载过程中发生错误时调用的事件句柄 148 | i2.onerror = function (error) { 149 | // 这里可以进行重试操作 150 | }; 151 | //更改i2的src然后会访问所在位置,服务器会记录访问日志 152 | i2.src = config.SERVER_URL + "?data=" + encodeURIComponent(data); 153 | } 154 | -------------------------------------------------------------------------------- /src/handler/user.js: -------------------------------------------------------------------------------- 1 | import Uuid from '../function/uuid'; 2 | import config from '../config'; 3 | import columns from '../config/columns'; 4 | 5 | class User { 6 | // 构造方法,读取已有的用户列表信息,如果为空,则生成一个游客 7 | constructor () { 8 | this.userlist = sessionStorage.getItem(this.storageKey) && sessionStorage.getItem(this.storageKey) !== 'undefined' ? 9 | JSON.parse(sessionStorage.getItem(this.storageKey)) : 10 | [this._generateVisitorInfo()]; 11 | } 12 | 13 | // 生成游客信息 14 | _generateVisitorInfo () { 15 | return { 16 | uuid: new Uuid().value,//生成uuid 17 | status: true,// 激活状态,标识当前用户 18 | login: false,// 登录状态,区分游客和用户 19 | info: { // 用户信息 20 | // username: '游客' 21 | }, 22 | // 会话id,一个用户可能存在多个会话,会话超过超时时间后 23 | sessionId: new Uuid().value, 24 | lastVisitTime: new Date().getTime(),// 最后访问时间,用于划分会话 25 | } 26 | } 27 | 28 | updateLastVisitTime () { 29 | let info = this.userlist.find(x => x.status); 30 | let time = new Date().getTime(); 31 | let lastVisitTime = info.lastVisitTime; 32 | // 会话时间超过十分钟,更新会话id 33 | if(time - lastVisitTime > config.SESSION_TIMEOUT * 1000) { 34 | info.sessionId = new Uuid().value; 35 | } 36 | info.lastVisitTime = time; 37 | } 38 | 39 | get info () {// 提供只读的用户信息 40 | return this.userlist.find(x => x.status) 41 | } 42 | 43 | // 提供只读的用户信息用于组合给后台记录操作 44 | get data () { 45 | return { 46 | [columns.uname]: this._getInfoKeyValue(this.info.info), 47 | [columns.uonly]: this.info.uuid, 48 | [columns.sid]: this.info.sessionId, 49 | [columns.ifLogin]: this.info.login, 50 | } 51 | } 52 | // item(uuid+状态+信息): {uuid: String, status: Bool, info: Object} 53 | // get userlist () {// userlist是一个Array 54 | // return this._userlist; 55 | // } 56 | // set userlist (v) {// 每次修改userlist时需要保存session 57 | // this._userlist = v; 58 | // } 59 | 60 | _cache () {// 缓存保存 61 | sessionStorage.setItem(this.storageKey, JSON.stringify(this.userlist)); 62 | } 63 | 64 | // 获取用户信息关键值(唯一标识) 65 | // 有的用户信息里面可能不是username作为唯一标识,所以目前采用配置加降级获取信息 66 | _getInfoKeyValue (info) { 67 | return (config.USERNAME_KEY ? 68 | info[config.USERNAME_KEY] : 69 | (info.id || info.username)) || '游客' 70 | } 71 | 72 | /** 73 | * 登录操作需要把登录成功后的个人信息传入到此接口 74 | * @param {Object/String} info 登录返回的信息包含用户名手机号等 75 | * 必须包含username或者其他唯一编码赋值到username中 76 | */ 77 | login (info) { 78 | if (!info) { 79 | console.error('调用大数据登录时需要带用户信息对象参数'); 80 | return false; 81 | } 82 | if (typeof info === 'string') info = {username: info}; 83 | // 判断是否曾经登录过 84 | let find = this.userlist.find(x => this._getInfoKeyValue(x.info) === this._getInfoKeyValue(info)); 85 | this.userlist.find(x => x.status).status = false;// 将其他的激活状态改为false 86 | if (find) { // 登录过的重新激活登录状态 87 | find.status = true; 88 | this.updateLastVisitTime(); 89 | } else {//未登录过的生成一个登录记录 90 | this.userlist.push({ 91 | uuid: new Uuid().value,//生成uuid 92 | status: true,// 激活状态,标识当前用户 93 | login: true,// 登录状态,区分游客和用户 94 | info, // 用户信息 95 | sessionId: new Uuid().value, 96 | lastVisitTime: new Date().getTime(), 97 | }) 98 | } 99 | this._cache(); 100 | // ps:这里后面估计会增加发送到服务器操作 101 | } 102 | 103 | /** 104 | * 退出登录需要调用此接口以更改uuid标识不同的用户 105 | */ 106 | logout () { 107 | let find = this.userlist.find(x => x.status); 108 | if (find) { 109 | find.status = false; 110 | find.lastVisitTime = new Date().getTime(); 111 | } 112 | let visitor = this.userlist.find(x => !x.login); 113 | visitor.status = true; 114 | this.updateLastVisitTime(); 115 | this._cache(); 116 | // ps:这里后面估计会增加发送到服务器操作 117 | } 118 | 119 | get storageKey () { 120 | return config.STORAGE_PREFIX + config.STORAGE_USERINFO 121 | } 122 | } 123 | 124 | export default new User(); -------------------------------------------------------------------------------- /src/utils/console.js: -------------------------------------------------------------------------------- 1 | import config from '../config'; 2 | 3 | // 调试模式下才显示每一步的步骤 4 | function debug () { 5 | if (config.CONSOLE_DEBUG) console.debug.apply(console, arguments); 6 | } 7 | 8 | // 普通的结果信息 9 | function log() { 10 | if (config.CONSOLE_LOG) console.log.apply(console, arguments); 11 | } 12 | 13 | // 比较重要的运行结果 14 | function info () { 15 | if (config.CONSOLE_INFO) console.info.apply(console, arguments); 16 | } 17 | 18 | // 运行出现的警告 19 | function warn () { 20 | if (config.CONSOLE_WARN) console.warn.apply(console, arguments); 21 | } 22 | 23 | // 运行抛出的错误必须显示,无需重写 24 | 25 | const myConsole = Object.assign({}, console, { 26 | debug, 27 | log, 28 | info, 29 | warn 30 | }) 31 | 32 | export default myConsole; -------------------------------------------------------------------------------- /src/utils/cookie.js: -------------------------------------------------------------------------------- 1 | export const CookieUtil = { 2 | // 设置cookie 3 | set : function (name, value, expires, domain, path, secure) { 4 | var cookieText = ""; 5 | cookieText += encodeURIComponent(name) + "=" + encodeURIComponent(value); 6 | if (expires instanceof Date) { 7 | cookieText += "; expires=" + expires.toGMTString(); 8 | } 9 | if (path) { 10 | cookieText += "; path=" + path; 11 | } 12 | if (domain) { 13 | cookieText += "; domain=" + domain; 14 | } 15 | if (secure) { 16 | cookieText += "; secure"; 17 | } 18 | document.cookie = cookieText; 19 | }, 20 | // name=value; expires=expiration_time; path=domain_path; domain=domain_name; secure 21 | // 获取cookie 22 | get : function (name) { 23 | var cookieName = encodeURIComponent(name) + "=", 24 | cookieStart = document.cookie.indexOf(cookieName), 25 | cookieValue = ""; 26 | if (cookieStart > -1) { 27 | var cookieEnd = document.cookie.indexOf (";", cookieStart); 28 | if (cookieEnd == -1) { 29 | cookieEnd = document.cookie.length; 30 | } 31 | cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length, cookieEnd)); 32 | } 33 | return cookieValue; 34 | }, 35 | // 删除cookie 36 | unset : function (name, domain, path, secure) { 37 | this.set(name, "", Date(0), domain, path, secure); 38 | }, 39 | 40 | //将储存cookie 41 | setExt: function(name, value) { 42 | this.set(name, value, new Date().getTime() + 315360000000, "/"); 43 | } 44 | }; 45 | /* 46 | // 测试 47 | CookieUtil.set("name", "zhang"); 48 | var name = CookieUtil.get("name"); 49 | alert(name); // zhang 50 | CookieUtil.unset("name"); 51 | alert(CookieUtil.get("name")); // 空 52 | */ 53 | export const SubCookieUtil = { 54 | /** 设置一条完整的cookie 55 | * param name : 表示cookie的名称,必填 56 | * param subCookies : 表示cookie的值,为一个对象,必填 57 | * param expires : 表示cookie的过期时间,可以不填 58 | * param domain : 表示cookie的域名,可以不填 59 | * param path : 表示cookie的路径,可以不填 60 | * param secure : 表示cookie的安全标志,可以不填 61 | * eg : SubCookieUtil.setAll("info", { name : "zhang", age : 23}); 62 | **/ 63 | setAll : function (name, subCookies, expires, domain, path, secure) { 64 | var cookieText = "", subName, cookieParts = []; 65 | cookieText += encodeURIComponent(name) + "="; 66 | for(subName in subCookies) { 67 | cookieParts.push(encodeURIComponent(subName) + "=" + encodeURIComponent(subCookies[subName])); 68 | } 69 | if (cookieParts.length > 0) { 70 | cookieText += cookieParts.join("&"); 71 | if (expires instanceof Date) { 72 | cookieText += "; expires=" + expires.toGMTString(); 73 | } 74 | if (path) { 75 | cookieText += "; path=" + path; 76 | } 77 | if (domain) { 78 | cookieText += "; domain=" + domain; 79 | } 80 | if (secure) { 81 | cookieText += "; secure"; 82 | } 83 | } else { 84 | cookieText += "; expires=" + Date(0).toGMTString(); 85 | } 86 | document.cookie = cookieText; 87 | }, 88 | /** 设置一条子cookie 89 | * param name : 表示cookie的名称,必填 90 | * param subName : 表示子cookie的名称,必填 91 | * param value : 表示子cookie的值,必填 92 | * param expires : 表示cookie的过期时间,可以不填 93 | * param domain : 表示cookie的域名,可以不填 94 | * param path : 表示cookie的路径,可以不填 95 | * param secure : 表示cookie的安全标志,可以不填 96 | * eg : SubCookieUtil.set("info", "sex", "boy"); 97 | **/ 98 | set : function (name, subName, value, expires, domain, path, secure) { 99 | var cookies = this.getAll(name) || {}; 100 | cookies[subName] = value; 101 | this.setAll(name, cookies, expires, domain, path, secure); 102 | }, 103 | /** 读取一条完整cookie 104 | * param name : 表示cookie的名称,必填 105 | * return : 一个cookie对象 106 | * eg : SubCookieUtil.getAll("info"); 107 | **/ 108 | getAll : function (name) { 109 | var cookieName = encodeURIComponent(name) + "=", 110 | cookieStart = document.cookie.indexOf(cookieName), 111 | cookieValue = "", i, len, subCookies, parts, result = {}; 112 | if (cookieStart > -1) { 113 | var cookieEnd = document.cookie.indexOf (";", cookieStart); 114 | if (cookieEnd == -1) { 115 | cookieEnd = document.cookie.length; 116 | } 117 | cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length, cookieEnd)); 118 | if (cookieValue.length > 0) { 119 | subCookies = cookieValue.split("&"); 120 | for (i = 0, len = subCookies.length; i < len; i++) { 121 | parts = subCookies[i].split("="); 122 | result[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]); 123 | } 124 | return result; 125 | } 126 | } 127 | return null; 128 | }, 129 | /** 获取一条子cookie的值 130 | * param name : 表示cookie的名称,必填 131 | * param subName : 表示子cookie的名称 132 | * return : 一个子cookie的值 133 | * eg : SubCookieUtil.get("info", "name"); 134 | **/ 135 | get : function (name, subName) { 136 | var cookies = this.getAll(name); 137 | if (cookies) { 138 | return cookies[subName]; 139 | } else { 140 | return null; 141 | } 142 | }, 143 | /** 删除一条完整cookie 144 | * param name : 表示cookie的名称,必填 145 | * param domain : 表示cookie的域名,可以不填 146 | * param path : 表示cookie的路径,可以不填 147 | * param secure : 表示cookie的安全标志,可以不填 148 | * eg : SubCookieUtil.unsetAll("info"); 149 | **/ 150 | unsetAll : function (name, domain, path, secure) { 151 | this.setAll(name, "", Date(0).toGMTString(), domain, path, secure); 152 | }, 153 | /** 删除一条子cookie 154 | * param name : 表示cookie的名称,必填 155 | * param subName : 表示子cookie的名称,必填 156 | * param domain : 表示cookie的域名,可以不填 157 | * param path : 表示cookie的路径,可以不填 158 | * param secure : 表示cookie的安全标志,可以不填 159 | * eg : SubCookieUtil.unset("info", "name"); 160 | **/ 161 | unset : function (name, subName, domain, path, secure) { 162 | var cookies = this.getAll(name); 163 | if (cookies) { 164 | delete cookies[subName]; 165 | this.setAll(name, cookies, null, domain, path, secure); 166 | } 167 | } 168 | }; 169 | /* 170 | // 测试: 171 | var zhang = { 172 | name : "zhang", 173 | age : 23, 174 | height : "178cm", 175 | weight : "66kg" 176 | } 177 | // 设置一条完整的cookie 178 | SubCookieUtil.setAll("zhang", zhang); 179 | // 获取一条完整的cookie 180 | var zhang = SubCookieUtil.getAll("zhang"); 181 | alert(zhang.weight); // 66kg 182 | // 再为张添加一个子cookie 183 | SubCookieUtil.set("zhang", "sport", "basketball"); 184 | // 获取子cookie 185 | alert(SubCookieUtil.get("zhang", "sport")); // basketball 186 | // 删除一条子cookie 187 | SubCookieUtil.unset("zhang", "age"); 188 | alert(SubCookieUtil.get("zhang", "age")); // undefined 189 | // 删除一条完整的cookie 190 | SubCookieUtil.unsetAll("zhang"); 191 | alert(SubCookieUtil.getAll("zhang")); // 报错,因为已经被删除 192 | */ -------------------------------------------------------------------------------- /src/utils/jsonp.js: -------------------------------------------------------------------------------- 1 | // 格式化参数 2 | function formatParams (data, needEncode) { 3 | var arr = []; 4 | for (var name in data) { 5 | arr.push(needEncode 6 | ? encodeURIComponent(name) + '=' + encodeURIComponent(data[name]) 7 | : name + '=' + data[name]); 8 | } 9 | return arr.join('&'); 10 | } 11 | /* 12 | options = { 13 | url, 14 | data, 15 | callbackName, 16 | needEncode, 17 | time, 18 | success 19 | error 20 | } 21 | */ 22 | 23 | export default function jsonp (options = {}) { 24 | // jsonp必须带url, callback属性 25 | if (!options.url) throw new Error('参数不合法'); 26 | 27 | // 如果url中指明了callback,则需要定义callbackName,否则自动生成 28 | var callbackName = options.callbackName || ('callback' + Math.random()).replace('.', ''); 29 | 30 | // 赋值到data中 31 | if (options.data) options.data.callback = callbackName; 32 | 33 | // 根据data生成参数 34 | var params = formatParams(options.data, options.needEncode); 35 | 36 | // 创建 script 标签并加入到页面中 37 | var oHead = document.getElementsByTagName('head')[0]; 38 | var oS = document.createElement('script'); 39 | oHead.appendChild(oS); 40 | 41 | // 创建jsonp回调函数 42 | // callbackName = callbackName.split('0')[0]; 43 | window[callbackName] = function (json) { 44 | oHead.removeChild(oS); 45 | clearTimeout(oS.timer); 46 | window[callbackName] = null; 47 | options.success && options.success(json); 48 | }; 49 | 50 | // 发送请求, 如果没有参数,则直接用url 51 | oS.src = params ? options.url + '?' + params : options.url; 52 | 53 | // 超时处理 54 | if (options.time) { 55 | oS.timer = setTimeout(function () { 56 | window[callbackName] = null; 57 | oHead.removeChild(oS); 58 | options.error && options.error({ message: '超时' }); 59 | }, options.time); 60 | } 61 | };; 62 | /* jsonp({ 63 | url: 'http://localhost:8080/ac/test.php', 64 | data: { q: 1 }, 65 | callbackName: 'foo', 66 | time: 1, 67 | success: function (json) { 68 | // 此处放成功后执行的代码 69 | console.log(json.name); 70 | }, 71 | error: function (json) { 72 | console.log(json.message); 73 | } 74 | }); */ 75 | --------------------------------------------------------------------------------