├── .gitignore ├── README.md ├── README_ZH.md ├── index.js ├── lib ├── FastUglifyJsPlugin.js ├── UglifyCache.js ├── genHash.js └── worker.js ├── package.json ├── test ├── cases │ └── factorial.js ├── index.js └── webpack.config.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | node_modules 3 | .DS_Store 4 | .uglify 5 | *.log 6 | test/outs -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 有赞logo 3 |

4 |

FastUglifyJsPlugin

5 | 6 | ## Introduction 7 | [中文文档](https://github.com/youzan/fast-uglifyjs-plugin/blob/master/README_ZH.md) 8 | 9 | compatible with webpack 2 10 | 11 | The uglify process of building project in production environment is very time consuming. It could take up to 70% of the build time. FastUglifyJsPlugin have multi-process and cache feature comparing to webpack's UglifyJsPlugin. Multi-process can utilize multicore cpu's caculation capability. Cache can minimize the need to complie code. Below is a set of performance testing data. FastUglifyJsPlugin has a way better performace. 12 | 13 | |plugin|time| 14 | |------|---------| 15 | |webpack.optimize.UglifyJsPlugin|7.4 min| 16 | |FastUglifyJsPlugin without cache|4.45 min| 17 | |FastUglifyJsPlugin with cache|36 s| 18 | 19 | test sample:29 entry,2615 modules 20 | 21 | test environment:MacBook Pro,4 core cpu,8g memory 22 | 23 | 24 | ## Installation 25 | 26 | ```shell 27 | npm i fast-uglifyjs-plugin --save 28 | 29 | # or 30 | 31 | yarn add fast-uglifyjs-plugin 32 | ``` 33 | 34 | ## Configuration 35 | FastUglifyJsPlugin is base on webpack.optimize.UglifyJsPlugin. They have the same usage except for a few extra configuration. 36 | 37 | ```js 38 | var FastUglifyJsPlugin = require('fast-uglifyjs-plugin'); 39 | 40 | module.exports = { 41 | entry: {...}, 42 | output: {...}, 43 | plugins: [new FastUglifyJsPlugin({ 44 | compress: { 45 | warnings: false 46 | }, 47 | // set debug as true to output detail cache information 48 | debug: true, 49 | // enable cache by default to improve uglify performance. set false to turn it off 50 | cache: false, 51 | // root directory is the default cache path. it can be configured by following setting 52 | cacheFolder: path.resolve(__dirname, '.otherFolder'), 53 | // num of worker process default ,os.cpus().length 54 | workerNum: 2 55 | })] 56 | }; 57 | ``` 58 | ### Licence 59 | [MIT](https://zh.wikipedia.org/wiki/MIT%E8%A8%B1%E5%8F%AF%E8%AD%89) -------------------------------------------------------------------------------- /README_ZH.md: -------------------------------------------------------------------------------- 1 |

2 | 有赞logo 3 |

4 |

FastUglifyJsPlugin

5 | 6 | ## 介绍 7 | 8 | 兼容webpack 2 9 | 10 | 生产环境的构建,uglify过程占了70%左右的时间,是一个非常耗时的过程。相对于webpack原生UglifyJsPlugin,FastUglifyJsPlugin增加了多进程和缓存。多进程可以最大限度的利用多核cpu的计算能力,缓存可以按需编译,减少不必要的计算。以下是一组性能测试数据,FastUglifyJsPlugin的性能提升非常明显。 11 | 12 | |插件|耗时| 13 | |------|---------| 14 | |webpack.optimize.UglifyJsPlugin|7.4 min| 15 | |FastUglifyJsPlugin without cache|4.45 min| 16 | |FastUglifyJsPlugin with cache|36 s| 17 | 18 | 测试样本:29 entry,2615 modules 19 | 20 | 测试环境:MacBook Pro,4核cpu,8g内存 21 | 22 | 23 | ## 安装 24 | 25 | ```shell 26 | npm i fast-uglifyjs-plugin --save 27 | 28 | # or 29 | 30 | yarn add fast-uglifyjs-plugin 31 | ``` 32 | 33 | ## 配置 34 | FastUglifyJsPlugin基于webpack.optimize.UglifyJsPlugin修改,用法和webpack.optimize.UglifyJsPlugin完全一样,只是增加了几个额外的配置参数。 35 | 36 | ```js 37 | var FastUglifyJsPlugin = require('fast-uglifyjs-plugin'); 38 | 39 | module.exports = { 40 | entry: {...}, 41 | output: {...}, 42 | plugins: [new FastUglifyJsPlugin({ 43 | compress: { 44 | warnings: false 45 | }, 46 | // debug设为true可输出详细缓存使用信息: 47 | debug: true, 48 | // 默认开启缓存,提高uglify效率,关闭请使用: 49 | cache: false, 50 | // 默认缓存路径为项目根目录,手动配置请使用: 51 | cacheFolder: path.resolve(__dirname, '.otherFolder'), 52 | // 工作进程数,默认os.cpus().length 53 | workerNum: 2 54 | })] 55 | }; 56 | ``` 57 | 58 | ## 开源协议 59 | 60 | 本项目基于 [MIT](https://zh.wikipedia.org/wiki/MIT%E8%A8%B1%E5%8F%AF%E8%AD%89) 协议,请自由地享受和参与开源。 61 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./lib/FastUglifyJsPlugin'); -------------------------------------------------------------------------------- /lib/FastUglifyJsPlugin.js: -------------------------------------------------------------------------------- 1 | /* 2 | 基于webpack.optimize.UglifyJsPlugin修改,增加了多进程和cache支持 3 | */ 4 | var os = require('os'); 5 | var fork = require('child_process').fork; 6 | var path = require('path'); 7 | var SourceMapSource; 8 | try { 9 | SourceMapSource = require("webpack-core/lib/SourceMapSource"); 10 | } catch (e) { 11 | SourceMapSource = require("webpack-sources").SourceMapSource; 12 | } 13 | var RawSource; 14 | try { 15 | RawSource = require("webpack-core/lib/RawSource"); 16 | } catch (e) { 17 | RawSource = require("webpack-sources").RawSource; 18 | } 19 | var ModuleFilenameHelpers; 20 | try { 21 | ModuleFilenameHelpers = require("webpack/lib/ModuleFilenameHelpers"); 22 | } catch (e) { 23 | ModuleFilenameHelpers = require("../ModuleFilenameHelpers"); 24 | } 25 | var uglify = require("uglify-js"); 26 | var chalk = require('chalk'); 27 | var genHash = require('./genHash'); 28 | var UglifyCache = require('./UglifyCache'); 29 | 30 | var CACHE_FOLDER = './.uglify'; 31 | 32 | function FastUglifyJsPlugin(options) { 33 | if (typeof options !== "object") options = {}; 34 | if (typeof options.compressor !== "undefined") { 35 | options.compress = options.compressor; 36 | } 37 | this.options = options; 38 | } 39 | module.exports = FastUglifyJsPlugin; 40 | 41 | FastUglifyJsPlugin.prototype.apply = function (compiler) { 42 | var options = this.options; 43 | options.test = options.test || /\.js($|\?)/i; 44 | 45 | compiler.plugin("compilation", function (compilation) { 46 | if (options.sourceMap) { 47 | compilation.plugin("build-module", function (module) { 48 | // to get detailed location info about errors 49 | module.useSourceMap = true; 50 | }); 51 | } 52 | compilation.plugin("optimize-chunk-assets", function (chunks, callback) { 53 | var files = []; 54 | var tasks = []; 55 | var idleWorkers = []; 56 | var busyWorkers = []; 57 | var warnings = []; 58 | var cbs = {}; 59 | var completeNum = 0; 60 | var totalNum = 0; 61 | var cacheFolder = options.cacheFolder || CACHE_FOLDER; 62 | var isCache = !(options.cache === false); 63 | var uglifyCache = new UglifyCache(cacheFolder); 64 | if (isCache) { 65 | uglifyCache.createCacheFolder(); 66 | } 67 | var unChangedChunks = [], changedChunks = []; 68 | chunks.forEach(function (chunk) { 69 | chunk.files.forEach(function (file) { 70 | files.push(file); 71 | }); 72 | }); 73 | compilation.additionalChunkAssets.forEach(function (file) { 74 | files.push(file); 75 | }); 76 | files = files.filter(ModuleFilenameHelpers.matchObject.bind(undefined, options)); 77 | files.forEach(function (file) { 78 | var asset = compilation.assets[file]; 79 | if(asset.__UglifyJsPlugin) { 80 | compilation.assets[file] = asset.__UglifyJsPlugin; 81 | return; 82 | } 83 | var input = asset.source(); 84 | var fileHash = genHash(input); 85 | var filenameHash = genHash(file.replace(compilation.hash, '').slice(0, -3)); 86 | var curFile = filenameHash + '.' + fileHash; 87 | var inputSourceMap; 88 | if (isCache) { 89 | if (options.sourceMap && uglifyCache.isContainCacheMap(curFile)) { 90 | var cachedContent = uglifyCache.getCacheContentMap(curFile); 91 | var content = JSON.parse(cachedContent); 92 | asset.__UglifyJsPlugin = compilation.assets[file] = new SourceMapSource(content.stream, content.file, content.map, content.input, content.inputSourceMap); 93 | // 记录未变化chunk 94 | unChangedChunks.push(file); 95 | return; 96 | } 97 | if (!options.sourceMap && uglifyCache.isContainCache(curFile)) { 98 | var cachedContent = uglifyCache.getCacheContent(curFile); 99 | var content = JSON.parse(cachedContent); 100 | asset.__UglifyJsPlugin = compilation.assets[file] = new RawSource(content.stream); 101 | // 记录未变化chunk 102 | unChangedChunks.push(file); 103 | return; 104 | } 105 | // 记录变化chunks 106 | changedChunks.push(file); 107 | } 108 | if (options.sourceMap) { 109 | if (asset.sourceAndMap) { 110 | sourceAndMap = asset.sourceAndMap(); 111 | inputSourceMap = sourceAndMap.map; 112 | input = sourceAndMap.source; 113 | } else { 114 | inputSourceMap = asset.map(); 115 | input = asset.source(); 116 | } 117 | } else { 118 | input = asset.source(); 119 | } 120 | tasks.push({ 121 | file: file, 122 | input: input, 123 | inputSourceMap: inputSourceMap, 124 | options: options 125 | }); 126 | }); 127 | if (tasks.length) { 128 | var workerNum = options.workerNum || os.cpus().length; 129 | totalNum = tasks.length; 130 | while (workerNum > 0) { 131 | workerNum--; 132 | var worker = fork(path.join(__dirname, 'worker.js')); 133 | idleWorkers.push(worker); 134 | //主进程收到子进程的信息 135 | worker.on('message', function (m) { 136 | if (m.cmd === 'complete') { 137 | var result = m.result; 138 | var file = result.file; 139 | var task = cbs[file]; 140 | var asset = compilation.assets[file]; 141 | asset.__UglifyJsPlugin = compilation.assets[file] = (result.map ? 142 | new SourceMapSource(result.stream, file, JSON.parse(result.map), task.input, task.inputSourceMap) : 143 | new RawSource(result.stream)); 144 | if (isCache) { 145 | // 记录cache 146 | var cacheContent; 147 | var filenameHash = genHash(file.replace(compilation.hash, '').slice(0, -3)); 148 | var fileHash = genHash(task.input); 149 | var name = filenameHash + '.' + fileHash; 150 | if (result.map) { 151 | name += '.map'; 152 | cacheContent = JSON.stringify({ 153 | stream: result.stream, 154 | file: file, 155 | map: JSON.parse(result.map), 156 | input: task.input, 157 | inputSourceMap: task.inputSourceMap 158 | }); 159 | } else { 160 | cacheContent = JSON.stringify({stream: result.stream}); 161 | } 162 | uglifyCache.setCacheContent(filenameHash, fileHash, name, cacheContent); 163 | } 164 | completeNum++; 165 | var arr = busyWorkers.filter(function (worker) { 166 | return worker.pid == result.pid; 167 | }); 168 | // move worker from busy to idle 169 | if (arr.length) { 170 | var index = busyWorkers.indexOf(arr[0]); 171 | busyWorkers.splice(index, 1); 172 | idleWorkers.push(arr[0]); 173 | } 174 | // all complete and callback 175 | if (completeNum === totalNum) { 176 | if (isCache) { 177 | log('\nchangedChunks: ' + chalk.red.bold(changedChunks.length) + '\n' + chalk.green(changedChunks.join('\n'))); 178 | log('\nunChangedChunks: '+ chalk.red.bold(unChangedChunks.length) + '\n' + chalk.green(unChangedChunks.join('\n'))); 179 | } 180 | if (warnings.length > 0) { 181 | compilation.warnings.push(new Error(file + " from UglifyJs\n" + warnings.join("\n"))); 182 | } 183 | killWorkers(); 184 | callback(); 185 | } else { 186 | startNext(); 187 | } 188 | 189 | } else if (m.cmd === 'warning') { 190 | warnings.push(m.msg); 191 | } else if (m.cmd === 'error') { 192 | var err = m.err; 193 | compilation.errors.push(new Error(m.file + " from UglifyJs\n" + err.message + "\n" + err.stack)); 194 | killWorkers(); 195 | callback(); 196 | } 197 | }); 198 | } 199 | process.on('exit', killWorkers); 200 | startNext(); 201 | } else { 202 | if (isCache && unChangedChunks.length) { 203 | log('\nunChangedChunks: '+ chalk.red.bold(unChangedChunks.length) + '\n' + chalk.green(unChangedChunks.join('\n'))); 204 | } 205 | callback(); 206 | } 207 | 208 | function killWorkers() { 209 | idleWorkers.concat(busyWorkers).forEach(function (worker) { 210 | worker.kill(); 211 | }); 212 | } 213 | 214 | function startNext() { 215 | if (tasks.length && idleWorkers.length) { 216 | do { 217 | var task = tasks.shift(); 218 | var worker = idleWorkers.shift(); 219 | worker.send({cmd: 'uglify', task: task, time: Date.now()}); 220 | cbs[task.file] = task; 221 | busyWorkers.push(worker); 222 | } while (tasks.length && idleWorkers.length); 223 | } 224 | } 225 | 226 | function log(logInfo) { 227 | if (options.debug) { 228 | console.log(logInfo); 229 | } 230 | }; 231 | }); 232 | compilation.plugin("normal-module-loader", function (context) { 233 | context.minimize = true; 234 | }); 235 | }); 236 | }; -------------------------------------------------------------------------------- /lib/UglifyCache.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'); 2 | var toString = Object.prototype.toString; 3 | 4 | function UglifyCache(cacheFolder) { 5 | this.cacheFolder = cacheFolder; 6 | this.caches = []; 7 | } 8 | 9 | UglifyCache.prototype.createCacheFolder = function () { 10 | if (!fs.existsSync(this.cacheFolder)) { 11 | var mode = parseInt('0777', 8) & (~process.umask()); 12 | fs.mkdirSync(this.cacheFolder, mode); 13 | } 14 | this.caches = fs.readdirSync(this.cacheFolder); 15 | } 16 | 17 | UglifyCache.prototype.isContainCache = function(fileName) { 18 | return this.caches.indexOf(fileName) > -1; 19 | } 20 | 21 | UglifyCache.prototype.isContainCacheMap = function(fileName) { 22 | return this.caches.indexOf(fileName + '.map') > -1; 23 | } 24 | 25 | UglifyCache.prototype.getCacheContent = function(fileName) { 26 | return fs.readFileSync(this.cacheFolder + '/' + fileName).toString(); 27 | } 28 | 29 | UglifyCache.prototype.getCacheContentMap = function(fileName) { 30 | return fs.readFileSync(this.cacheFolder + '/' + fileName + '.map').toString(); 31 | } 32 | 33 | UglifyCache.prototype.setCacheContent = function(filenameHash, fileHash, fileName, content) { 34 | // 删除前一次缓存 35 | var self = this; 36 | var fileNameRE = new RegExp(filenameHash + ".[A-z0-9]"); 37 | var fileRE = new RegExp(filenameHash + '.' + fileHash + '(.map)?'); 38 | var sourceFileNames = []; 39 | self.caches.forEach(function (cache) { 40 | // 文件名缓存相同,文件内容缓存不同,才执行删除 41 | if (fileNameRE.test(cache) && !fileRE.test(cache)) { 42 | sourceFileNames.push(cache); 43 | } 44 | }); 45 | sourceFileNames.forEach(function(sourceFileName) { 46 | fs.unlinkSync(self.cacheFolder + '/' + sourceFileName); 47 | }); 48 | fs.writeFileSync(self.cacheFolder + '/' + fileName, content); 49 | } 50 | 51 | module.exports = UglifyCache; -------------------------------------------------------------------------------- /lib/genHash.js: -------------------------------------------------------------------------------- 1 | var crypto = require('crypto'); 2 | 3 | function genHash(content) { 4 | const hash = crypto 5 | .createHash('sha1') 6 | .update(content) 7 | .digest('hex'); 8 | 9 | return hash; 10 | } 11 | 12 | module.exports = genHash; -------------------------------------------------------------------------------- /lib/worker.js: -------------------------------------------------------------------------------- 1 | var uglify = require("uglify-js"); 2 | var SourceMapConsumer; 3 | try { 4 | SourceMapConsumer = require("webpack-core/lib/source-map").SourceMapConsumer; 5 | } catch (e) { 6 | SourceMapConsumer = require("source-map").SourceMapConsumer; 7 | } 8 | 9 | process.on('message', function (m) { 10 | if (m.cmd == 'uglify') { 11 | try { 12 | doUglify(m.task); 13 | } catch (e) { 14 | process.send({ 15 | cmd: 'error', 16 | err: { 17 | name: e.name, 18 | message: e.message, 19 | stack: e.stack 20 | }, 21 | file: m.task.file 22 | }); 23 | } 24 | } 25 | }); 26 | 27 | function doUglify(task) { 28 | var oldWarnFunction = uglify.AST_Node.warn_function; 29 | var options = task.options; 30 | if (options.sourceMap) { 31 | var sourceMap = new SourceMapConsumer(task.inputSourceMap); 32 | uglify.AST_Node.warn_function = function (warning) { // eslint-disable-line camelcase 33 | var match = /\[.+:([0-9]+),([0-9]+)\]/.exec(warning); 34 | var line = +match[1]; 35 | var column = +match[2]; 36 | var original = sourceMap.originalPositionFor({ 37 | line: line, 38 | column: column 39 | }); 40 | if (!original || !original.source || original.source === task.file) return; 41 | process.send({ 42 | cmd: 'warning', 43 | msg: warning.replace(/\[.+:([0-9]+),([0-9]+)\]/, "") + 44 | "[" + original.source + ":" + original.line + "," + original.column + "]" 45 | }); 46 | }; 47 | } else { 48 | uglify.AST_Node.warn_function = function (warning) { // eslint-disable-line camelcase 49 | process.send({ 50 | cmd: 'warning', msg: warning 51 | }); 52 | }; 53 | } 54 | uglify.base54.reset(); 55 | var ast = uglify.parse(task.input, { 56 | filename: task.file 57 | }); 58 | if (options.compress !== false) { 59 | ast.figure_out_scope(); 60 | var compress = uglify.Compressor(options.compress); // eslint-disable-line new-cap 61 | ast = ast.transform(compress); 62 | } 63 | if (options.mangle !== false) { 64 | ast.figure_out_scope(); 65 | ast.compute_char_frequency(options.mangle || {}); 66 | ast.mangle_names(options.mangle || {}); 67 | if (options.mangle && options.mangle.props) { 68 | uglify.mangle_properties(ast, options.mangle.props); 69 | } 70 | } 71 | var output = {}; 72 | output.comments = Object.prototype.hasOwnProperty.call(options, "comments") ? options.comments : /^\**!|@preserve|@license/; 73 | output.beautify = options.beautify; 74 | for (var k in options.output) { 75 | output[k] = options.output[k]; 76 | } 77 | if (options.sourceMap) { 78 | var map = uglify.SourceMap({ // eslint-disable-line new-cap 79 | file: task.file, 80 | root: "" 81 | }); 82 | output.source_map = map; // eslint-disable-line camelcase 83 | } 84 | var stream = uglify.OutputStream(output); // eslint-disable-line new-cap 85 | ast.print(stream); 86 | if (map) map = map + ""; 87 | stream = stream + ""; 88 | uglify.AST_Node.warn_function = oldWarnFunction; 89 | process.send({ 90 | cmd: 'complete', 91 | result: {map: map, stream: stream, file: task.file, pid: process.pid}, 92 | time: Date.now() 93 | }) 94 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fast-uglifyjs-plugin", 3 | "version": "0.3.0", 4 | "description": "hight performance uglify plugin for webpack", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "rm -rf .uglify && node_modules/mocha/bin/mocha test" 8 | }, 9 | "keywords": ["cache", "uglify", "multi-process"], 10 | "author": "liwei ", 11 | "peerDependencies": { 12 | "webpack": "^1.9 || ^2 || ^2.1.0-beta || ^2.2.0-rc" 13 | }, 14 | "devDependencies": { 15 | "chai": "^3.5.0", 16 | "mocha": "^3.1.2", 17 | "webpack": "^1.13.3" 18 | }, 19 | "dependencies": { 20 | "source-map": "^0.5.6", 21 | "webpack-sources": "^0.2.3", 22 | "uglify-js": "^2.7.3", 23 | "chalk": "^1.1.3" 24 | }, 25 | "repository": { 26 | "type": "git", 27 | "url": "https://github.com/youzan/fast-uglifyjs-plugin" 28 | }, 29 | "license": "MIT" 30 | } 31 | -------------------------------------------------------------------------------- /test/cases/factorial.js: -------------------------------------------------------------------------------- 1 | function factorial(num) { 2 | var result = 1; 3 | if (num == 0 || num == 1) { 4 | result = num; 5 | } else { 6 | result = num * factorial(num - 1); 7 | } 8 | return result; 9 | } 10 | 11 | module.exports = global.factorial = factorial; -------------------------------------------------------------------------------- /test/index.js: -------------------------------------------------------------------------------- 1 | var path = require('path'); 2 | var vm = require('vm'); 3 | var webpack = require('webpack'); 4 | var assert = require('chai').assert; 5 | var fs = require('fs'); 6 | var config = require('./webpack.config.js'); 7 | 8 | describe('FastUglifyJsPlugin', function () { 9 | describe('firstly build without cache', function () { 10 | it('should build', function (done) { 11 | webpack(config, function (err) { 12 | assert.isNull(err); 13 | done(); 14 | }); 15 | }); 16 | it('should create a output file', function () { 17 | var stats = fs.statSync(path.join(__dirname, 'outs/factorial.js')); 18 | assert.isTrue(stats.isFile()); 19 | }); 20 | it('should create a output map', function () { 21 | var stats = fs.statSync(path.join(__dirname, 'outs/factorial.js.map')); 22 | assert.isTrue(stats.isFile()); 23 | }); 24 | it('should correctly run', function () { 25 | var factorial = require('./cases/factorial'); 26 | var code = fs.readFileSync(path.join(__dirname, 'outs/factorial.js')).toString(); 27 | vm.runInThisContext(code); 28 | assert.strictEqual(factorial(18), global.factorial(18)); 29 | }); 30 | }); 31 | describe('secondly build with cache', function () { 32 | it('should build', function (done) { 33 | webpack(config, function (err) { 34 | assert.isNull(err); 35 | done(); 36 | }); 37 | }); 38 | it('should create a output file', function () { 39 | var stats = fs.statSync(path.join(__dirname, 'outs/factorial.js')); 40 | assert.isTrue(stats.isFile()); 41 | }); 42 | it('should create a output map', function () { 43 | var stats = fs.statSync(path.join(__dirname, 'outs/factorial.js.map')); 44 | assert.isTrue(stats.isFile()); 45 | }); 46 | it('should correctly run', function () { 47 | var factorial = require('./cases/factorial'); 48 | var code = fs.readFileSync(path.join(__dirname, 'outs/factorial.js')).toString(); 49 | vm.runInThisContext(code); 50 | assert.strictEqual(factorial(18), global.factorial(18)); 51 | }); 52 | }) 53 | }); -------------------------------------------------------------------------------- /test/webpack.config.js: -------------------------------------------------------------------------------- 1 | var path = require("path"); 2 | var FastUglifyJsPlugin = require('../index.js'); 3 | 4 | module.exports = { 5 | entry: path.join(__dirname, 'cases/factorial.js'), 6 | output: { 7 | path: path.join(__dirname, 'outs'), 8 | filename: 'factorial.js' 9 | }, 10 | devtool: '#source-map', 11 | plugins: [ 12 | new FastUglifyJsPlugin({ 13 | compress: { 14 | warnings: false 15 | }, 16 | debug: true, 17 | sourceMap: true, 18 | // cache: false, 19 | // cacheFolder: path.resolve(__dirname, './.otherFolder/') 20 | }) 21 | ] 22 | }; 23 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | abbrev@1: 6 | version "1.1.0" 7 | resolved "http://registry.npm.taobao.org/abbrev/download/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" 8 | 9 | acorn@^3.0.0: 10 | version "3.3.0" 11 | resolved "http://registry.npm.taobao.org/acorn/download/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" 12 | 13 | ajv@^4.9.1: 14 | version "4.11.8" 15 | resolved "http://registry.npm.taobao.org/ajv/download/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" 16 | dependencies: 17 | co "^4.6.0" 18 | json-stable-stringify "^1.0.1" 19 | 20 | align-text@^0.1.1, align-text@^0.1.3: 21 | version "0.1.4" 22 | resolved "http://registry.npm.taobao.org/align-text/download/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" 23 | dependencies: 24 | kind-of "^3.0.2" 25 | longest "^1.0.1" 26 | repeat-string "^1.5.2" 27 | 28 | amdefine@>=0.0.4: 29 | version "1.0.1" 30 | resolved "http://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" 31 | 32 | ansi-regex@^2.0.0: 33 | version "2.1.1" 34 | resolved "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 35 | 36 | ansi-styles@^2.2.1: 37 | version "2.2.1" 38 | resolved "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 39 | 40 | anymatch@^1.3.0: 41 | version "1.3.0" 42 | resolved "http://registry.npm.taobao.org/anymatch/download/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" 43 | dependencies: 44 | arrify "^1.0.0" 45 | micromatch "^2.1.5" 46 | 47 | aproba@^1.0.3: 48 | version "1.1.2" 49 | resolved "http://registry.npm.taobao.org/aproba/download/aproba-1.1.2.tgz#45c6629094de4e96f693ef7eab74ae079c240fc1" 50 | 51 | are-we-there-yet@~1.1.2: 52 | version "1.1.4" 53 | resolved "http://registry.npm.taobao.org/are-we-there-yet/download/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" 54 | dependencies: 55 | delegates "^1.0.0" 56 | readable-stream "^2.0.6" 57 | 58 | arr-diff@^2.0.0: 59 | version "2.0.0" 60 | resolved "http://registry.npm.taobao.org/arr-diff/download/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" 61 | dependencies: 62 | arr-flatten "^1.0.1" 63 | 64 | arr-flatten@^1.0.1: 65 | version "1.0.3" 66 | resolved "http://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1" 67 | 68 | array-unique@^0.2.1: 69 | version "0.2.1" 70 | resolved "http://registry.npm.taobao.org/array-unique/download/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" 71 | 72 | arrify@^1.0.0: 73 | version "1.0.1" 74 | resolved "http://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 75 | 76 | asn1@~0.2.3: 77 | version "0.2.3" 78 | resolved "http://registry.npm.taobao.org/asn1/download/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" 79 | 80 | assert-plus@1.0.0, assert-plus@^1.0.0: 81 | version "1.0.0" 82 | resolved "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 83 | 84 | assert-plus@^0.2.0: 85 | version "0.2.0" 86 | resolved "http://registry.npm.taobao.org/assert-plus/download/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" 87 | 88 | assert@^1.1.1: 89 | version "1.4.1" 90 | resolved "http://registry.npm.taobao.org/assert/download/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" 91 | dependencies: 92 | util "0.10.3" 93 | 94 | assertion-error@^1.0.1: 95 | version "1.0.2" 96 | resolved "http://registry.npm.taobao.org/assertion-error/download/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c" 97 | 98 | async-each@^1.0.0: 99 | version "1.0.1" 100 | resolved "http://registry.npm.taobao.org/async-each/download/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" 101 | 102 | async@^0.9.0: 103 | version "0.9.2" 104 | resolved "http://registry.npm.taobao.org/async/download/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" 105 | 106 | async@^1.3.0: 107 | version "1.5.2" 108 | resolved "http://registry.npm.taobao.org/async/download/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" 109 | 110 | async@~0.2.6: 111 | version "0.2.10" 112 | resolved "http://registry.npm.taobao.org/async/download/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" 113 | 114 | asynckit@^0.4.0: 115 | version "0.4.0" 116 | resolved "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 117 | 118 | aws-sign2@~0.6.0: 119 | version "0.6.0" 120 | resolved "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" 121 | 122 | aws4@^1.2.1: 123 | version "1.6.0" 124 | resolved "http://registry.npm.taobao.org/aws4/download/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" 125 | 126 | balanced-match@^0.4.1: 127 | version "0.4.2" 128 | resolved "http://registry.npm.taobao.org/balanced-match/download/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" 129 | 130 | base64-js@^1.0.2: 131 | version "1.2.0" 132 | resolved "http://registry.npm.taobao.org/base64-js/download/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" 133 | 134 | bcrypt-pbkdf@^1.0.0: 135 | version "1.0.1" 136 | resolved "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" 137 | dependencies: 138 | tweetnacl "^0.14.3" 139 | 140 | big.js@^3.1.3: 141 | version "3.1.3" 142 | resolved "http://registry.npm.taobao.org/big.js/download/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978" 143 | 144 | binary-extensions@^1.0.0: 145 | version "1.8.0" 146 | resolved "http://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" 147 | 148 | block-stream@*: 149 | version "0.0.9" 150 | resolved "http://registry.npm.taobao.org/block-stream/download/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" 151 | dependencies: 152 | inherits "~2.0.0" 153 | 154 | boom@2.x.x: 155 | version "2.10.1" 156 | resolved "http://registry.npm.taobao.org/boom/download/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" 157 | dependencies: 158 | hoek "2.x.x" 159 | 160 | brace-expansion@^1.1.7: 161 | version "1.1.7" 162 | resolved "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" 163 | dependencies: 164 | balanced-match "^0.4.1" 165 | concat-map "0.0.1" 166 | 167 | braces@^1.8.2: 168 | version "1.8.5" 169 | resolved "http://registry.npm.taobao.org/braces/download/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" 170 | dependencies: 171 | expand-range "^1.8.1" 172 | preserve "^0.2.0" 173 | repeat-element "^1.1.2" 174 | 175 | browser-stdout@1.3.0: 176 | version "1.3.0" 177 | resolved "http://registry.npm.taobao.org/browser-stdout/download/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" 178 | 179 | browserify-aes@0.4.0: 180 | version "0.4.0" 181 | resolved "http://registry.npm.taobao.org/browserify-aes/download/browserify-aes-0.4.0.tgz#067149b668df31c4b58533e02d01e806d8608e2c" 182 | dependencies: 183 | inherits "^2.0.1" 184 | 185 | browserify-zlib@^0.1.4: 186 | version "0.1.4" 187 | resolved "http://registry.npm.taobao.org/browserify-zlib/download/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" 188 | dependencies: 189 | pako "~0.2.0" 190 | 191 | buffer@^4.9.0: 192 | version "4.9.1" 193 | resolved "http://registry.npm.taobao.org/buffer/download/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" 194 | dependencies: 195 | base64-js "^1.0.2" 196 | ieee754 "^1.1.4" 197 | isarray "^1.0.0" 198 | 199 | builtin-status-codes@^3.0.0: 200 | version "3.0.0" 201 | resolved "http://registry.npm.taobao.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" 202 | 203 | camelcase@^1.0.2: 204 | version "1.2.1" 205 | resolved "http://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" 206 | 207 | caseless@~0.12.0: 208 | version "0.12.0" 209 | resolved "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 210 | 211 | center-align@^0.1.1: 212 | version "0.1.3" 213 | resolved "http://registry.npm.taobao.org/center-align/download/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" 214 | dependencies: 215 | align-text "^0.1.3" 216 | lazy-cache "^1.0.3" 217 | 218 | chai@^3.5.0: 219 | version "3.5.0" 220 | resolved "http://registry.npm.taobao.org/chai/download/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247" 221 | dependencies: 222 | assertion-error "^1.0.1" 223 | deep-eql "^0.1.3" 224 | type-detect "^1.0.0" 225 | 226 | chalk@^1.1.3: 227 | version "1.1.3" 228 | resolved "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 229 | dependencies: 230 | ansi-styles "^2.2.1" 231 | escape-string-regexp "^1.0.2" 232 | has-ansi "^2.0.0" 233 | strip-ansi "^3.0.0" 234 | supports-color "^2.0.0" 235 | 236 | chokidar@^1.0.0: 237 | version "1.7.0" 238 | resolved "http://registry.npm.taobao.org/chokidar/download/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" 239 | dependencies: 240 | anymatch "^1.3.0" 241 | async-each "^1.0.0" 242 | glob-parent "^2.0.0" 243 | inherits "^2.0.1" 244 | is-binary-path "^1.0.0" 245 | is-glob "^2.0.0" 246 | path-is-absolute "^1.0.0" 247 | readdirp "^2.0.0" 248 | optionalDependencies: 249 | fsevents "^1.0.0" 250 | 251 | cliui@^2.1.0: 252 | version "2.1.0" 253 | resolved "http://registry.npm.taobao.org/cliui/download/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" 254 | dependencies: 255 | center-align "^0.1.1" 256 | right-align "^0.1.1" 257 | wordwrap "0.0.2" 258 | 259 | clone@^1.0.2: 260 | version "1.0.2" 261 | resolved "http://registry.npm.taobao.org/clone/download/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" 262 | 263 | co@^4.6.0: 264 | version "4.6.0" 265 | resolved "http://registry.npm.taobao.org/co/download/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 266 | 267 | code-point-at@^1.0.0: 268 | version "1.1.0" 269 | resolved "http://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 270 | 271 | combined-stream@^1.0.5, combined-stream@~1.0.5: 272 | version "1.0.5" 273 | resolved "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" 274 | dependencies: 275 | delayed-stream "~1.0.0" 276 | 277 | commander@2.9.0: 278 | version "2.9.0" 279 | resolved "http://registry.npm.taobao.org/commander/download/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" 280 | dependencies: 281 | graceful-readlink ">= 1.0.0" 282 | 283 | concat-map@0.0.1: 284 | version "0.0.1" 285 | resolved "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 286 | 287 | console-browserify@^1.1.0: 288 | version "1.1.0" 289 | resolved "http://registry.npm.taobao.org/console-browserify/download/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" 290 | dependencies: 291 | date-now "^0.1.4" 292 | 293 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 294 | version "1.1.0" 295 | resolved "http://registry.npm.taobao.org/console-control-strings/download/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 296 | 297 | constants-browserify@^1.0.0: 298 | version "1.0.0" 299 | resolved "http://registry.npm.taobao.org/constants-browserify/download/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" 300 | 301 | core-util-is@~1.0.0: 302 | version "1.0.2" 303 | resolved "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 304 | 305 | cryptiles@2.x.x: 306 | version "2.0.5" 307 | resolved "http://registry.npm.taobao.org/cryptiles/download/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" 308 | dependencies: 309 | boom "2.x.x" 310 | 311 | crypto-browserify@3.3.0: 312 | version "3.3.0" 313 | resolved "http://registry.npm.taobao.org/crypto-browserify/download/crypto-browserify-3.3.0.tgz#b9fc75bb4a0ed61dcf1cd5dae96eb30c9c3e506c" 314 | dependencies: 315 | browserify-aes "0.4.0" 316 | pbkdf2-compat "2.0.1" 317 | ripemd160 "0.2.0" 318 | sha.js "2.2.6" 319 | 320 | dashdash@^1.12.0: 321 | version "1.14.1" 322 | resolved "http://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 323 | dependencies: 324 | assert-plus "^1.0.0" 325 | 326 | date-now@^0.1.4: 327 | version "0.1.4" 328 | resolved "http://registry.npm.taobao.org/date-now/download/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" 329 | 330 | debug@2.6.0, debug@^2.2.0: 331 | version "2.6.0" 332 | resolved "http://registry.npm.taobao.org/debug/download/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b" 333 | dependencies: 334 | ms "0.7.2" 335 | 336 | decamelize@^1.0.0: 337 | version "1.2.0" 338 | resolved "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 339 | 340 | deep-eql@^0.1.3: 341 | version "0.1.3" 342 | resolved "http://registry.npm.taobao.org/deep-eql/download/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" 343 | dependencies: 344 | type-detect "0.1.1" 345 | 346 | deep-extend@~0.4.0: 347 | version "0.4.2" 348 | resolved "http://registry.npm.taobao.org/deep-extend/download/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" 349 | 350 | delayed-stream@~1.0.0: 351 | version "1.0.0" 352 | resolved "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 353 | 354 | delegates@^1.0.0: 355 | version "1.0.0" 356 | resolved "http://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 357 | 358 | diff@3.2.0: 359 | version "3.2.0" 360 | resolved "http://registry.npm.taobao.org/diff/download/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" 361 | 362 | domain-browser@^1.1.1: 363 | version "1.1.7" 364 | resolved "http://registry.npm.taobao.org/domain-browser/download/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" 365 | 366 | ecc-jsbn@~0.1.1: 367 | version "0.1.1" 368 | resolved "http://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" 369 | dependencies: 370 | jsbn "~0.1.0" 371 | 372 | emojis-list@^2.0.0: 373 | version "2.1.0" 374 | resolved "http://registry.npm.taobao.org/emojis-list/download/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" 375 | 376 | enhanced-resolve@~0.9.0: 377 | version "0.9.1" 378 | resolved "http://registry.npm.taobao.org/enhanced-resolve/download/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e" 379 | dependencies: 380 | graceful-fs "^4.1.2" 381 | memory-fs "^0.2.0" 382 | tapable "^0.1.8" 383 | 384 | errno@^0.1.3: 385 | version "0.1.4" 386 | resolved "http://registry.npm.taobao.org/errno/download/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" 387 | dependencies: 388 | prr "~0.0.0" 389 | 390 | escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2: 391 | version "1.0.5" 392 | resolved "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 393 | 394 | events@^1.0.0: 395 | version "1.1.1" 396 | resolved "http://registry.npm.taobao.org/events/download/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" 397 | 398 | expand-brackets@^0.1.4: 399 | version "0.1.5" 400 | resolved "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" 401 | dependencies: 402 | is-posix-bracket "^0.1.0" 403 | 404 | expand-range@^1.8.1: 405 | version "1.8.2" 406 | resolved "http://registry.npm.taobao.org/expand-range/download/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" 407 | dependencies: 408 | fill-range "^2.1.0" 409 | 410 | extend@~3.0.0: 411 | version "3.0.1" 412 | resolved "http://registry.npm.taobao.org/extend/download/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" 413 | 414 | extglob@^0.3.1: 415 | version "0.3.2" 416 | resolved "http://registry.npm.taobao.org/extglob/download/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" 417 | dependencies: 418 | is-extglob "^1.0.0" 419 | 420 | extsprintf@1.0.2: 421 | version "1.0.2" 422 | resolved "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" 423 | 424 | filename-regex@^2.0.0: 425 | version "2.0.1" 426 | resolved "http://registry.npm.taobao.org/filename-regex/download/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" 427 | 428 | fill-range@^2.1.0: 429 | version "2.2.3" 430 | resolved "http://registry.npm.taobao.org/fill-range/download/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" 431 | dependencies: 432 | is-number "^2.1.0" 433 | isobject "^2.0.0" 434 | randomatic "^1.1.3" 435 | repeat-element "^1.1.2" 436 | repeat-string "^1.5.2" 437 | 438 | for-in@^1.0.1: 439 | version "1.0.2" 440 | resolved "http://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 441 | 442 | for-own@^0.1.4: 443 | version "0.1.5" 444 | resolved "http://registry.npm.taobao.org/for-own/download/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" 445 | dependencies: 446 | for-in "^1.0.1" 447 | 448 | forever-agent@~0.6.1: 449 | version "0.6.1" 450 | resolved "http://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 451 | 452 | form-data@~2.1.1: 453 | version "2.1.4" 454 | resolved "http://registry.npm.taobao.org/form-data/download/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" 455 | dependencies: 456 | asynckit "^0.4.0" 457 | combined-stream "^1.0.5" 458 | mime-types "^2.1.12" 459 | 460 | fs.realpath@^1.0.0: 461 | version "1.0.0" 462 | resolved "http://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 463 | 464 | fsevents@^1.0.0: 465 | version "1.1.1" 466 | resolved "http://registry.npm.taobao.org/fsevents/download/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff" 467 | dependencies: 468 | nan "^2.3.0" 469 | node-pre-gyp "^0.6.29" 470 | 471 | fstream-ignore@^1.0.5: 472 | version "1.0.5" 473 | resolved "http://registry.npm.taobao.org/fstream-ignore/download/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" 474 | dependencies: 475 | fstream "^1.0.0" 476 | inherits "2" 477 | minimatch "^3.0.0" 478 | 479 | fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: 480 | version "1.0.11" 481 | resolved "http://registry.npm.taobao.org/fstream/download/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" 482 | dependencies: 483 | graceful-fs "^4.1.2" 484 | inherits "~2.0.0" 485 | mkdirp ">=0.5 0" 486 | rimraf "2" 487 | 488 | gauge@~2.7.3: 489 | version "2.7.4" 490 | resolved "http://registry.npm.taobao.org/gauge/download/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 491 | dependencies: 492 | aproba "^1.0.3" 493 | console-control-strings "^1.0.0" 494 | has-unicode "^2.0.0" 495 | object-assign "^4.1.0" 496 | signal-exit "^3.0.0" 497 | string-width "^1.0.1" 498 | strip-ansi "^3.0.1" 499 | wide-align "^1.1.0" 500 | 501 | getpass@^0.1.1: 502 | version "0.1.7" 503 | resolved "http://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 504 | dependencies: 505 | assert-plus "^1.0.0" 506 | 507 | glob-base@^0.3.0: 508 | version "0.3.0" 509 | resolved "http://registry.npm.taobao.org/glob-base/download/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" 510 | dependencies: 511 | glob-parent "^2.0.0" 512 | is-glob "^2.0.0" 513 | 514 | glob-parent@^2.0.0: 515 | version "2.0.0" 516 | resolved "http://registry.npm.taobao.org/glob-parent/download/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" 517 | dependencies: 518 | is-glob "^2.0.0" 519 | 520 | glob@7.1.1, glob@^7.0.5: 521 | version "7.1.1" 522 | resolved "http://registry.npm.taobao.org/glob/download/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" 523 | dependencies: 524 | fs.realpath "^1.0.0" 525 | inflight "^1.0.4" 526 | inherits "2" 527 | minimatch "^3.0.2" 528 | once "^1.3.0" 529 | path-is-absolute "^1.0.0" 530 | 531 | graceful-fs@^4.1.2: 532 | version "4.1.11" 533 | resolved "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 534 | 535 | "graceful-readlink@>= 1.0.0": 536 | version "1.0.1" 537 | resolved "http://registry.npm.taobao.org/graceful-readlink/download/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" 538 | 539 | growl@1.9.2: 540 | version "1.9.2" 541 | resolved "http://registry.npm.taobao.org/growl/download/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" 542 | 543 | har-schema@^1.0.5: 544 | version "1.0.5" 545 | resolved "http://registry.npm.taobao.org/har-schema/download/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" 546 | 547 | har-validator@~4.2.1: 548 | version "4.2.1" 549 | resolved "http://registry.npm.taobao.org/har-validator/download/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" 550 | dependencies: 551 | ajv "^4.9.1" 552 | har-schema "^1.0.5" 553 | 554 | has-ansi@^2.0.0: 555 | version "2.0.0" 556 | resolved "http://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 557 | dependencies: 558 | ansi-regex "^2.0.0" 559 | 560 | has-flag@^1.0.0: 561 | version "1.0.0" 562 | resolved "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" 563 | 564 | has-unicode@^2.0.0: 565 | version "2.0.1" 566 | resolved "http://registry.npm.taobao.org/has-unicode/download/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 567 | 568 | hawk@~3.1.3: 569 | version "3.1.3" 570 | resolved "http://registry.npm.taobao.org/hawk/download/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" 571 | dependencies: 572 | boom "2.x.x" 573 | cryptiles "2.x.x" 574 | hoek "2.x.x" 575 | sntp "1.x.x" 576 | 577 | hoek@2.x.x: 578 | version "2.16.3" 579 | resolved "http://registry.npm.taobao.org/hoek/download/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" 580 | 581 | http-signature@~1.1.0: 582 | version "1.1.1" 583 | resolved "http://registry.npm.taobao.org/http-signature/download/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" 584 | dependencies: 585 | assert-plus "^0.2.0" 586 | jsprim "^1.2.2" 587 | sshpk "^1.7.0" 588 | 589 | https-browserify@0.0.1: 590 | version "0.0.1" 591 | resolved "http://registry.npm.taobao.org/https-browserify/download/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" 592 | 593 | ieee754@^1.1.4: 594 | version "1.1.8" 595 | resolved "http://registry.npm.taobao.org/ieee754/download/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" 596 | 597 | indexof@0.0.1: 598 | version "0.0.1" 599 | resolved "http://registry.npm.taobao.org/indexof/download/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" 600 | 601 | inflight@^1.0.4: 602 | version "1.0.6" 603 | resolved "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 604 | dependencies: 605 | once "^1.3.0" 606 | wrappy "1" 607 | 608 | inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1: 609 | version "2.0.3" 610 | resolved "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 611 | 612 | inherits@2.0.1: 613 | version "2.0.1" 614 | resolved "http://registry.npm.taobao.org/inherits/download/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" 615 | 616 | ini@~1.3.0: 617 | version "1.3.4" 618 | resolved "http://registry.npm.taobao.org/ini/download/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" 619 | 620 | interpret@^0.6.4: 621 | version "0.6.6" 622 | resolved "http://registry.npm.taobao.org/interpret/download/interpret-0.6.6.tgz#fecd7a18e7ce5ca6abfb953e1f86213a49f1625b" 623 | 624 | is-binary-path@^1.0.0: 625 | version "1.0.1" 626 | resolved "http://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" 627 | dependencies: 628 | binary-extensions "^1.0.0" 629 | 630 | is-buffer@^1.1.5: 631 | version "1.1.5" 632 | resolved "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" 633 | 634 | is-dotfile@^1.0.0: 635 | version "1.0.3" 636 | resolved "http://registry.npm.taobao.org/is-dotfile/download/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" 637 | 638 | is-equal-shallow@^0.1.3: 639 | version "0.1.3" 640 | resolved "http://registry.npm.taobao.org/is-equal-shallow/download/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" 641 | dependencies: 642 | is-primitive "^2.0.0" 643 | 644 | is-extendable@^0.1.1: 645 | version "0.1.1" 646 | resolved "http://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 647 | 648 | is-extglob@^1.0.0: 649 | version "1.0.0" 650 | resolved "http://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" 651 | 652 | is-fullwidth-code-point@^1.0.0: 653 | version "1.0.0" 654 | resolved "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 655 | dependencies: 656 | number-is-nan "^1.0.0" 657 | 658 | is-glob@^2.0.0, is-glob@^2.0.1: 659 | version "2.0.1" 660 | resolved "http://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" 661 | dependencies: 662 | is-extglob "^1.0.0" 663 | 664 | is-number@^2.0.2, is-number@^2.1.0: 665 | version "2.1.0" 666 | resolved "http://registry.npm.taobao.org/is-number/download/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" 667 | dependencies: 668 | kind-of "^3.0.2" 669 | 670 | is-posix-bracket@^0.1.0: 671 | version "0.1.1" 672 | resolved "http://registry.npm.taobao.org/is-posix-bracket/download/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" 673 | 674 | is-primitive@^2.0.0: 675 | version "2.0.0" 676 | resolved "http://registry.npm.taobao.org/is-primitive/download/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" 677 | 678 | is-typedarray@~1.0.0: 679 | version "1.0.0" 680 | resolved "http://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 681 | 682 | isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: 683 | version "1.0.0" 684 | resolved "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 685 | 686 | isobject@^2.0.0: 687 | version "2.1.0" 688 | resolved "http://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 689 | dependencies: 690 | isarray "1.0.0" 691 | 692 | isstream@~0.1.2: 693 | version "0.1.2" 694 | resolved "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 695 | 696 | jodid25519@^1.0.0: 697 | version "1.0.2" 698 | resolved "http://registry.npm.taobao.org/jodid25519/download/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" 699 | dependencies: 700 | jsbn "~0.1.0" 701 | 702 | jsbn@~0.1.0: 703 | version "0.1.1" 704 | resolved "http://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 705 | 706 | json-schema@0.2.3: 707 | version "0.2.3" 708 | resolved "http://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 709 | 710 | json-stable-stringify@^1.0.1: 711 | version "1.0.1" 712 | resolved "http://registry.npm.taobao.org/json-stable-stringify/download/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 713 | dependencies: 714 | jsonify "~0.0.0" 715 | 716 | json-stringify-safe@~5.0.1: 717 | version "5.0.1" 718 | resolved "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 719 | 720 | json3@3.3.2: 721 | version "3.3.2" 722 | resolved "http://registry.npm.taobao.org/json3/download/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" 723 | 724 | json5@^0.5.0: 725 | version "0.5.1" 726 | resolved "http://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" 727 | 728 | jsonify@~0.0.0: 729 | version "0.0.0" 730 | resolved "http://registry.npm.taobao.org/jsonify/download/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 731 | 732 | jsprim@^1.2.2: 733 | version "1.4.0" 734 | resolved "http://registry.npm.taobao.org/jsprim/download/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" 735 | dependencies: 736 | assert-plus "1.0.0" 737 | extsprintf "1.0.2" 738 | json-schema "0.2.3" 739 | verror "1.3.6" 740 | 741 | kind-of@^3.0.2: 742 | version "3.2.2" 743 | resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 744 | dependencies: 745 | is-buffer "^1.1.5" 746 | 747 | lazy-cache@^1.0.3: 748 | version "1.0.4" 749 | resolved "http://registry.npm.taobao.org/lazy-cache/download/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" 750 | 751 | loader-utils@^0.2.11: 752 | version "0.2.17" 753 | resolved "http://registry.npm.taobao.org/loader-utils/download/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" 754 | dependencies: 755 | big.js "^3.1.3" 756 | emojis-list "^2.0.0" 757 | json5 "^0.5.0" 758 | object-assign "^4.0.1" 759 | 760 | lodash._baseassign@^3.0.0: 761 | version "3.2.0" 762 | resolved "http://registry.npm.taobao.org/lodash._baseassign/download/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" 763 | dependencies: 764 | lodash._basecopy "^3.0.0" 765 | lodash.keys "^3.0.0" 766 | 767 | lodash._basecopy@^3.0.0: 768 | version "3.0.1" 769 | resolved "http://registry.npm.taobao.org/lodash._basecopy/download/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" 770 | 771 | lodash._basecreate@^3.0.0: 772 | version "3.0.3" 773 | resolved "http://registry.npm.taobao.org/lodash._basecreate/download/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" 774 | 775 | lodash._getnative@^3.0.0: 776 | version "3.9.1" 777 | resolved "http://registry.npm.taobao.org/lodash._getnative/download/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" 778 | 779 | lodash._isiterateecall@^3.0.0: 780 | version "3.0.9" 781 | resolved "http://registry.npm.taobao.org/lodash._isiterateecall/download/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" 782 | 783 | lodash.create@3.1.1: 784 | version "3.1.1" 785 | resolved "http://registry.npm.taobao.org/lodash.create/download/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" 786 | dependencies: 787 | lodash._baseassign "^3.0.0" 788 | lodash._basecreate "^3.0.0" 789 | lodash._isiterateecall "^3.0.0" 790 | 791 | lodash.isarguments@^3.0.0: 792 | version "3.1.0" 793 | resolved "http://registry.npm.taobao.org/lodash.isarguments/download/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" 794 | 795 | lodash.isarray@^3.0.0: 796 | version "3.0.4" 797 | resolved "http://registry.npm.taobao.org/lodash.isarray/download/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" 798 | 799 | lodash.keys@^3.0.0: 800 | version "3.1.2" 801 | resolved "http://registry.npm.taobao.org/lodash.keys/download/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" 802 | dependencies: 803 | lodash._getnative "^3.0.0" 804 | lodash.isarguments "^3.0.0" 805 | lodash.isarray "^3.0.0" 806 | 807 | longest@^1.0.1: 808 | version "1.0.1" 809 | resolved "http://registry.npm.taobao.org/longest/download/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" 810 | 811 | memory-fs@^0.2.0: 812 | version "0.2.0" 813 | resolved "http://registry.npm.taobao.org/memory-fs/download/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290" 814 | 815 | memory-fs@~0.3.0: 816 | version "0.3.0" 817 | resolved "http://registry.npm.taobao.org/memory-fs/download/memory-fs-0.3.0.tgz#7bcc6b629e3a43e871d7e29aca6ae8a7f15cbb20" 818 | dependencies: 819 | errno "^0.1.3" 820 | readable-stream "^2.0.1" 821 | 822 | micromatch@^2.1.5: 823 | version "2.3.11" 824 | resolved "http://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" 825 | dependencies: 826 | arr-diff "^2.0.0" 827 | array-unique "^0.2.1" 828 | braces "^1.8.2" 829 | expand-brackets "^0.1.4" 830 | extglob "^0.3.1" 831 | filename-regex "^2.0.0" 832 | is-extglob "^1.0.0" 833 | is-glob "^2.0.1" 834 | kind-of "^3.0.2" 835 | normalize-path "^2.0.1" 836 | object.omit "^2.0.0" 837 | parse-glob "^3.0.4" 838 | regex-cache "^0.4.2" 839 | 840 | mime-db@~1.27.0: 841 | version "1.27.0" 842 | resolved "http://registry.npm.taobao.org/mime-db/download/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" 843 | 844 | mime-types@^2.1.12, mime-types@~2.1.7: 845 | version "2.1.15" 846 | resolved "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" 847 | dependencies: 848 | mime-db "~1.27.0" 849 | 850 | minimatch@^3.0.0, minimatch@^3.0.2: 851 | version "3.0.4" 852 | resolved "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 853 | dependencies: 854 | brace-expansion "^1.1.7" 855 | 856 | minimist@0.0.8, minimist@~0.0.1: 857 | version "0.0.8" 858 | resolved "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 859 | 860 | minimist@^1.2.0: 861 | version "1.2.0" 862 | resolved "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 863 | 864 | mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.0: 865 | version "0.5.1" 866 | resolved "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 867 | dependencies: 868 | minimist "0.0.8" 869 | 870 | mocha@^3.1.2: 871 | version "3.4.2" 872 | resolved "http://registry.npm.taobao.org/mocha/download/mocha-3.4.2.tgz#d0ef4d332126dbf18d0d640c9b382dd48be97594" 873 | dependencies: 874 | browser-stdout "1.3.0" 875 | commander "2.9.0" 876 | debug "2.6.0" 877 | diff "3.2.0" 878 | escape-string-regexp "1.0.5" 879 | glob "7.1.1" 880 | growl "1.9.2" 881 | json3 "3.3.2" 882 | lodash.create "3.1.1" 883 | mkdirp "0.5.1" 884 | supports-color "3.1.2" 885 | 886 | ms@0.7.2: 887 | version "0.7.2" 888 | resolved "http://registry.npm.taobao.org/ms/download/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" 889 | 890 | nan@^2.3.0: 891 | version "2.6.2" 892 | resolved "http://registry.npm.taobao.org/nan/download/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45" 893 | 894 | node-libs-browser@^0.7.0: 895 | version "0.7.0" 896 | resolved "http://registry.npm.taobao.org/node-libs-browser/download/node-libs-browser-0.7.0.tgz#3e272c0819e308935e26674408d7af0e1491b83b" 897 | dependencies: 898 | assert "^1.1.1" 899 | browserify-zlib "^0.1.4" 900 | buffer "^4.9.0" 901 | console-browserify "^1.1.0" 902 | constants-browserify "^1.0.0" 903 | crypto-browserify "3.3.0" 904 | domain-browser "^1.1.1" 905 | events "^1.0.0" 906 | https-browserify "0.0.1" 907 | os-browserify "^0.2.0" 908 | path-browserify "0.0.0" 909 | process "^0.11.0" 910 | punycode "^1.2.4" 911 | querystring-es3 "^0.2.0" 912 | readable-stream "^2.0.5" 913 | stream-browserify "^2.0.1" 914 | stream-http "^2.3.1" 915 | string_decoder "^0.10.25" 916 | timers-browserify "^2.0.2" 917 | tty-browserify "0.0.0" 918 | url "^0.11.0" 919 | util "^0.10.3" 920 | vm-browserify "0.0.4" 921 | 922 | node-pre-gyp@^0.6.29: 923 | version "0.6.36" 924 | resolved "http://registry.npm.taobao.org/node-pre-gyp/download/node-pre-gyp-0.6.36.tgz#db604112cb74e0d477554e9b505b17abddfab786" 925 | dependencies: 926 | mkdirp "^0.5.1" 927 | nopt "^4.0.1" 928 | npmlog "^4.0.2" 929 | rc "^1.1.7" 930 | request "^2.81.0" 931 | rimraf "^2.6.1" 932 | semver "^5.3.0" 933 | tar "^2.2.1" 934 | tar-pack "^3.4.0" 935 | 936 | nopt@^4.0.1: 937 | version "4.0.1" 938 | resolved "http://registry.npm.taobao.org/nopt/download/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" 939 | dependencies: 940 | abbrev "1" 941 | osenv "^0.1.4" 942 | 943 | normalize-path@^2.0.1: 944 | version "2.1.1" 945 | resolved "http://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 946 | dependencies: 947 | remove-trailing-separator "^1.0.1" 948 | 949 | npmlog@^4.0.2: 950 | version "4.1.0" 951 | resolved "http://registry.npm.taobao.org/npmlog/download/npmlog-4.1.0.tgz#dc59bee85f64f00ed424efb2af0783df25d1c0b5" 952 | dependencies: 953 | are-we-there-yet "~1.1.2" 954 | console-control-strings "~1.1.0" 955 | gauge "~2.7.3" 956 | set-blocking "~2.0.0" 957 | 958 | number-is-nan@^1.0.0: 959 | version "1.0.1" 960 | resolved "http://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 961 | 962 | oauth-sign@~0.8.1: 963 | version "0.8.2" 964 | resolved "http://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" 965 | 966 | object-assign@^4.0.1, object-assign@^4.1.0: 967 | version "4.1.1" 968 | resolved "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 969 | 970 | object.omit@^2.0.0: 971 | version "2.0.1" 972 | resolved "http://registry.npm.taobao.org/object.omit/download/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" 973 | dependencies: 974 | for-own "^0.1.4" 975 | is-extendable "^0.1.1" 976 | 977 | once@^1.3.0, once@^1.3.3: 978 | version "1.4.0" 979 | resolved "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 980 | dependencies: 981 | wrappy "1" 982 | 983 | optimist@~0.6.0: 984 | version "0.6.1" 985 | resolved "http://registry.npm.taobao.org/optimist/download/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" 986 | dependencies: 987 | minimist "~0.0.1" 988 | wordwrap "~0.0.2" 989 | 990 | os-browserify@^0.2.0: 991 | version "0.2.1" 992 | resolved "http://registry.npm.taobao.org/os-browserify/download/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f" 993 | 994 | os-homedir@^1.0.0: 995 | version "1.0.2" 996 | resolved "http://registry.npm.taobao.org/os-homedir/download/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 997 | 998 | os-tmpdir@^1.0.0: 999 | version "1.0.2" 1000 | resolved "http://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1001 | 1002 | osenv@^0.1.4: 1003 | version "0.1.4" 1004 | resolved "http://registry.npm.taobao.org/osenv/download/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" 1005 | dependencies: 1006 | os-homedir "^1.0.0" 1007 | os-tmpdir "^1.0.0" 1008 | 1009 | pako@~0.2.0: 1010 | version "0.2.9" 1011 | resolved "http://registry.npm.taobao.org/pako/download/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" 1012 | 1013 | parse-glob@^3.0.4: 1014 | version "3.0.4" 1015 | resolved "http://registry.npm.taobao.org/parse-glob/download/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" 1016 | dependencies: 1017 | glob-base "^0.3.0" 1018 | is-dotfile "^1.0.0" 1019 | is-extglob "^1.0.0" 1020 | is-glob "^2.0.0" 1021 | 1022 | path-browserify@0.0.0: 1023 | version "0.0.0" 1024 | resolved "http://registry.npm.taobao.org/path-browserify/download/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" 1025 | 1026 | path-is-absolute@^1.0.0: 1027 | version "1.0.1" 1028 | resolved "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1029 | 1030 | pbkdf2-compat@2.0.1: 1031 | version "2.0.1" 1032 | resolved "http://registry.npm.taobao.org/pbkdf2-compat/download/pbkdf2-compat-2.0.1.tgz#b6e0c8fa99494d94e0511575802a59a5c142f288" 1033 | 1034 | performance-now@^0.2.0: 1035 | version "0.2.0" 1036 | resolved "http://registry.npm.taobao.org/performance-now/download/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" 1037 | 1038 | preserve@^0.2.0: 1039 | version "0.2.0" 1040 | resolved "http://registry.npm.taobao.org/preserve/download/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" 1041 | 1042 | process-nextick-args@~1.0.6: 1043 | version "1.0.7" 1044 | resolved "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 1045 | 1046 | process@^0.11.0: 1047 | version "0.11.10" 1048 | resolved "http://registry.npm.taobao.org/process/download/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" 1049 | 1050 | prr@~0.0.0: 1051 | version "0.0.0" 1052 | resolved "http://registry.npm.taobao.org/prr/download/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" 1053 | 1054 | punycode@1.3.2: 1055 | version "1.3.2" 1056 | resolved "http://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" 1057 | 1058 | punycode@^1.2.4, punycode@^1.4.1: 1059 | version "1.4.1" 1060 | resolved "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 1061 | 1062 | qs@~6.4.0: 1063 | version "6.4.0" 1064 | resolved "http://registry.npm.taobao.org/qs/download/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" 1065 | 1066 | querystring-es3@^0.2.0: 1067 | version "0.2.1" 1068 | resolved "http://registry.npm.taobao.org/querystring-es3/download/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" 1069 | 1070 | querystring@0.2.0: 1071 | version "0.2.0" 1072 | resolved "http://registry.npm.taobao.org/querystring/download/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" 1073 | 1074 | randomatic@^1.1.3: 1075 | version "1.1.6" 1076 | resolved "http://registry.npm.taobao.org/randomatic/download/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" 1077 | dependencies: 1078 | is-number "^2.0.2" 1079 | kind-of "^3.0.2" 1080 | 1081 | rc@^1.1.7: 1082 | version "1.2.1" 1083 | resolved "http://registry.npm.taobao.org/rc/download/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" 1084 | dependencies: 1085 | deep-extend "~0.4.0" 1086 | ini "~1.3.0" 1087 | minimist "^1.2.0" 1088 | strip-json-comments "~2.0.1" 1089 | 1090 | readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.6: 1091 | version "2.2.10" 1092 | resolved "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.2.10.tgz#effe72bb7c884c0dd335e2379d526196d9d011ee" 1093 | dependencies: 1094 | core-util-is "~1.0.0" 1095 | inherits "~2.0.1" 1096 | isarray "~1.0.0" 1097 | process-nextick-args "~1.0.6" 1098 | safe-buffer "^5.0.1" 1099 | string_decoder "~1.0.0" 1100 | util-deprecate "~1.0.1" 1101 | 1102 | readdirp@^2.0.0: 1103 | version "2.1.0" 1104 | resolved "http://registry.npm.taobao.org/readdirp/download/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" 1105 | dependencies: 1106 | graceful-fs "^4.1.2" 1107 | minimatch "^3.0.2" 1108 | readable-stream "^2.0.2" 1109 | set-immediate-shim "^1.0.1" 1110 | 1111 | regex-cache@^0.4.2: 1112 | version "0.4.3" 1113 | resolved "http://registry.npm.taobao.org/regex-cache/download/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" 1114 | dependencies: 1115 | is-equal-shallow "^0.1.3" 1116 | is-primitive "^2.0.0" 1117 | 1118 | remove-trailing-separator@^1.0.1: 1119 | version "1.0.1" 1120 | resolved "http://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" 1121 | 1122 | repeat-element@^1.1.2: 1123 | version "1.1.2" 1124 | resolved "http://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" 1125 | 1126 | repeat-string@^1.5.2: 1127 | version "1.6.1" 1128 | resolved "http://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 1129 | 1130 | request@^2.81.0: 1131 | version "2.81.0" 1132 | resolved "http://registry.npm.taobao.org/request/download/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" 1133 | dependencies: 1134 | aws-sign2 "~0.6.0" 1135 | aws4 "^1.2.1" 1136 | caseless "~0.12.0" 1137 | combined-stream "~1.0.5" 1138 | extend "~3.0.0" 1139 | forever-agent "~0.6.1" 1140 | form-data "~2.1.1" 1141 | har-validator "~4.2.1" 1142 | hawk "~3.1.3" 1143 | http-signature "~1.1.0" 1144 | is-typedarray "~1.0.0" 1145 | isstream "~0.1.2" 1146 | json-stringify-safe "~5.0.1" 1147 | mime-types "~2.1.7" 1148 | oauth-sign "~0.8.1" 1149 | performance-now "^0.2.0" 1150 | qs "~6.4.0" 1151 | safe-buffer "^5.0.1" 1152 | stringstream "~0.0.4" 1153 | tough-cookie "~2.3.0" 1154 | tunnel-agent "^0.6.0" 1155 | uuid "^3.0.0" 1156 | 1157 | right-align@^0.1.1: 1158 | version "0.1.3" 1159 | resolved "http://registry.npm.taobao.org/right-align/download/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" 1160 | dependencies: 1161 | align-text "^0.1.1" 1162 | 1163 | rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1: 1164 | version "2.6.1" 1165 | resolved "http://registry.npm.taobao.org/rimraf/download/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" 1166 | dependencies: 1167 | glob "^7.0.5" 1168 | 1169 | ripemd160@0.2.0: 1170 | version "0.2.0" 1171 | resolved "http://registry.npm.taobao.org/ripemd160/download/ripemd160-0.2.0.tgz#2bf198bde167cacfa51c0a928e84b68bbe171fce" 1172 | 1173 | safe-buffer@^5.0.1: 1174 | version "5.1.0" 1175 | resolved "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.0.tgz#fe4c8460397f9eaaaa58e73be46273408a45e223" 1176 | 1177 | semver@^5.3.0: 1178 | version "5.3.0" 1179 | resolved "http://registry.npm.taobao.org/semver/download/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" 1180 | 1181 | set-blocking@~2.0.0: 1182 | version "2.0.0" 1183 | resolved "http://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1184 | 1185 | set-immediate-shim@^1.0.1: 1186 | version "1.0.1" 1187 | resolved "http://registry.npm.taobao.org/set-immediate-shim/download/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" 1188 | 1189 | setimmediate@^1.0.4: 1190 | version "1.0.5" 1191 | resolved "http://registry.npm.taobao.org/setimmediate/download/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" 1192 | 1193 | sha.js@2.2.6: 1194 | version "2.2.6" 1195 | resolved "http://registry.npm.taobao.org/sha.js/download/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba" 1196 | 1197 | signal-exit@^3.0.0: 1198 | version "3.0.2" 1199 | resolved "http://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 1200 | 1201 | sntp@1.x.x: 1202 | version "1.0.9" 1203 | resolved "http://registry.npm.taobao.org/sntp/download/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" 1204 | dependencies: 1205 | hoek "2.x.x" 1206 | 1207 | source-list-map@^1.1.1: 1208 | version "1.1.2" 1209 | resolved "http://registry.npm.qima-inc.com/source-list-map/download/source-list-map-1.1.2.tgz#9889019d1024cce55cdc069498337ef6186a11a1" 1210 | 1211 | source-list-map@~0.1.7: 1212 | version "0.1.8" 1213 | resolved "http://registry.npm.taobao.org/source-list-map/download/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" 1214 | 1215 | source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: 1216 | version "0.5.6" 1217 | resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" 1218 | 1219 | source-map@~0.4.1: 1220 | version "0.4.4" 1221 | resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" 1222 | dependencies: 1223 | amdefine ">=0.0.4" 1224 | 1225 | sshpk@^1.7.0: 1226 | version "1.13.0" 1227 | resolved "http://registry.npm.taobao.org/sshpk/download/sshpk-1.13.0.tgz#ff2a3e4fd04497555fed97b39a0fd82fafb3a33c" 1228 | dependencies: 1229 | asn1 "~0.2.3" 1230 | assert-plus "^1.0.0" 1231 | dashdash "^1.12.0" 1232 | getpass "^0.1.1" 1233 | optionalDependencies: 1234 | bcrypt-pbkdf "^1.0.0" 1235 | ecc-jsbn "~0.1.1" 1236 | jodid25519 "^1.0.0" 1237 | jsbn "~0.1.0" 1238 | tweetnacl "~0.14.0" 1239 | 1240 | stream-browserify@^2.0.1: 1241 | version "2.0.1" 1242 | resolved "http://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" 1243 | dependencies: 1244 | inherits "~2.0.1" 1245 | readable-stream "^2.0.2" 1246 | 1247 | stream-http@^2.3.1: 1248 | version "2.7.1" 1249 | resolved "http://registry.npm.taobao.org/stream-http/download/stream-http-2.7.1.tgz#546a51741ad5a6b07e9e31b0b10441a917df528a" 1250 | dependencies: 1251 | builtin-status-codes "^3.0.0" 1252 | inherits "^2.0.1" 1253 | readable-stream "^2.2.6" 1254 | to-arraybuffer "^1.0.0" 1255 | xtend "^4.0.0" 1256 | 1257 | string-width@^1.0.1, string-width@^1.0.2: 1258 | version "1.0.2" 1259 | resolved "http://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 1260 | dependencies: 1261 | code-point-at "^1.0.0" 1262 | is-fullwidth-code-point "^1.0.0" 1263 | strip-ansi "^3.0.0" 1264 | 1265 | string_decoder@^0.10.25: 1266 | version "0.10.31" 1267 | resolved "http://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 1268 | 1269 | string_decoder@~1.0.0: 1270 | version "1.0.1" 1271 | resolved "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.0.1.tgz#62e200f039955a6810d8df0a33ffc0f013662d98" 1272 | dependencies: 1273 | safe-buffer "^5.0.1" 1274 | 1275 | stringstream@~0.0.4: 1276 | version "0.0.5" 1277 | resolved "http://registry.npm.taobao.org/stringstream/download/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" 1278 | 1279 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 1280 | version "3.0.1" 1281 | resolved "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1282 | dependencies: 1283 | ansi-regex "^2.0.0" 1284 | 1285 | strip-json-comments@~2.0.1: 1286 | version "2.0.1" 1287 | resolved "http://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1288 | 1289 | supports-color@3.1.2, supports-color@^3.1.0: 1290 | version "3.1.2" 1291 | resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" 1292 | dependencies: 1293 | has-flag "^1.0.0" 1294 | 1295 | supports-color@^2.0.0: 1296 | version "2.0.0" 1297 | resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 1298 | 1299 | tapable@^0.1.8, tapable@~0.1.8: 1300 | version "0.1.10" 1301 | resolved "http://registry.npm.taobao.org/tapable/download/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" 1302 | 1303 | tar-pack@^3.4.0: 1304 | version "3.4.0" 1305 | resolved "http://registry.npm.taobao.org/tar-pack/download/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" 1306 | dependencies: 1307 | debug "^2.2.0" 1308 | fstream "^1.0.10" 1309 | fstream-ignore "^1.0.5" 1310 | once "^1.3.3" 1311 | readable-stream "^2.1.4" 1312 | rimraf "^2.5.1" 1313 | tar "^2.2.1" 1314 | uid-number "^0.0.6" 1315 | 1316 | tar@^2.2.1: 1317 | version "2.2.1" 1318 | resolved "http://registry.npm.taobao.org/tar/download/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" 1319 | dependencies: 1320 | block-stream "*" 1321 | fstream "^1.0.2" 1322 | inherits "2" 1323 | 1324 | timers-browserify@^2.0.2: 1325 | version "2.0.2" 1326 | resolved "http://registry.npm.taobao.org/timers-browserify/download/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86" 1327 | dependencies: 1328 | setimmediate "^1.0.4" 1329 | 1330 | to-arraybuffer@^1.0.0: 1331 | version "1.0.1" 1332 | resolved "http://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" 1333 | 1334 | tough-cookie@~2.3.0: 1335 | version "2.3.2" 1336 | resolved "http://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" 1337 | dependencies: 1338 | punycode "^1.4.1" 1339 | 1340 | tty-browserify@0.0.0: 1341 | version "0.0.0" 1342 | resolved "http://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" 1343 | 1344 | tunnel-agent@^0.6.0: 1345 | version "0.6.0" 1346 | resolved "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 1347 | dependencies: 1348 | safe-buffer "^5.0.1" 1349 | 1350 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 1351 | version "0.14.5" 1352 | resolved "http://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 1353 | 1354 | type-detect@0.1.1: 1355 | version "0.1.1" 1356 | resolved "http://registry.npm.taobao.org/type-detect/download/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" 1357 | 1358 | type-detect@^1.0.0: 1359 | version "1.0.0" 1360 | resolved "http://registry.npm.taobao.org/type-detect/download/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2" 1361 | 1362 | uglify-js@^2.7.3, uglify-js@~2.7.3: 1363 | version "2.7.5" 1364 | resolved "http://registry.npm.taobao.org/uglify-js/download/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" 1365 | dependencies: 1366 | async "~0.2.6" 1367 | source-map "~0.5.1" 1368 | uglify-to-browserify "~1.0.0" 1369 | yargs "~3.10.0" 1370 | 1371 | uglify-to-browserify@~1.0.0: 1372 | version "1.0.2" 1373 | resolved "http://registry.npm.taobao.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" 1374 | 1375 | uid-number@^0.0.6: 1376 | version "0.0.6" 1377 | resolved "http://registry.npm.taobao.org/uid-number/download/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" 1378 | 1379 | url@^0.11.0: 1380 | version "0.11.0" 1381 | resolved "http://registry.npm.taobao.org/url/download/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" 1382 | dependencies: 1383 | punycode "1.3.2" 1384 | querystring "0.2.0" 1385 | 1386 | util-deprecate@~1.0.1: 1387 | version "1.0.2" 1388 | resolved "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1389 | 1390 | util@0.10.3, util@^0.10.3: 1391 | version "0.10.3" 1392 | resolved "http://registry.npm.taobao.org/util/download/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" 1393 | dependencies: 1394 | inherits "2.0.1" 1395 | 1396 | uuid@^3.0.0: 1397 | version "3.0.1" 1398 | resolved "http://registry.npm.taobao.org/uuid/download/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" 1399 | 1400 | verror@1.3.6: 1401 | version "1.3.6" 1402 | resolved "http://registry.npm.taobao.org/verror/download/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" 1403 | dependencies: 1404 | extsprintf "1.0.2" 1405 | 1406 | vm-browserify@0.0.4: 1407 | version "0.0.4" 1408 | resolved "http://registry.npm.taobao.org/vm-browserify/download/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" 1409 | dependencies: 1410 | indexof "0.0.1" 1411 | 1412 | watchpack@^0.2.1: 1413 | version "0.2.9" 1414 | resolved "http://registry.npm.taobao.org/watchpack/download/watchpack-0.2.9.tgz#62eaa4ab5e5ba35fdfc018275626e3c0f5e3fb0b" 1415 | dependencies: 1416 | async "^0.9.0" 1417 | chokidar "^1.0.0" 1418 | graceful-fs "^4.1.2" 1419 | 1420 | webpack-core@~0.6.9: 1421 | version "0.6.9" 1422 | resolved "http://registry.npm.taobao.org/webpack-core/download/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2" 1423 | dependencies: 1424 | source-list-map "~0.1.7" 1425 | source-map "~0.4.1" 1426 | 1427 | webpack-sources@^0.2.3: 1428 | version "0.2.3" 1429 | resolved "http://registry.npm.qima-inc.com/webpack-sources/download/webpack-sources-0.2.3.tgz#17c62bfaf13c707f9d02c479e0dcdde8380697fb" 1430 | dependencies: 1431 | source-list-map "^1.1.1" 1432 | source-map "~0.5.3" 1433 | 1434 | webpack@^1.13.3: 1435 | version "1.15.0" 1436 | resolved "http://registry.npm.taobao.org/webpack/download/webpack-1.15.0.tgz#4ff31f53db03339e55164a9d468ee0324968fe98" 1437 | dependencies: 1438 | acorn "^3.0.0" 1439 | async "^1.3.0" 1440 | clone "^1.0.2" 1441 | enhanced-resolve "~0.9.0" 1442 | interpret "^0.6.4" 1443 | loader-utils "^0.2.11" 1444 | memory-fs "~0.3.0" 1445 | mkdirp "~0.5.0" 1446 | node-libs-browser "^0.7.0" 1447 | optimist "~0.6.0" 1448 | supports-color "^3.1.0" 1449 | tapable "~0.1.8" 1450 | uglify-js "~2.7.3" 1451 | watchpack "^0.2.1" 1452 | webpack-core "~0.6.9" 1453 | 1454 | wide-align@^1.1.0: 1455 | version "1.1.2" 1456 | resolved "http://registry.npm.taobao.org/wide-align/download/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" 1457 | dependencies: 1458 | string-width "^1.0.2" 1459 | 1460 | window-size@0.1.0: 1461 | version "0.1.0" 1462 | resolved "http://registry.npm.taobao.org/window-size/download/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" 1463 | 1464 | wordwrap@0.0.2: 1465 | version "0.0.2" 1466 | resolved "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" 1467 | 1468 | wordwrap@~0.0.2: 1469 | version "0.0.3" 1470 | resolved "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 1471 | 1472 | wrappy@1: 1473 | version "1.0.2" 1474 | resolved "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1475 | 1476 | xtend@^4.0.0: 1477 | version "4.0.1" 1478 | resolved "http://registry.npm.taobao.org/xtend/download/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 1479 | 1480 | yargs@~3.10.0: 1481 | version "3.10.0" 1482 | resolved "http://registry.npm.taobao.org/yargs/download/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" 1483 | dependencies: 1484 | camelcase "^1.0.2" 1485 | cliui "^2.1.0" 1486 | decamelize "^1.0.0" 1487 | window-size "0.1.0" 1488 | --------------------------------------------------------------------------------