mirror of
https://gitcode.com/gh_mirrors/re/react-native-pushy.git
synced 2025-09-16 12:51:44 +08:00
Compare commits
39 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
679b02ea73 | ||
![]() |
3b69156c4a | ||
![]() |
5a13f82f2e | ||
![]() |
617fb0c1a2 | ||
![]() |
00c1eac457 | ||
![]() |
84ffaa7f5a | ||
![]() |
1e5d73c0d3 | ||
![]() |
df98736c3b | ||
![]() |
c654022300 | ||
![]() |
8a237845e2 | ||
![]() |
8b31779b07 | ||
![]() |
84fde13a79 | ||
![]() |
1e9650478d | ||
![]() |
7e11356cb9 | ||
![]() |
0eaf27aea9 | ||
![]() |
3353c16fa3 | ||
![]() |
93d2a6cccb | ||
![]() |
cfdc26f71d | ||
![]() |
b6a08a19c8 | ||
![]() |
ef53716df3 | ||
![]() |
551cbc33cc | ||
![]() |
56e6d790c1 | ||
![]() |
976cc5f218 | ||
![]() |
6fd04a1cc3 | ||
![]() |
31a0eadbbf | ||
![]() |
6f0755e571 | ||
![]() |
4099986a9c | ||
![]() |
48101bbd51 | ||
![]() |
1c2507e631 | ||
![]() |
b5e273deef | ||
![]() |
b55a40c92c | ||
![]() |
d23178a851 | ||
![]() |
b639f3619f | ||
![]() |
e905476551 | ||
![]() |
ee1a48b0d5 | ||
![]() |
851f14e258 | ||
![]() |
34d10973a7 | ||
![]() |
5ab361ed54 | ||
![]() |
a7f3d23439 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -36,6 +36,9 @@ project.xcworkspace
|
||||
.idea
|
||||
.gradle
|
||||
local.properties
|
||||
**/.project
|
||||
**/.settings
|
||||
**/.classpath
|
||||
|
||||
# node.js
|
||||
#
|
||||
|
49
CHANGELOG.MD
Normal file
49
CHANGELOG.MD
Normal file
@@ -0,0 +1,49 @@
|
||||
### 最近更新
|
||||
|
||||
## 5.2.9 (2019-09-18)
|
||||
|
||||
1. 添加 proguard 混淆规则以解决开启混淆后闪退的问题
|
||||
|
||||
## 5.2.8
|
||||
|
||||
1. 解决某些情形下 Android 调用 switchVersion 不能重启的问题
|
||||
|
||||
## 5.2.7
|
||||
|
||||
1. 改进 windows 端打更新包的兼容性(部分 windows 机器上会产生空 ppk 文件)
|
||||
|
||||
## 5.2.4
|
||||
|
||||
1. 支持 RN 0.61 的 hermes(路径变化)
|
||||
2. iOS 端使用第三方的 SSZipArchive 以减少重名冲突
|
||||
|
||||
## 5.2.2
|
||||
|
||||
1. 修复一处导致 iOS 回滚的问题
|
||||
|
||||
## 5.2.1
|
||||
|
||||
1. 检测如果开启了 hermes,则自动编译为 hermes 字节码格式
|
||||
|
||||
## 5.2.0
|
||||
|
||||
1. 添加 typescript 声明
|
||||
2. 支持 cocoapods
|
||||
|
||||
## 5.1.9
|
||||
|
||||
1. 重写 bundle 命令以提升版本兼容性
|
||||
2. 改进命令行的输出样式
|
||||
|
||||
## 5.1.8
|
||||
|
||||
1. 服务器迁移到 https
|
||||
2. android 支持 64 位
|
||||
|
||||
## 5.1.6
|
||||
|
||||
解决 Android 热更新后部分图片丢失问题:
|
||||
|
||||
同一个项目中放置了多个完全相同的文件,在 5.1.0 至 5.1.5 之间的版本中,更新后有时会出现其中的部分无法显示。此问题在 5.1.6 版本修复。
|
||||
|
||||
修复此问题涉及原生部分,需要重新打包。
|
26
README.md
26
README.md
@@ -2,31 +2,9 @@
|
||||
|
||||
本组件是面向 React Native 提供热更新功能的组件,建议结合[Update 服务](https://update.reactnative.cn/)使用。
|
||||
|
||||
### 最新更新
|
||||
### 最近更新
|
||||
|
||||
5.1.6: 解决 Android 热更新后部分图片丢失问题:
|
||||
|
||||
同一个项目中放置了多个完全相同的文件,在 5.1.0 至 5.1.5 之间的版本中,更新后有时会出现其中的部分无法显示。此问题在 5.1.6 版本修复。
|
||||
|
||||
修复此问题涉及原生部分,需要重新打包。
|
||||
|
||||
5.1.0 以上的版本增加了如下的优化:
|
||||
|
||||
1. 在项目中图片较多时,Android 更新速度大幅提升,达到和 iOS 基本一致的更新速度。
|
||||
2. Android 的更新移到了单独的线程,避免更新过程对 AsyncStorage 等原生异步模块的影响。
|
||||
3. Android 的.so 文件长时间没有任何改动,因而加入了预编译好的文件,避免对 ndk 的依赖。
|
||||
|
||||
### 版本
|
||||
|
||||
因为 React Native 不同版本代码结构不同,因而请按下面表格对号入座:
|
||||
|
||||
| React Native 版本 | react-native-update 版本 |
|
||||
| ----------------- | ------------------------ |
|
||||
| 0.26 及以下 | 1.0.x |
|
||||
| 0.27 - 0.28 | 2.x |
|
||||
| 0.29 - 0.33 | 3.x |
|
||||
| 0.34 - 0.45 | 4.x |
|
||||
| 0.46 及以上 | 5.x |
|
||||
请查阅[最近更新文档](CHANGELOG.md)。
|
||||
|
||||
### 优势
|
||||
|
||||
|
@@ -14,6 +14,7 @@ android {
|
||||
targetSdkVersion safeExtGet('targetSdkVersion', 27)
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
consumerProguardFiles "proguard.pro"
|
||||
}
|
||||
sourceSets {
|
||||
main {
|
||||
|
2
android/proguard.pro
vendored
Normal file
2
android/proguard.pro
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
-keepnames class cn.reactnative.modules.update.DownloadTask { *; }
|
||||
-keepnames class com.facebook.react.ReactInstanceManager { *; }
|
@@ -135,13 +135,12 @@ public class UpdateModule extends ReactContextBaseJavaModule{
|
||||
loadField.set(instanceManager, loader);
|
||||
}
|
||||
|
||||
final Method recreateMethod = instanceManager.getClass().getMethod("recreateReactContextInBackground");
|
||||
try {
|
||||
instanceManager.recreateReactContextInBackground();
|
||||
} catch(Throwable err) {
|
||||
activity.recreate();
|
||||
}
|
||||
|
||||
final ReactInstanceManager finalizedInstanceManager = instanceManager;
|
||||
|
||||
recreateMethod.invoke(finalizedInstanceManager);
|
||||
|
||||
activity.recreate();
|
||||
} catch (Throwable err) {
|
||||
Log.e("pushy", "Failed to restart application", err);
|
||||
}
|
||||
|
110
docs/guide.md
110
docs/guide.md
@@ -6,31 +6,32 @@
|
||||
|
||||
所以我们也假设你已经拥有了开发React Native应用的一切环境,包括`Node.js`、`npm`、`XCode`、`Android SDK`等等。
|
||||
|
||||
如果React Native的版本是0.45以下,并且你之前没安装过,你还必须安装[Android NDK](http://androiddevtools.cn),版本最好选用r10e,并设置环境变量`ANDROID_NDK_HOME`,指向你的NDK根目录(例如`/Users/tdzl2003/Downloads/android-ndk-r10e`)。0.46以上的React Native不需要安装NDK。
|
||||
|
||||
## 安装
|
||||
|
||||
在你的项目根目录下运行以下命令:
|
||||
|
||||
```bash
|
||||
npm i -g react-native-update-cli
|
||||
npm i react-native-update@具体版本请看下面的表格
|
||||
react-native link react-native-update
|
||||
npm i react-native-update
|
||||
```
|
||||
|
||||
`npm install -g react-native-update-cli`这一句在每一台电脑上仅需运行一次。
|
||||
> 如果下载极慢或者显示网络失败,请设置使用淘宝镜像`npx nrm use taobao`
|
||||
|
||||
* 注意 *
|
||||
如果你的RN版本 >= 0.60,请在iOS目录下执行:
|
||||
|
||||
如果访问极慢或者显示网络失败,请设置使用淘宝镜像(也仅需设置一次):
|
||||
```bash
|
||||
npm install -g nrm
|
||||
nrm use taobao
|
||||
pod install
|
||||
```
|
||||
|
||||
### 版本
|
||||
如果你的RN版本 < 0.60,那么还需要[手动link](#一手动link)
|
||||
|
||||
因为React Native不同版本代码结构不同,因而请按下面表格对号入座:
|
||||
|
||||
<details>
|
||||
<summary>
|
||||
如果你的RN版本比较老(< 0.46),请点击这里的注意事项
|
||||
</summary>
|
||||
|
||||
如果你的RN版本比较老,请按下面表格尝试老一些的版本(但这些版本我们已不再维护,不能保证可以使用):
|
||||
|
||||
| React Native版本 | react-native-update版本 |
|
||||
| ---------------- | ----------------------- |
|
||||
@@ -38,29 +39,53 @@ nrm use taobao
|
||||
| 0.27 - 0.28 | 2.x |
|
||||
| 0.29 - 0.33 | 3.x |
|
||||
| 0.34 - 0.45 | 4.x |
|
||||
| 0.46及以上 | 5.x |
|
||||
|
||||
|
||||
|
||||
安装命令示例:
|
||||
```
|
||||
npm i react-native-update@5.x
|
||||
npm i react-native-update@4.x
|
||||
```
|
||||
|
||||
如果RN的版本是0.45及以下,你还必须安装[Android NDK](http://androiddevtools.cn),版本最好选用r10e,并设置环境变量`ANDROID_NDK_HOME`,指向你的NDK根目录(例如`/Users/tdzl2003/Downloads/android-ndk-r10e`)。
|
||||
</details>
|
||||
|
||||
|
||||
请记得一定要重新编译(react-native run-ios或run-android命令编译,或在Xcode/Android Studio中重新编译)。
|
||||
|
||||
|
||||
## 一、手动link
|
||||
|
||||
如果第一步的`react-native link`已成功(iOS工程和安卓工程均能看到依赖),可以跳过此步骤
|
||||
如果RN版本 >= 0.60则可以跳过此步骤
|
||||
|
||||
### iOS
|
||||
|
||||
<details>
|
||||
<summary>RN < 0.60且使用CocoaPods(推荐)</summary>
|
||||
|
||||
1. 在ios/Podfile中添加
|
||||
```
|
||||
pod 'react-native-update', path: '../node_modules/react-native-update'
|
||||
```
|
||||
2. 在项目的ios目录下运行`pod install`
|
||||
3. 重新编译
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>RN < 0.60且不使用CocoaPods</summary>
|
||||
|
||||
1. 在XCode中的Project Navigator里,右键点击`Libraries` ➜ `Add Files to [你的工程名]`
|
||||
2. 进入`node_modules` ➜ `react-native-update` ➜ `ios 并选中 `RCTHotUpdate.xcodeproj`
|
||||
3. 在XCode中的project navigator里,选中你的工程,在 `Build Phases` ➜ `Link Binary With Libraries` 中添加 `libRCTHotUpdate.a`
|
||||
4. 继续在`Build Settings`里搜索`Header Search Path`,添加$(SRCROOT)/../node_modules/react-native-update/ios
|
||||
5. Run your project (`Cmd+R`)
|
||||
5. 重新编译
|
||||
|
||||
</details>
|
||||
|
||||
### Android
|
||||
|
||||
|
||||
<details>
|
||||
<summary>RN < 0.60</summary>
|
||||
1. 在`android/settings.gradle`中添加如下代码:
|
||||
```
|
||||
include ':react-native-update'
|
||||
@@ -69,43 +94,58 @@ npm i react-native-update@5.x
|
||||
|
||||
2. 在`android/app/build.gradle`的 dependencies 部分增加如下代码:
|
||||
```
|
||||
compile project(':react-native-update')
|
||||
implementation project(':react-native-update')
|
||||
```
|
||||
|
||||
3. 检查你的RN版本,如果是0.29及以上, 打开`android/app/src/main/java/[...]/MainApplication.java`,否则打开`android/app/src/main/java/[...]/MainActivity.java`
|
||||
3. 打开`android/app/src/main/java/[...]/MainApplication.java`,
|
||||
- 在文件开头增加 `import cn.reactnative.modules.update.UpdatePackage;`
|
||||
- 在`getPackages()` 方法中增加 `new UpdatePackage()`(注意上一行可能要增加一个逗号)
|
||||
</details>
|
||||
|
||||
## 二、配置Bundle URL
|
||||
|
||||
注意此步骤无论任何版本,目前都需要手动配置。
|
||||
|
||||
### iOS
|
||||
|
||||
首先在工程target的Build Phases->Link Binary with Libraries中加入`libz.tbd`、`libbz2.1.0.tbd`
|
||||
1. (RN >= 0.60或者使用CocoaPods集成此步可跳过)在工程target的Build Phases->Link Binary with Libraries中加入`libz.tbd`、`libbz2.1.0.tbd`
|
||||
|
||||
|
||||
然后在你的AppDelegate.m文件中增加如下代码:
|
||||
2. 在你的AppDelegate.m文件中增加如下代码:
|
||||
|
||||
```objective-c
|
||||
// ... 其它代码
|
||||
|
||||
#import "RCTHotUpdate.h"
|
||||
|
||||
// 如果RN版本 >= 0.59,修改sourceURLForBridge
|
||||
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
|
||||
{
|
||||
#if DEBUG
|
||||
return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
|
||||
#else
|
||||
// 非DEBUG情况下替换为热更新bundle
|
||||
return [RCTHotUpdate bundleURL];
|
||||
#endif
|
||||
}
|
||||
|
||||
// 如果RN版本 < 0.59,修改didFinishLaunchingWithOptions
|
||||
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
|
||||
{
|
||||
#if DEBUG
|
||||
// 原来的jsCodeLocation保留在这里
|
||||
jsCodeLocation = ..........
|
||||
#else
|
||||
// 非DEBUG情况下启用热更新
|
||||
jsCodeLocation=[RCTHotUpdate bundleURL];
|
||||
// 非DEBUG情况下替换为热更新bundle
|
||||
jsCodeLocation = [RCTHotUpdate bundleURL];
|
||||
#endif
|
||||
// ... 其它代码
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
### Android
|
||||
|
||||
`0.29及以后版本`:在你的MainApplication中增加如下代码:
|
||||
在MainApplication中增加如下代码:
|
||||
|
||||
```java
|
||||
// ... 其它代码
|
||||
@@ -124,24 +164,6 @@ public class MainApplication extends Application implements ReactApplication {
|
||||
}
|
||||
```
|
||||
|
||||
`0.28及以前版本`:在你的MainActivity中增加如下代码:
|
||||
|
||||
```java
|
||||
// ... 其它代码
|
||||
|
||||
// 请注意不要少了这句import
|
||||
import cn.reactnative.modules.update.UpdateContext;
|
||||
|
||||
public class MainActivity extends ReactActivity {
|
||||
|
||||
@Override
|
||||
protected String getJSBundleFile() {
|
||||
return UpdateContext.getBundleUrl(this);
|
||||
}
|
||||
// ... 其它代码
|
||||
}
|
||||
```
|
||||
|
||||
## 三、登录与创建应用
|
||||
|
||||
首先请在<https://update.reactnative.cn>注册帐号,然后在你的项目根目录下运行以下命令:
|
||||
@@ -170,7 +192,7 @@ App Name: <输入应用名字>
|
||||
```bash
|
||||
$ pushy selectApp --platform ios
|
||||
1) 鱼多多(ios)
|
||||
3) 招财旺(ios)
|
||||
2) 招财旺(ios)
|
||||
|
||||
Total 2 ios apps
|
||||
Enter appId: <输入应用前面的编号>
|
||||
|
@@ -23,12 +23,12 @@ $ pushy uploadIpa <your-package.ipa>
|
||||
## 发布安卓应用
|
||||
|
||||
首先参考[文档-生成已签名的APK](https://reactnative.cn/docs/signed-apk-android.html#content)设置签名,
|
||||
然后在android文件夹下运行`./gradlew assembleRelease`,你就可以在`android/app/build/outputs/apk/app-release.apk`中找到你的应用包。
|
||||
然后在android文件夹下运行`./gradlew assembleRelease`或`./gradlew aR`,你就可以在`android/app/build/outputs/apk/release/app-release.apk`中找到你的应用包。
|
||||
|
||||
然后运行如下命令
|
||||
|
||||
```bash
|
||||
$ pushy uploadApk android/app/build/outputs/apk/app-release.apk
|
||||
$ pushy uploadApk android/app/build/outputs/apk/release/app-release.apk
|
||||
```
|
||||
|
||||
即可上传apk以供后续版本比对之用。
|
||||
|
37
index.d.ts
vendored
Normal file
37
index.d.ts
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
export const downloadRootDir: string;
|
||||
export const packageVersion: string;
|
||||
export const currentVersion: string;
|
||||
export const isFirstTime: boolean;
|
||||
export const isRolledBack: boolean;
|
||||
|
||||
export interface ExpiredResult {
|
||||
expired: true;
|
||||
downloadUrl: string;
|
||||
}
|
||||
|
||||
export interface UpTodateResult {
|
||||
upToDate: true;
|
||||
}
|
||||
|
||||
export interface UpdateAvailableResult {
|
||||
update: true;
|
||||
name: string; // version name
|
||||
hash: string;
|
||||
description: string;
|
||||
metaInfo: string;
|
||||
updateUrl: string;
|
||||
pdiffUrl: string;
|
||||
diffUrl: string;
|
||||
}
|
||||
|
||||
export type CheckResult = Partial<ExpiredResult & UpTodateResult & UpdateAvailableResult>;
|
||||
|
||||
export function checkUpdate(appkey: string): Promise<CheckResult>;
|
||||
|
||||
export function downloadUpdate(options: UpdateAvailableResult): Promise<undefined | string>;
|
||||
|
||||
export function switchVersion(hash: string): void;
|
||||
|
||||
export function switchVersionLater(hash: string): void;
|
||||
|
||||
export function markSuccess(): void;
|
@@ -59,6 +59,8 @@ typedef NS_ENUM(NSInteger, HotUpdateType) {
|
||||
HotUpdateTypePatchFromPpk = 3,
|
||||
};
|
||||
|
||||
static BOOL ignoreRollback = false;
|
||||
|
||||
@implementation RCTHotUpdate {
|
||||
RCTHotUpdateManager *_fileManager;
|
||||
}
|
||||
@@ -92,7 +94,7 @@ RCT_EXPORT_MODULE(RCTHotUpdate);
|
||||
BOOL isFirstLoadOK = [updateInfo[paramIsFirstLoadOk] boolValue];
|
||||
|
||||
NSString *loadVersioin = curVersion;
|
||||
BOOL needRollback = (isFirstTime == NO && isFirstLoadOK == NO) || loadVersioin.length<=0;
|
||||
BOOL needRollback = (!ignoreRollback && isFirstTime == NO && isFirstLoadOK == NO) || loadVersioin.length<=0;
|
||||
if (needRollback) {
|
||||
loadVersioin = lastVersion;
|
||||
|
||||
@@ -112,7 +114,10 @@ RCT_EXPORT_MODULE(RCTHotUpdate);
|
||||
[defaults synchronize];
|
||||
// ...need clear files later
|
||||
}
|
||||
else if (isFirstTime){
|
||||
else if (isFirstTime && !ignoreRollback){
|
||||
// bundleURL may be called many times, ignore rollbacks before process restarted again.
|
||||
ignoreRollback = true;
|
||||
|
||||
NSMutableDictionary *newInfo = [[NSMutableDictionary alloc] initWithDictionary:updateInfo];
|
||||
newInfo[paramIsFirstTime] = @(NO);
|
||||
[defaults setObject:newInfo forKey:keyUpdateInfo];
|
||||
@@ -136,7 +141,8 @@ RCT_EXPORT_MODULE(RCTHotUpdate);
|
||||
}
|
||||
|
||||
+ (BOOL)requiresMainQueueSetup {
|
||||
return YES;
|
||||
// only set to YES if your module initialization relies on calling UIKit!
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (NSDictionary *)constantsToExport
|
||||
|
@@ -96,13 +96,18 @@
|
||||
"description": "Bundle javascript code only.",
|
||||
"options": {
|
||||
"dev": {
|
||||
"default": false
|
||||
"default": "false",
|
||||
"hasValue": true
|
||||
},
|
||||
"platform": {
|
||||
"hasValue": true
|
||||
},
|
||||
"bundleName":{
|
||||
"default": "index.bundlejs",
|
||||
"hasValue": true
|
||||
},
|
||||
"entryFile": {
|
||||
"default": "",
|
||||
"default": "index.js",
|
||||
"hasValue": true
|
||||
},
|
||||
"intermediaDir": {
|
||||
|
@@ -4,8 +4,7 @@
|
||||
|
||||
const fetch = require('isomorphic-fetch');
|
||||
let host = process.env.PUSHY_REGISTRY || 'https://update.reactnative.cn/api';
|
||||
const fs = require('fs-promise');
|
||||
import * as fsOrigin from 'fs';
|
||||
const fs = require('fs-extra');
|
||||
import request from 'request';
|
||||
import ProgressBar from 'progress';
|
||||
|
||||
@@ -13,9 +12,9 @@ let session = undefined;
|
||||
let savedSession = undefined;
|
||||
|
||||
exports.loadSession = async function() {
|
||||
if (await fs.exists('.update')) {
|
||||
if (fs.existsSync('.update')) {
|
||||
try {
|
||||
exports.replaceSession(JSON.parse(await fs.readFile('.update', 'utf8')));
|
||||
exports.replaceSession(JSON.parse(fs.readFileSync('.update', 'utf8')));
|
||||
savedSession = session;
|
||||
} catch (e) {
|
||||
console.error('Failed to parse file `.update`. Try to remove it manually.');
|
||||
@@ -32,19 +31,19 @@ exports.replaceSession = function(newSession) {
|
||||
session = newSession;
|
||||
};
|
||||
|
||||
exports.saveSession = async function() {
|
||||
exports.saveSession = function() {
|
||||
// Only save on change.
|
||||
if (session !== savedSession) {
|
||||
const current = session;
|
||||
const data = JSON.stringify(current, null, 4);
|
||||
await fs.writeFile('.update', data, 'utf8');
|
||||
fs.writeFileSync('.update', data, 'utf8');
|
||||
savedSession = current;
|
||||
}
|
||||
};
|
||||
|
||||
exports.closeSession = async function() {
|
||||
if (await fs.exists('.update')) {
|
||||
await fs.unlink('.update');
|
||||
exports.closeSession = function() {
|
||||
if (fs.existsSync('.update')) {
|
||||
fs.unlinkSync('.update');
|
||||
savedSession = undefined;
|
||||
}
|
||||
session = undefined;
|
||||
@@ -97,7 +96,7 @@ async function uploadFile(fn) {
|
||||
realUrl = host + url;
|
||||
}
|
||||
|
||||
const fileSize = (await fs.stat(fn)).size;
|
||||
const fileSize = fs.statSync(fn).size;
|
||||
|
||||
const bar = new ProgressBar(' Uploading [:bar] :percent :etas', {
|
||||
complete: '=',
|
||||
@@ -106,7 +105,7 @@ async function uploadFile(fn) {
|
||||
});
|
||||
|
||||
const info = await new Promise((resolve, reject) => {
|
||||
formData.file = fsOrigin.createReadStream(fn);
|
||||
formData.file = fs.createReadStream(fn);
|
||||
|
||||
formData.file.on('data', function(data) {
|
||||
bar.tick(data.length);
|
||||
|
@@ -3,7 +3,7 @@
|
||||
*/
|
||||
|
||||
import {question} from './utils';
|
||||
import * as fs from 'fs-promise';
|
||||
import * as fs from 'fs-extra';
|
||||
|
||||
const {
|
||||
post,
|
||||
@@ -23,13 +23,13 @@ export function checkPlatform(platform) {
|
||||
return platform
|
||||
}
|
||||
|
||||
export async function getSelectedApp(platform) {
|
||||
export function getSelectedApp(platform) {
|
||||
checkPlatform(platform);
|
||||
|
||||
if (!await fs.exists('update.json')){
|
||||
if (!fs.existsSync('update.json')){
|
||||
throw new Error(`App not selected. run 'pushy selectApp --platform ${platform}' first!`);
|
||||
}
|
||||
const updateInfo = JSON.parse(await fs.readFile('update.json', 'utf8'));
|
||||
const updateInfo = JSON.parse(fs.readFileSync('update.json', 'utf8'));
|
||||
if (!updateInfo[platform]) {
|
||||
throw new Error(`App not selected. run 'pushy selectApp --platform ${platform}' first!`);
|
||||
}
|
||||
@@ -92,9 +92,9 @@ export const commands = {
|
||||
const id = args[0] || (await chooseApp(platform)).id;
|
||||
|
||||
let updateInfo = {};
|
||||
if (await fs.exists('update.json')) {
|
||||
if (fs.existsSync('update.json')) {
|
||||
try {
|
||||
updateInfo = JSON.parse(await fs.readFile('update.json', 'utf8'));
|
||||
updateInfo = JSON.parse(fs.readFileSync('update.json', 'utf8'));
|
||||
} catch (e) {
|
||||
console.error('Failed to parse file `update.json`. Try to remove it manually.');
|
||||
throw e;
|
||||
@@ -105,6 +105,6 @@ export const commands = {
|
||||
appId: id,
|
||||
appKey,
|
||||
};
|
||||
await fs.writeFile('update.json', JSON.stringify(updateInfo, null, 4), 'utf8');
|
||||
fs.writeFileSync('update.json', JSON.stringify(updateInfo, null, 4), 'utf8');
|
||||
},
|
||||
}
|
||||
|
@@ -2,18 +2,16 @@
|
||||
* Created by tdzl2003 on 2/22/16.
|
||||
*/
|
||||
|
||||
import * as path from 'path';
|
||||
import { mkdir as mkdirRecurisve } from 'mkdir-recursive';
|
||||
import rmdirRecursive from 'rimraf';
|
||||
const path = require('path');
|
||||
import { getRNVersion, translateOptions } from './utils';
|
||||
import * as fs from 'fs';
|
||||
import * as fs from 'fs-extra';
|
||||
import { ZipFile } from 'yazl';
|
||||
import { open as openZipFile } from 'yauzl';
|
||||
// import {diff} from 'node-bsdiff';
|
||||
import { question } from './utils';
|
||||
import { checkPlatform } from './app';
|
||||
import crypto from 'crypto';
|
||||
import minimist from 'minimist';
|
||||
const { spawn, spawnSync, execSync } = require('child_process');
|
||||
const g2js = require('gradle-to-js/lib/parser');
|
||||
const os = require('os');
|
||||
|
||||
var diff;
|
||||
try {
|
||||
@@ -22,38 +20,121 @@ try {
|
||||
} catch (e) {
|
||||
diff = function() {
|
||||
console.warn(
|
||||
'This function needs "node-bsdiff". Please run "npm i node-bsdiff -S" from your project directory first!',
|
||||
'This function needs "node-bsdiff". Please run "npm i node-bsdiff" from your project directory first!',
|
||||
);
|
||||
throw new Error('This function needs module "node-bsdiff". Please install it first.');
|
||||
};
|
||||
}
|
||||
|
||||
function mkdir(dir) {
|
||||
function exec(command) {
|
||||
const commandResult = spawnSync(command, {
|
||||
shell: true,
|
||||
stdio: 'inherit',
|
||||
});
|
||||
if (commandResult.error) {
|
||||
throw commandResult.error;
|
||||
}
|
||||
}
|
||||
|
||||
async function runReactNativeBundleCommand(
|
||||
bundleName,
|
||||
development,
|
||||
entryFile,
|
||||
outputFolder,
|
||||
platform,
|
||||
sourcemapOutput,
|
||||
config,
|
||||
) {
|
||||
let reactNativeBundleArgs = [];
|
||||
|
||||
let envArgs = process.env.PUSHY_ENV_ARGS;
|
||||
|
||||
if (envArgs) {
|
||||
Array.prototype.push.apply(reactNativeBundleArgs, envArgs.trim().split(/\s+/));
|
||||
}
|
||||
|
||||
fs.emptyDirSync(outputFolder);
|
||||
|
||||
Array.prototype.push.apply(reactNativeBundleArgs, [
|
||||
path.join("node_modules", "react-native", "local-cli", "cli.js"),
|
||||
"bundle",
|
||||
'--assets-dest',
|
||||
outputFolder,
|
||||
'--bundle-output',
|
||||
path.join(outputFolder, bundleName),
|
||||
'--dev',
|
||||
development,
|
||||
'--entry-file',
|
||||
entryFile,
|
||||
'--platform',
|
||||
platform,
|
||||
]);
|
||||
|
||||
if (sourcemapOutput) {
|
||||
reactNativeBundleArgs.push('--sourcemap-output', sourcemapOutput);
|
||||
}
|
||||
|
||||
if (config) {
|
||||
reactNativeBundleArgs.push('--config', config);
|
||||
}
|
||||
|
||||
const reactNativeBundleProcess = spawn('node', reactNativeBundleArgs);
|
||||
console.log(`Running bundle command: node ${reactNativeBundleArgs.join(' ')}`);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
mkdirRecurisve(dir, err => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
reactNativeBundleProcess.stdout.on('data', data => {
|
||||
console.log(data.toString().trim());
|
||||
});
|
||||
|
||||
reactNativeBundleProcess.stderr.on('data', data => {
|
||||
console.error(data.toString().trim());
|
||||
});
|
||||
|
||||
reactNativeBundleProcess.on('close', async exitCode => {
|
||||
if (exitCode) {
|
||||
reject(new Error(`"react-native bundle" command exited with code ${exitCode}.`));
|
||||
} else {
|
||||
resolve();
|
||||
if (platform === 'android') {
|
||||
await compileHermesByteCode(bundleName, outputFolder);
|
||||
}
|
||||
resolve(null);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function rmdir(dir) {
|
||||
return new Promise((resolve, reject) => {
|
||||
rmdirRecursive(dir, err => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve();
|
||||
function getHermesOSBin() {
|
||||
if (os.platform() === 'win32') return 'win64-bin';
|
||||
if (os.platform() === 'darwin') return 'osx-bin';
|
||||
if (os.platform() === 'linux') return 'linux64-bin';
|
||||
}
|
||||
|
||||
async function compileHermesByteCode(bundleName, outputFolder) {
|
||||
let enableHermes = false;
|
||||
try {
|
||||
const gradleConfig = await g2js.parseFile('android/app/build.gradle');
|
||||
const projectConfig = gradleConfig['project.ext.react'];
|
||||
for (const packagerConfig of projectConfig) {
|
||||
if (packagerConfig.includes('enableHermes') && packagerConfig.includes('true')) {
|
||||
enableHermes = true;
|
||||
break;
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
} catch (e) {}
|
||||
if (enableHermes) {
|
||||
console.log(`Hermes enabled, now compiling to hermes bytecode:\n`);
|
||||
const hermesPath = fs.existsSync('node_modules/hermes-engine')
|
||||
? 'node_modules/hermes-engine'
|
||||
: 'node_modules/hermesvm';
|
||||
execSync(
|
||||
`${hermesPath}/${getHermesOSBin()}/hermes -emit-binary -out ${outputFolder}/${bundleName} ${outputFolder}/${bundleName} -O`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
async function pack(dir, output) {
|
||||
await mkdir(path.dirname(output));
|
||||
console.log('Packing');
|
||||
fs.ensureDirSync(path.dirname(output));
|
||||
await new Promise((resolve, reject) => {
|
||||
var zipfile = new ZipFile();
|
||||
|
||||
@@ -115,7 +196,7 @@ function basename(fn) {
|
||||
}
|
||||
|
||||
async function diffFromPPK(origin, next, output) {
|
||||
await mkdir(path.dirname(output));
|
||||
fs.ensureDirSync(path.dirname(output));
|
||||
|
||||
const originEntries = {};
|
||||
const originMap = {};
|
||||
@@ -233,7 +314,7 @@ async function diffFromPPK(origin, next, output) {
|
||||
}
|
||||
|
||||
async function diffFromPackage(origin, next, output, originBundleName, transformPackagePath = v => v) {
|
||||
await mkdir(path.dirname(output));
|
||||
fs.ensureDirSync(path.dirname(output));
|
||||
|
||||
const originEntries = {};
|
||||
const originMap = {};
|
||||
@@ -342,12 +423,12 @@ export const commands = {
|
||||
bundle: async function({ options }) {
|
||||
const platform = checkPlatform(options.platform || (await question('Platform(ios/android):')));
|
||||
|
||||
let { entryFile, intermediaDir, output, dev, verbose } = translateOptions({
|
||||
let { bundleName, entryFile, intermediaDir, output, dev, verbose } = translateOptions({
|
||||
...options,
|
||||
platform,
|
||||
});
|
||||
|
||||
const realIntermedia = path.resolve(intermediaDir);
|
||||
// const sourcemapOutput = path.join(intermediaDir, bundleName + ".map");
|
||||
|
||||
const realOutput = output.replace(/\$\{time\}/g, '' + Date.now());
|
||||
|
||||
@@ -359,137 +440,9 @@ export const commands = {
|
||||
|
||||
console.log('Bundling with React Native version: ', version);
|
||||
|
||||
await rmdir(realIntermedia);
|
||||
await mkdir(realIntermedia);
|
||||
await runReactNativeBundleCommand(bundleName, dev, entryFile, intermediaDir, platform);
|
||||
|
||||
if (major === 0) {
|
||||
if (minor >= 56) {
|
||||
require('metro-babel-register');
|
||||
} else if (minor >= 52) {
|
||||
require('metro/src/babelRegisterOnly');
|
||||
} else if (minor >= 47) {
|
||||
require('metro-bundler/src/babelRegisterOnly');
|
||||
} else if (minor === 46) {
|
||||
require('metro-bundler/build/babelRegisterOnly');
|
||||
} else {
|
||||
// handle RN <= 0.45
|
||||
require(path.resolve('node_modules/react-native/packager/babelRegisterOnly'))([
|
||||
/private-cli\/src/,
|
||||
/local-cli/,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
// This line fix issue #11
|
||||
require(path.resolve('node_modules/react-native/local-cli/cli'));
|
||||
|
||||
let Config, defaultConfig, bundle;
|
||||
|
||||
if (major === 0) {
|
||||
if (minor >= 49) {
|
||||
entryFile = entryFile || `index.js`;
|
||||
} else {
|
||||
entryFile = entryFile || `index.${platform}.js`;
|
||||
}
|
||||
}
|
||||
|
||||
if (major === 0) {
|
||||
if (minor >= 59) {
|
||||
Config = require(path.resolve('node_modules/@react-native-community/cli/build/tools/loadMetroConfig'));
|
||||
bundle = require(path.resolve('node_modules/@react-native-community/cli/build/commands/bundle/bundle')).default;
|
||||
} else {
|
||||
Config = require(path.resolve('node_modules/react-native/local-cli/util/Config'));
|
||||
bundle = require(path.resolve('node_modules/react-native/local-cli/bundle/bundle'));
|
||||
}
|
||||
if (minor >= 59) {
|
||||
// https://github.com/react-native-community/cli/blob/1.x/packages/cli/src/cliEntry.js#L170-L202
|
||||
const options = minimist(process.argv.slice(2));
|
||||
|
||||
const root = options.projectRoot ? path.resolve(options.projectRoot) : process.cwd();
|
||||
|
||||
const reactNativePath = options.reactNativePath
|
||||
? path.resolve(options.reactNativePath)
|
||||
: (() => {
|
||||
try {
|
||||
return path.dirname(
|
||||
require.resolve('react-native/package.json', {
|
||||
paths: [root],
|
||||
}),
|
||||
);
|
||||
} catch (_ignored) {
|
||||
throw new Error('Unable to find React Native files. Please use --reactNativePath to specify the path.');
|
||||
}
|
||||
})();
|
||||
|
||||
defaultConfig = {
|
||||
reactNativePath,
|
||||
root,
|
||||
};
|
||||
} else if (minor >= 57) {
|
||||
// https://github.com/facebook/react-native/commit/a32620dc3b7a0ebd53feeaf7794051705d80f49e#diff-75692fe55c8b1a7c05f4264301342167L101
|
||||
// defaultConfig = Config.load();
|
||||
const { configPromise } = require(path.resolve('node_modules/react-native/local-cli/core'));
|
||||
defaultConfig = await configPromise;
|
||||
} else if (minor >= 45) {
|
||||
defaultConfig = Config.findOptional(path.resolve('.'));
|
||||
} else if (minor >= 42) {
|
||||
defaultConfig = Config.get(
|
||||
path.resolve('node_modules/react-native/local-cli'),
|
||||
require(path.resolve('node_modules/react-native/local-cli/core/default.config')),
|
||||
path.resolve('node_modules/react-native/packager/rn-cli.config.js'),
|
||||
);
|
||||
} else if (minor >= 33) {
|
||||
defaultConfig = Config.get(
|
||||
path.resolve('node_modules/react-native/local-cli'),
|
||||
require(path.resolve('node_modules/react-native/local-cli/default.config')),
|
||||
path.resolve('node_modules/react-native/packager/rn-cli.config.js'),
|
||||
);
|
||||
} else {
|
||||
defaultConfig = Config.get(
|
||||
path.resolve('node_modules/react-native/local-cli'),
|
||||
require(path.resolve('node_modules/react-native/local-cli/default.config')),
|
||||
);
|
||||
}
|
||||
} else {
|
||||
defaultConfig = Config.findOptional(path.resolve('.'));
|
||||
}
|
||||
|
||||
console;
|
||||
if (bundle.func) {
|
||||
// React native >= 0.31.0
|
||||
await bundle.func([], defaultConfig, {
|
||||
entryFile: entryFile,
|
||||
platform: platform,
|
||||
dev: !!dev,
|
||||
bundleOutput: `${realIntermedia}${path.sep}index.bundlejs`,
|
||||
assetsDest: `${realIntermedia}`,
|
||||
verbose: !!verbose,
|
||||
bundleEncoding: 'utf8',
|
||||
});
|
||||
} else {
|
||||
// React native < 0.31.0
|
||||
await bundle(
|
||||
[
|
||||
'--entry-file',
|
||||
entryFile,
|
||||
'--platform',
|
||||
platform,
|
||||
'--dev',
|
||||
'' + !!dev,
|
||||
'--bundle-output',
|
||||
`${realIntermedia}${path.sep}index.bundlejs`,
|
||||
'--assets-dest',
|
||||
`${realIntermedia}`,
|
||||
'--verbose',
|
||||
'' + !!verbose,
|
||||
],
|
||||
defaultConfig,
|
||||
);
|
||||
}
|
||||
|
||||
console.log('Packing');
|
||||
|
||||
await pack(realIntermedia, realOutput);
|
||||
await pack(path.resolve(intermediaDir), realOutput);
|
||||
|
||||
const v = await question('Would you like to publish it?(Y/N)');
|
||||
if (v.toLowerCase() === 'y') {
|
||||
|
@@ -2,30 +2,33 @@
|
||||
* Created by tdzl2003 on 4/2/16.
|
||||
*/
|
||||
|
||||
const {
|
||||
get,
|
||||
post,
|
||||
uploadFile,
|
||||
} = require('./api');
|
||||
const { get, post, uploadFile } = require('./api');
|
||||
import { question } from './utils';
|
||||
|
||||
import { checkPlatform, getSelectedApp } from './app';
|
||||
|
||||
import {getIPAVersion, getApkVersion} from './utils';
|
||||
import { getIPAVersion, getApkVersion } from './utils';
|
||||
const Table = require('tty-table');
|
||||
|
||||
export async function listPackage(appId){
|
||||
const {data} = await get(`/app/${appId}/package/list?limit=1000`);
|
||||
export async function listPackage(appId) {
|
||||
const { data } = await get(`/app/${appId}/package/list?limit=1000`);
|
||||
|
||||
const header = [{ value: 'Package Id' }, { value: 'Version' }];
|
||||
const rows = [];
|
||||
for (const pkg of data) {
|
||||
const {version} = pkg;
|
||||
const { version } = pkg;
|
||||
let versionInfo = '';
|
||||
if (version) {
|
||||
versionInfo = ` - ${version.id} ${version.hash.slice(0, 8)} ${version.name}`;
|
||||
} else {
|
||||
versionInfo = ' (newest)';
|
||||
}
|
||||
console.log(`${pkg.id}) ${pkg.name}(${pkg.status})${versionInfo}`);
|
||||
|
||||
rows.push([pkg.id, `${pkg.name}(${pkg.status})${versionInfo}`]);
|
||||
}
|
||||
console.log(`\nTotal ${data.length} packages.`);
|
||||
|
||||
console.log(Table(header, rows).render());
|
||||
console.log(`\nTotal ${data.length} package(s).`);
|
||||
return data;
|
||||
}
|
||||
|
||||
@@ -33,8 +36,8 @@ export async function choosePackage(appId) {
|
||||
const list = await listPackage(appId);
|
||||
|
||||
while (true) {
|
||||
const id = await question('Enter packageId:');
|
||||
const app = list.find(v=>v.id === (id|0));
|
||||
const id = await question('Enter Package Id:');
|
||||
const app = list.find(v => v.id === (id | 0));
|
||||
if (app) {
|
||||
return app;
|
||||
}
|
||||
@@ -42,40 +45,40 @@ export async function choosePackage(appId) {
|
||||
}
|
||||
|
||||
export const commands = {
|
||||
uploadIpa: async function({args}) {
|
||||
uploadIpa: async function({ args }) {
|
||||
const fn = args[0];
|
||||
if (!fn) {
|
||||
throw new Error('Usage: pushy uploadIpa <ipaFile>');
|
||||
}
|
||||
const name = await getIPAVersion(fn);
|
||||
const {appId} = await getSelectedApp('ios');
|
||||
const { appId } = await getSelectedApp('ios');
|
||||
|
||||
const {hash} = await uploadFile(fn);
|
||||
const { hash } = await uploadFile(fn);
|
||||
|
||||
const {id} = await post(`/app/${appId}/package/create`, {
|
||||
const { id } = await post(`/app/${appId}/package/create`, {
|
||||
name,
|
||||
hash,
|
||||
});
|
||||
console.log(`Ipa uploaded: ${id}`);
|
||||
},
|
||||
uploadApk: async function({args}) {
|
||||
uploadApk: async function({ args }) {
|
||||
const fn = args[0];
|
||||
if (!fn) {
|
||||
throw new Error('Usage: pushy uploadApk <apkFile>');
|
||||
}
|
||||
const name = await getApkVersion(fn);
|
||||
const {appId} = await getSelectedApp('android');
|
||||
const { appId } = await getSelectedApp('android');
|
||||
|
||||
const {hash} = await uploadFile(fn);
|
||||
const { hash } = await uploadFile(fn);
|
||||
|
||||
const {id} = await post(`/app/${appId}/package/create`, {
|
||||
const { id } = await post(`/app/${appId}/package/create`, {
|
||||
name,
|
||||
hash,
|
||||
});
|
||||
console.log(`Apk uploaded: ${id}`);
|
||||
},
|
||||
packages: async function({options}) {
|
||||
const platform = checkPlatform(options.platform || await question('Platform(ios/android):'));
|
||||
packages: async function({ options }) {
|
||||
const platform = checkPlatform(options.platform || (await question('Platform(ios/android):')));
|
||||
const { appId } = await getSelectedApp(platform);
|
||||
await listPackage(appId);
|
||||
},
|
||||
|
@@ -3,7 +3,7 @@
|
||||
*/
|
||||
|
||||
import * as path from 'path';
|
||||
import * as fs from 'fs';
|
||||
import * as fs from 'fs-extra';
|
||||
import ApkReader from 'node-apk-parser';
|
||||
import ipaReader from './ipaReader';
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "react-native-update",
|
||||
"version": "5.1.7",
|
||||
"version": "5.2.9",
|
||||
"description": "react-native hot update",
|
||||
"main": "lib/index.js",
|
||||
"scripts": {
|
||||
@@ -30,17 +30,17 @@
|
||||
"dependencies": {
|
||||
"cli-arguments": "^0.2.1",
|
||||
"decompress-zip": "^0.3.1",
|
||||
"fs-promise": "^0.4.1",
|
||||
"fs-extra": "^8.1.0",
|
||||
"glob": "^7.1.2",
|
||||
"gradle-to-js": "^2.0.0",
|
||||
"isomorphic-fetch": "^2.2.1",
|
||||
"mkdir-recursive": "^0.2.1",
|
||||
"node-apk-parser": "^0.2.3",
|
||||
"progress": "^1.1.8",
|
||||
"read": "^1.0.7",
|
||||
"request": "^2.69.0",
|
||||
"rimraf": "^2.6.2",
|
||||
"simple-plist": "^0.3.0",
|
||||
"temporary": "^0.0.8",
|
||||
"tty-table": "^2.7.0",
|
||||
"yauzl": "2.4.1",
|
||||
"yazl": "2.3.0"
|
||||
},
|
||||
|
2
react-native-pushy-cli/src/cli.js
vendored
2
react-native-pushy-cli/src/cli.js
vendored
@@ -4,7 +4,7 @@
|
||||
*/
|
||||
|
||||
import * as path from 'path';
|
||||
import * as fs from 'fs-promise';
|
||||
import * as fs from 'fs-extra';
|
||||
|
||||
const CLI_MODULE_PATH = function() {
|
||||
return path.resolve(
|
||||
|
32
react-native-update.podspec
Normal file
32
react-native-update.podspec
Normal file
@@ -0,0 +1,32 @@
|
||||
require 'json'
|
||||
|
||||
package = JSON.parse(File.read(File.join(__dir__, 'package.json')))
|
||||
|
||||
Pod::Spec.new do |s|
|
||||
s.name = package['name']
|
||||
s.version = package['version']
|
||||
s.summary = package['description']
|
||||
s.license = package['license']
|
||||
|
||||
s.authors = package['author']
|
||||
s.homepage = package['homepage']
|
||||
|
||||
s.platform = :ios, "7.0"
|
||||
s.source = { :git => 'https://github.com/reactnativecn/react-native-pushy.git', :tag => '#{s.version}' }
|
||||
s.libraries = 'bz2', 'z'
|
||||
s.vendored_libraries = 'RCTHotUpdate/libRCTHotUpdate.a'
|
||||
s.pod_target_xcconfig = { 'USER_HEADER_SEARCH_PATHS' => '"$(SRCROOT)/../node_modules/react-native-update/ios"' }
|
||||
|
||||
s.dependency 'React'
|
||||
s.dependency 'SSZipArchive'
|
||||
|
||||
s.subspec 'RCTHotUpdate' do |ss|
|
||||
ss.source_files = 'ios/RCTHotUpdate/*.{h,m}'
|
||||
ss.public_header_files = ['ios/RCTHotUpdate/RCTHotUpdate.h']
|
||||
end
|
||||
|
||||
s.subspec 'BSDiff' do |ss|
|
||||
ss.source_files = 'ios/RCTHotUpdate/BSDiff/**/*.{h,m,c}'
|
||||
ss.private_header_files = 'ios/RCTHotUpdate/BSDiff/**/*.h'
|
||||
end
|
||||
end
|
484
yarn.lock
484
yarn.lock
@@ -40,13 +40,26 @@ ansi-regex@^2.0.0:
|
||||
version "2.1.1"
|
||||
resolved "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
|
||||
|
||||
ansi-regex@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
|
||||
integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
|
||||
|
||||
ansi-regex@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
|
||||
integrity sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=
|
||||
|
||||
ansi-styles@^2.2.1:
|
||||
version "2.2.1"
|
||||
resolved "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
|
||||
|
||||
any-promise@^1.0.0:
|
||||
version "1.3.0"
|
||||
resolved "http://registry.npm.taobao.org/any-promise/download/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
|
||||
ansi-styles@^3.2.1:
|
||||
version "3.2.1"
|
||||
resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
|
||||
integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=
|
||||
dependencies:
|
||||
color-convert "^1.9.0"
|
||||
|
||||
anymatch@^1.3.0:
|
||||
version "1.3.0"
|
||||
@@ -593,6 +606,13 @@ breakable@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "http://registry.npm.taobao.org/breakable/download/breakable-1.0.0.tgz#784a797915a38ead27bad456b5572cb4bbaa78c1"
|
||||
|
||||
breakword@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.npm.taobao.org/breakword/download/breakword-1.0.3.tgz#71e091bbb78bb4ef003cf3ed2b2e062c6927f7dd"
|
||||
integrity sha1-ceCRu7eLtO8APPPtKy4GLGkn990=
|
||||
dependencies:
|
||||
wcwidth "^1.0.1"
|
||||
|
||||
buffer-crc32@~0.2.3:
|
||||
version "0.2.13"
|
||||
resolved "http://registry.npm.taobao.org/buffer-crc32/download/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
|
||||
@@ -609,6 +629,11 @@ camelcase@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "http://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
|
||||
|
||||
camelcase@^5.0.0:
|
||||
version "5.3.1"
|
||||
resolved "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
|
||||
integrity sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=
|
||||
|
||||
caseless@~0.11.0:
|
||||
version "0.11.0"
|
||||
resolved "http://registry.npm.taobao.org/caseless/download/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
|
||||
@@ -636,6 +661,15 @@ chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1:
|
||||
strip-ansi "^3.0.0"
|
||||
supports-color "^2.0.0"
|
||||
|
||||
chalk@^2.4.2:
|
||||
version "2.4.2"
|
||||
resolved "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
|
||||
integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=
|
||||
dependencies:
|
||||
ansi-styles "^3.2.1"
|
||||
escape-string-regexp "^1.0.5"
|
||||
supports-color "^5.3.0"
|
||||
|
||||
chokidar@^1.6.1:
|
||||
version "1.6.1"
|
||||
resolved "http://registry.npm.taobao.org/chokidar/download/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2"
|
||||
@@ -663,10 +697,36 @@ cliui@^2.1.0:
|
||||
right-align "^0.1.1"
|
||||
wordwrap "0.0.2"
|
||||
|
||||
cliui@^4.0.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.npm.taobao.org/cliui/download/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
|
||||
integrity sha1-NIQi2+gtgAswIu709qwQvy5NG0k=
|
||||
dependencies:
|
||||
string-width "^2.1.1"
|
||||
strip-ansi "^4.0.0"
|
||||
wrap-ansi "^2.0.0"
|
||||
|
||||
clone@^1.0.2:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclone%2Fdownload%2Fclone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
|
||||
integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
|
||||
|
||||
code-point-at@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "http://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
|
||||
|
||||
color-convert@^1.9.0:
|
||||
version "1.9.3"
|
||||
resolved "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
|
||||
integrity sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=
|
||||
dependencies:
|
||||
color-name "1.1.3"
|
||||
|
||||
color-name@1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
|
||||
integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
|
||||
|
||||
combined-stream@^1.0.5, combined-stream@~1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
|
||||
@@ -717,12 +777,50 @@ core-util-is@~1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
||||
|
||||
cross-spawn@^6.0.0:
|
||||
version "6.0.5"
|
||||
resolved "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
|
||||
integrity sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=
|
||||
dependencies:
|
||||
nice-try "^1.0.4"
|
||||
path-key "^2.0.1"
|
||||
semver "^5.5.0"
|
||||
shebang-command "^1.2.0"
|
||||
which "^1.2.9"
|
||||
|
||||
cryptiles@2.x.x:
|
||||
version "2.0.5"
|
||||
resolved "http://registry.npm.taobao.org/cryptiles/download/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
|
||||
dependencies:
|
||||
boom "2.x.x"
|
||||
|
||||
csv-generate@^2.2.2:
|
||||
version "2.2.2"
|
||||
resolved "https://registry.npm.taobao.org/csv-generate/download/csv-generate-2.2.2.tgz#c37808c5f3ead2deec940794073dd32d492adfd1"
|
||||
integrity sha1-w3gIxfPq0t7slAeUBz3TLUkq39E=
|
||||
|
||||
csv-parse@^3.1.2:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.npm.taobao.org/csv-parse/download/csv-parse-3.2.0.tgz#9043b5921e7ecd5e3110947df1ef00d290dbeca7"
|
||||
integrity sha1-kEO1kh5+zV4xEJR98e8A0pDb7Kc=
|
||||
|
||||
csv-stringify@^4.3.1:
|
||||
version "4.3.1"
|
||||
resolved "https://registry.npm.taobao.org/csv-stringify/download/csv-stringify-4.3.1.tgz#7bee36f746ef555dd481a735a9e2938965f8478b"
|
||||
integrity sha1-e+4290bvVV3Ugac1qeKTiWX4R4s=
|
||||
dependencies:
|
||||
lodash.get "~4.4.2"
|
||||
|
||||
csv@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npm.taobao.org/csv/download/csv-4.0.0.tgz#c7de44b9a0fd47f7a10db24064519f642a7ce92d"
|
||||
integrity sha1-x95EuaD9R/ehDbJAZFGfZCp86S0=
|
||||
dependencies:
|
||||
csv-generate "^2.2.2"
|
||||
csv-parse "^3.1.2"
|
||||
csv-stringify "^4.3.1"
|
||||
stream-transform "^1.0.7"
|
||||
|
||||
dashdash@^1.12.0:
|
||||
version "1.14.1"
|
||||
resolved "http://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
|
||||
@@ -745,7 +843,7 @@ debug@~2.2.0:
|
||||
dependencies:
|
||||
ms "0.7.1"
|
||||
|
||||
decamelize@^1.0.0:
|
||||
decamelize@^1.0.0, decamelize@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
|
||||
|
||||
@@ -765,6 +863,13 @@ deep-extend@~0.4.0:
|
||||
version "0.4.1"
|
||||
resolved "http://registry.npm.taobao.org/deep-extend/download/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253"
|
||||
|
||||
defaults@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.npm.taobao.org/defaults/download/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
|
||||
integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=
|
||||
dependencies:
|
||||
clone "^1.0.2"
|
||||
|
||||
defined@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "http://registry.npm.taobao.org/defined/download/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
|
||||
@@ -825,7 +930,14 @@ encoding@^0.1.11:
|
||||
dependencies:
|
||||
iconv-lite "~0.4.13"
|
||||
|
||||
escape-string-regexp@^1.0.2:
|
||||
end-of-stream@^1.1.0:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
|
||||
integrity sha1-7SljTRm6ukY7bOa4CjchPqtx7EM=
|
||||
dependencies:
|
||||
once "^1.4.0"
|
||||
|
||||
escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
||||
|
||||
@@ -845,6 +957,19 @@ esutils@^2.0.0, esutils@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "http://registry.npm.taobao.org/esutils/download/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
|
||||
|
||||
execa@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
|
||||
integrity sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=
|
||||
dependencies:
|
||||
cross-spawn "^6.0.0"
|
||||
get-stream "^4.0.0"
|
||||
is-stream "^1.1.0"
|
||||
npm-run-path "^2.0.0"
|
||||
p-finally "^1.0.0"
|
||||
signal-exit "^3.0.0"
|
||||
strip-eof "^1.0.0"
|
||||
|
||||
expand-brackets@^0.1.4:
|
||||
version "0.1.5"
|
||||
resolved "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
|
||||
@@ -891,6 +1016,13 @@ fill-range@^2.1.0:
|
||||
repeat-element "^1.1.2"
|
||||
repeat-string "^1.5.2"
|
||||
|
||||
find-up@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz?cache=0&sync_timestamp=1560752454611&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
|
||||
integrity sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=
|
||||
dependencies:
|
||||
locate-path "^3.0.0"
|
||||
|
||||
for-in@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "http://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
|
||||
@@ -913,11 +1045,14 @@ form-data@~2.1.1:
|
||||
combined-stream "^1.0.5"
|
||||
mime-types "^2.1.12"
|
||||
|
||||
fs-promise@^0.4.1:
|
||||
version "0.4.1"
|
||||
resolved "http://registry.npm.taobao.org/fs-promise/download/fs-promise-0.4.1.tgz#9d57aed89dbcea0fdb6d4cb9c2044aedd9722efd"
|
||||
fs-extra@^8.1.0:
|
||||
version "8.1.0"
|
||||
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
|
||||
integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
|
||||
dependencies:
|
||||
any-promise "^1.0.0"
|
||||
graceful-fs "^4.2.0"
|
||||
jsonfile "^4.0.0"
|
||||
universalify "^0.1.0"
|
||||
|
||||
fs-readdir-recursive@^0.1.0:
|
||||
version "0.1.2"
|
||||
@@ -978,10 +1113,22 @@ generate-object-property@^1.1.0:
|
||||
dependencies:
|
||||
is-property "^1.0.0"
|
||||
|
||||
get-caller-file@^1.0.1:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
|
||||
integrity sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o=
|
||||
|
||||
get-stdin@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "http://registry.npm.taobao.org/get-stdin/download/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
|
||||
|
||||
get-stream@^4.0.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
|
||||
integrity sha1-wbJVV189wh1Zv8ec09K0axw6VLU=
|
||||
dependencies:
|
||||
pump "^3.0.0"
|
||||
|
||||
getpass@^0.1.1:
|
||||
version "0.1.6"
|
||||
resolved "http://registry.npm.taobao.org/getpass/download/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6"
|
||||
@@ -1045,10 +1192,22 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.4:
|
||||
version "4.1.11"
|
||||
resolved "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
|
||||
|
||||
graceful-fs@^4.1.6, graceful-fs@^4.2.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b"
|
||||
integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==
|
||||
|
||||
"graceful-readlink@>= 1.0.0":
|
||||
version "1.0.1"
|
||||
resolved "http://registry.npm.taobao.org/graceful-readlink/download/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
|
||||
|
||||
gradle-to-js@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npm.taobao.org/gradle-to-js/download/gradle-to-js-2.0.0.tgz#b790a97376d3d713105a086590e569610f7e6bc4"
|
||||
integrity sha1-t5Cpc3bT1xMQWghlkOVpYQ9+a8Q=
|
||||
dependencies:
|
||||
lodash.merge "4.6.2"
|
||||
|
||||
har-validator@~2.0.6:
|
||||
version "2.0.6"
|
||||
resolved "http://registry.npm.taobao.org/har-validator/download/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
|
||||
@@ -1064,6 +1223,11 @@ has-ansi@^2.0.0:
|
||||
dependencies:
|
||||
ansi-regex "^2.0.0"
|
||||
|
||||
has-flag@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
|
||||
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
|
||||
|
||||
has-unicode@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "http://registry.npm.taobao.org/has-unicode/download/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
|
||||
@@ -1132,6 +1296,11 @@ invert-kv@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "http://registry.npm.taobao.org/invert-kv/download/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
|
||||
|
||||
invert-kv@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npm.taobao.org/invert-kv/download/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02"
|
||||
integrity sha1-c5P1r6Weyf9fZ6J2INEcIm4+7AI=
|
||||
|
||||
is-binary-path@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "http://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
|
||||
@@ -1172,6 +1341,11 @@ is-fullwidth-code-point@^1.0.0:
|
||||
dependencies:
|
||||
number-is-nan "^1.0.0"
|
||||
|
||||
is-fullwidth-code-point@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
|
||||
integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
|
||||
|
||||
is-glob@^2.0.0, is-glob@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "http://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
|
||||
@@ -1211,7 +1385,7 @@ is-property@^1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "http://registry.npm.taobao.org/is-property/download/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
|
||||
|
||||
is-stream@^1.0.1:
|
||||
is-stream@^1.0.1, is-stream@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "http://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
|
||||
|
||||
@@ -1227,6 +1401,11 @@ isarray@1.0.0, isarray@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
|
||||
|
||||
isexe@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||
integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
|
||||
|
||||
isobject@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "http://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
|
||||
@@ -1286,6 +1465,13 @@ json5@^0.5.0:
|
||||
version "0.5.1"
|
||||
resolved "http://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
|
||||
|
||||
jsonfile@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
|
||||
integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
|
||||
optionalDependencies:
|
||||
graceful-fs "^4.1.6"
|
||||
|
||||
jsonpointer@^4.0.0:
|
||||
version "4.0.1"
|
||||
resolved "http://registry.npm.taobao.org/jsonpointer/download/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
|
||||
@@ -1314,10 +1500,25 @@ lcid@^1.0.0:
|
||||
dependencies:
|
||||
invert-kv "^1.0.0"
|
||||
|
||||
lcid@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npm.taobao.org/lcid/download/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf"
|
||||
integrity sha1-bvXS32DlL4LrIopMNz6NHzlyU88=
|
||||
dependencies:
|
||||
invert-kv "^2.0.0"
|
||||
|
||||
leven@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "http://registry.npm.taobao.org/leven/download/leven-1.0.2.tgz#9144b6eebca5f1d0680169f1a6770dcea60b75c3"
|
||||
|
||||
locate-path@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
|
||||
integrity sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=
|
||||
dependencies:
|
||||
p-locate "^3.0.0"
|
||||
path-exists "^3.0.0"
|
||||
|
||||
lodash._baseassign@^3.0.0:
|
||||
version "3.2.0"
|
||||
resolved "http://registry.npm.taobao.org/lodash._baseassign/download/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e"
|
||||
@@ -1379,6 +1580,11 @@ lodash.assign@^3.2.0:
|
||||
lodash._createassigner "^3.0.0"
|
||||
lodash.keys "^3.0.0"
|
||||
|
||||
lodash.get@~4.4.2:
|
||||
version "4.4.2"
|
||||
resolved "https://registry.npm.taobao.org/lodash.get/download/lodash.get-4.4.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash.get%2Fdownload%2Flodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
|
||||
integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=
|
||||
|
||||
lodash.isarguments@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "http://registry.npm.taobao.org/lodash.isarguments/download/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
|
||||
@@ -1402,6 +1608,11 @@ lodash.keysin@^3.0.0:
|
||||
lodash.isarguments "^3.0.0"
|
||||
lodash.isarray "^3.0.0"
|
||||
|
||||
lodash.merge@4.6.2:
|
||||
version "4.6.2"
|
||||
resolved "https://registry.npm.taobao.org/lodash.merge/download/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
|
||||
integrity sha1-VYqlO0O2YeGSWgr9+japoQhf5Xo=
|
||||
|
||||
lodash.pick@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "http://registry.npm.taobao.org/lodash.pick/download/lodash.pick-3.1.0.tgz#f252a855b2046b61bcd3904b26f76bd2efc65550"
|
||||
@@ -1434,6 +1645,22 @@ loose-envify@^1.0.0:
|
||||
dependencies:
|
||||
js-tokens "^3.0.0"
|
||||
|
||||
map-age-cleaner@^0.1.1:
|
||||
version "0.1.3"
|
||||
resolved "https://registry.npm.taobao.org/map-age-cleaner/download/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a"
|
||||
integrity sha1-fVg6cwZDTAVf5HSw9FB45uG0uSo=
|
||||
dependencies:
|
||||
p-defer "^1.0.0"
|
||||
|
||||
mem@^4.0.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.npm.taobao.org/mem/download/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178"
|
||||
integrity sha1-Rhr0l7xK4JYIzbLmDu+2m/90QXg=
|
||||
dependencies:
|
||||
map-age-cleaner "^0.1.1"
|
||||
mimic-fn "^2.0.0"
|
||||
p-is-promise "^2.0.0"
|
||||
|
||||
micromatch@^2.1.5:
|
||||
version "2.3.11"
|
||||
resolved "http://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
|
||||
@@ -1462,6 +1689,11 @@ mime-types@^2.1.12, mime-types@~2.1.7:
|
||||
dependencies:
|
||||
mime-db "~1.26.0"
|
||||
|
||||
mimic-fn@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
|
||||
integrity sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=
|
||||
|
||||
"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2:
|
||||
version "3.0.3"
|
||||
resolved "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
|
||||
@@ -1488,10 +1720,6 @@ minimist@^1.1.0, minimist@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
|
||||
|
||||
mkdir-recursive@^0.2.1:
|
||||
version "0.2.3"
|
||||
resolved "http://registry.npm.taobao.org/mkdir-recursive/download/mkdir-recursive-0.2.3.tgz#056327ff2c973b46e7cbc42376ff0648ccc48a4a"
|
||||
|
||||
"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1:
|
||||
version "0.5.1"
|
||||
resolved "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
|
||||
@@ -1518,6 +1746,11 @@ nan@^2.3.0:
|
||||
version "2.5.1"
|
||||
resolved "http://registry.npm.taobao.org/nan/download/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2"
|
||||
|
||||
nice-try@^1.0.4:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.npm.taobao.org/nice-try/download/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
|
||||
integrity sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=
|
||||
|
||||
node-apk-parser@^0.2.3:
|
||||
version "0.2.3"
|
||||
resolved "http://registry.npm.taobao.org/node-apk-parser/download/node-apk-parser-0.2.3.tgz#385a141a6da38de562e5d9f08961bf9724d35fc4"
|
||||
@@ -1562,6 +1795,13 @@ normalize-path@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "http://registry.npm.taobao.org/normalize-path/download/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a"
|
||||
|
||||
npm-run-path@^2.0.0:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
|
||||
integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
|
||||
dependencies:
|
||||
path-key "^2.0.0"
|
||||
|
||||
npmlog@^4.0.1:
|
||||
version "4.0.2"
|
||||
resolved "http://registry.npm.taobao.org/npmlog/download/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f"
|
||||
@@ -1590,7 +1830,7 @@ object.omit@^2.0.0:
|
||||
for-own "^0.1.4"
|
||||
is-extendable "^0.1.1"
|
||||
|
||||
once@^1.3.0:
|
||||
once@^1.3.0, once@^1.3.1, once@^1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
||||
dependencies:
|
||||
@@ -1612,6 +1852,15 @@ os-locale@^1.4.0:
|
||||
dependencies:
|
||||
lcid "^1.0.0"
|
||||
|
||||
os-locale@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.npm.taobao.org/os-locale/download/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a"
|
||||
integrity sha1-qAKm7hfyTBBIOrmTVxnO9O0Wvxo=
|
||||
dependencies:
|
||||
execa "^1.0.0"
|
||||
lcid "^2.0.0"
|
||||
mem "^4.0.0"
|
||||
|
||||
os-tmpdir@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "http://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
|
||||
@@ -1624,6 +1873,40 @@ output-file-sync@^1.1.0:
|
||||
mkdirp "^0.5.1"
|
||||
object-assign "^4.1.0"
|
||||
|
||||
p-defer@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npm.taobao.org/p-defer/download/p-defer-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-defer%2Fdownload%2Fp-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
|
||||
integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=
|
||||
|
||||
p-finally@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
|
||||
integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
|
||||
|
||||
p-is-promise@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npm.taobao.org/p-is-promise/download/p-is-promise-2.1.0.tgz?cache=0&sync_timestamp=1561997559793&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-is-promise%2Fdownload%2Fp-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e"
|
||||
integrity sha1-kYzrrqJIpiz3/6uOO8qMX4gvxC4=
|
||||
|
||||
p-limit@^2.0.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.npm.taobao.org/p-limit/download/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2"
|
||||
integrity sha1-QXyZQeYCepq8ulCS3SkE4lW1+8I=
|
||||
dependencies:
|
||||
p-try "^2.0.0"
|
||||
|
||||
p-locate@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
|
||||
integrity sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=
|
||||
dependencies:
|
||||
p-limit "^2.0.0"
|
||||
|
||||
p-try@^2.0.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
|
||||
integrity sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=
|
||||
|
||||
"package@>= 1.0.0 < 1.2.0":
|
||||
version "1.0.1"
|
||||
resolved "http://registry.npm.taobao.org/package/download/package-1.0.1.tgz#d25a1f99e2506dcb27d6704b83dca8a312e4edcc"
|
||||
@@ -1641,10 +1924,20 @@ path-exists@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "http://registry.npm.taobao.org/path-exists/download/path-exists-1.0.0.tgz#d5a8998eb71ef37a74c34eb0d9eba6e878eea081"
|
||||
|
||||
path-exists@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
|
||||
integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
|
||||
|
||||
path-is-absolute@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
|
||||
|
||||
path-key@^2.0.0, path-key@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
|
||||
integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
|
||||
|
||||
path-parse@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "http://registry.npm.taobao.org/path-parse/download/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
|
||||
@@ -1687,6 +1980,14 @@ progress@^1.1.8:
|
||||
version "1.1.8"
|
||||
resolved "http://registry.npm.taobao.org/progress/download/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
|
||||
|
||||
pump@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
|
||||
integrity sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=
|
||||
dependencies:
|
||||
end-of-stream "^1.1.0"
|
||||
once "^1.3.1"
|
||||
|
||||
punycode@^1.4.1:
|
||||
version "1.4.1"
|
||||
resolved "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
|
||||
@@ -1872,6 +2173,16 @@ request@^2.69.0, request@^2.79.0:
|
||||
tunnel-agent "~0.4.1"
|
||||
uuid "^3.0.0"
|
||||
|
||||
require-directory@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frequire-directory%2Fdownload%2Frequire-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
|
||||
integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
|
||||
|
||||
require-main-filename@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frequire-main-filename%2Fdownload%2Frequire-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
|
||||
integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
|
||||
|
||||
resolve@^1.1.6:
|
||||
version "1.3.2"
|
||||
resolved "http://registry.npm.taobao.org/resolve/download/resolve-1.3.2.tgz#1f0442c9e0cbb8136e87b9305f932f46c7f28235"
|
||||
@@ -1890,23 +2201,22 @@ rimraf@2:
|
||||
dependencies:
|
||||
glob "^7.0.5"
|
||||
|
||||
rimraf@^2.6.2:
|
||||
version "2.6.2"
|
||||
resolved "http://registry.npm.taobao.org/rimraf/download/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
|
||||
dependencies:
|
||||
glob "^7.0.5"
|
||||
|
||||
rimraf@~2.5.1, rimraf@~2.5.4:
|
||||
version "2.5.4"
|
||||
resolved "http://registry.npm.taobao.org/rimraf/download/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
|
||||
dependencies:
|
||||
glob "^7.0.5"
|
||||
|
||||
semver@^5.5.0:
|
||||
version "5.7.0"
|
||||
resolved "https://registry.npm.taobao.org/semver/download/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b"
|
||||
integrity sha1-eQp89v6lRZuslhELKbYEEtyP+Ws=
|
||||
|
||||
semver@~5.3.0:
|
||||
version "5.3.0"
|
||||
resolved "http://registry.npm.taobao.org/semver/download/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
|
||||
|
||||
set-blocking@~2.0.0:
|
||||
set-blocking@^2.0.0, set-blocking@~2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "http://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
|
||||
|
||||
@@ -1914,6 +2224,13 @@ set-immediate-shim@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "http://registry.npm.taobao.org/set-immediate-shim/download/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
|
||||
|
||||
shebang-command@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
|
||||
integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
|
||||
dependencies:
|
||||
shebang-regex "^1.0.0"
|
||||
|
||||
shebang-regex@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "http://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
|
||||
@@ -1942,6 +2259,15 @@ slash@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "http://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
|
||||
|
||||
smartwrap@^1.0.11:
|
||||
version "1.0.11"
|
||||
resolved "https://registry.npm.taobao.org/smartwrap/download/smartwrap-1.0.11.tgz#ee8f85878bfac89c1fa4da33e0877f729a8e2a74"
|
||||
integrity sha1-7o+Fh4v6yJwfpNoz4Id/cpqOKnQ=
|
||||
dependencies:
|
||||
breakword "^1.0.3"
|
||||
wcwidth "^1.0.1"
|
||||
yargs "^12.0.5"
|
||||
|
||||
sntp@1.x.x:
|
||||
version "1.0.9"
|
||||
resolved "http://registry.npm.taobao.org/sntp/download/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
|
||||
@@ -1993,6 +2319,11 @@ stream-buffers@~2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "http://registry.npm.taobao.org/stream-buffers/download/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4"
|
||||
|
||||
stream-transform@^1.0.7:
|
||||
version "1.0.8"
|
||||
resolved "https://registry.npm.taobao.org/stream-transform/download/stream-transform-1.0.8.tgz#54f721122d310eca855a16c97939881ab5bbb76c"
|
||||
integrity sha1-VPchEi0xDsqFWhbJeTmIGrW7t2w=
|
||||
|
||||
string-width@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "http://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
|
||||
@@ -2001,6 +2332,14 @@ string-width@^1.0.1:
|
||||
is-fullwidth-code-point "^1.0.0"
|
||||
strip-ansi "^3.0.0"
|
||||
|
||||
string-width@^2.0.0, string-width@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
|
||||
integrity sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=
|
||||
dependencies:
|
||||
is-fullwidth-code-point "^2.0.0"
|
||||
strip-ansi "^4.0.0"
|
||||
|
||||
string_decoder@~0.10.x:
|
||||
version "0.10.31"
|
||||
resolved "http://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
|
||||
@@ -2023,6 +2362,25 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1:
|
||||
dependencies:
|
||||
ansi-regex "^2.0.0"
|
||||
|
||||
strip-ansi@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
|
||||
integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
|
||||
dependencies:
|
||||
ansi-regex "^3.0.0"
|
||||
|
||||
strip-ansi@^5.0.0:
|
||||
version "5.2.0"
|
||||
resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
|
||||
integrity sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=
|
||||
dependencies:
|
||||
ansi-regex "^4.1.0"
|
||||
|
||||
strip-eof@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
|
||||
integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
|
||||
|
||||
strip-json-comments@~2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "http://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
|
||||
@@ -2031,6 +2389,13 @@ supports-color@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
|
||||
|
||||
supports-color@^5.3.0:
|
||||
version "5.5.0"
|
||||
resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
|
||||
integrity sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=
|
||||
dependencies:
|
||||
has-flag "^3.0.0"
|
||||
|
||||
tar-pack@~3.3.0:
|
||||
version "3.3.0"
|
||||
resolved "http://registry.npm.taobao.org/tar-pack/download/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae"
|
||||
@@ -2094,6 +2459,18 @@ tryor@~0.1.2:
|
||||
version "0.1.2"
|
||||
resolved "http://registry.npm.taobao.org/tryor/download/tryor-0.1.2.tgz#8145e4ca7caff40acde3ccf946e8b8bb75b4172b"
|
||||
|
||||
tty-table@^2.7.0:
|
||||
version "2.7.0"
|
||||
resolved "https://registry.npm.taobao.org/tty-table/download/tty-table-2.7.0.tgz#0e03b37435a040a9ed8f783a9bbc9a9660921e9f"
|
||||
integrity sha1-DgOzdDWgQKntj3g6m7yalmCSHp8=
|
||||
dependencies:
|
||||
chalk "^2.4.2"
|
||||
csv "^4.0.0"
|
||||
smartwrap "^1.0.11"
|
||||
strip-ansi "^5.0.0"
|
||||
wcwidth "^1.0.1"
|
||||
yargs "^12.0.5"
|
||||
|
||||
tunnel-agent@~0.4.1:
|
||||
version "0.4.3"
|
||||
resolved "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
|
||||
@@ -2106,6 +2483,11 @@ uid-number@~0.0.6:
|
||||
version "0.0.6"
|
||||
resolved "http://registry.npm.taobao.org/uid-number/download/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
|
||||
|
||||
universalify@^0.1.0:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
|
||||
integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
|
||||
|
||||
user-home@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "http://registry.npm.taobao.org/user-home/download/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
|
||||
@@ -2130,10 +2512,29 @@ verror@1.3.6:
|
||||
dependencies:
|
||||
extsprintf "1.0.2"
|
||||
|
||||
wcwidth@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npm.taobao.org/wcwidth/download/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
|
||||
integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=
|
||||
dependencies:
|
||||
defaults "^1.0.3"
|
||||
|
||||
whatwg-fetch@>=0.10.0:
|
||||
version "2.0.2"
|
||||
resolved "http://registry.npm.taobao.org/whatwg-fetch/download/whatwg-fetch-2.0.2.tgz#fe294d1d89e36c5be8b3195057f2e4bc74fc980e"
|
||||
|
||||
which-module@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich-module%2Fdownload%2Fwhich-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
|
||||
integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
|
||||
|
||||
which@^1.2.9:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
|
||||
integrity sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=
|
||||
dependencies:
|
||||
isexe "^2.0.0"
|
||||
|
||||
wide-align@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "http://registry.npm.taobao.org/wide-align/download/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad"
|
||||
@@ -2148,6 +2549,14 @@ wordwrap@0.0.2:
|
||||
version "0.0.2"
|
||||
resolved "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
|
||||
|
||||
wrap-ansi@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-2.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
|
||||
integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=
|
||||
dependencies:
|
||||
string-width "^1.0.1"
|
||||
strip-ansi "^3.0.1"
|
||||
|
||||
wrappy@1:
|
||||
version "1.0.2"
|
||||
resolved "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||
@@ -2168,6 +2577,37 @@ y18n@^3.2.0:
|
||||
version "3.2.1"
|
||||
resolved "http://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
|
||||
|
||||
"y18n@^3.2.1 || ^4.0.0":
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npm.taobao.org/y18n/download/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
|
||||
integrity sha1-le+U+F7MgdAHwmThkKEg8KPIVms=
|
||||
|
||||
yargs-parser@^11.1.1:
|
||||
version "11.1.1"
|
||||
resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4"
|
||||
integrity sha1-h5oIZZc7yp9rq1y987HGfsfTvPQ=
|
||||
dependencies:
|
||||
camelcase "^5.0.0"
|
||||
decamelize "^1.2.0"
|
||||
|
||||
yargs@^12.0.5:
|
||||
version "12.0.5"
|
||||
resolved "https://registry.npm.taobao.org/yargs/download/yargs-12.0.5.tgz?cache=0&sync_timestamp=1560133159069&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13"
|
||||
integrity sha1-BfWZe2CWR7ZPZrgeO0sQo2jnrRM=
|
||||
dependencies:
|
||||
cliui "^4.0.0"
|
||||
decamelize "^1.2.0"
|
||||
find-up "^3.0.0"
|
||||
get-caller-file "^1.0.1"
|
||||
os-locale "^3.0.0"
|
||||
require-directory "^2.1.1"
|
||||
require-main-filename "^1.0.1"
|
||||
set-blocking "^2.0.0"
|
||||
string-width "^2.0.0"
|
||||
which-module "^2.0.0"
|
||||
y18n "^3.2.1 || ^4.0.0"
|
||||
yargs-parser "^11.1.1"
|
||||
|
||||
yargs@~3.27.0:
|
||||
version "3.27.0"
|
||||
resolved "http://registry.npm.taobao.org/yargs/download/yargs-3.27.0.tgz#21205469316e939131d59f2da0c6d7f98221ea40"
|
||||
|
Reference in New Issue
Block a user