diff --git a/vendor/autoload.php b/vendor/autoload.php
index c1f44abfd..99dfaf6a3 100644
--- a/vendor/autoload.php
+++ b/vendor/autoload.php
@@ -4,4 +4,4 @@
 
 require_once __DIR__ . '/composer/autoload_real.php';
 
-return ComposerAutoloaderInit74cb58233dd200a2c5d7497ec6ecdfbc::getLoader();
+return ComposerAutoloaderInitaea5ee4c248b1d18c5a6f14e8651ac7c::getLoader();
diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php
index d469c6c71..dc5096c82 100644
--- a/vendor/composer/autoload_real.php
+++ b/vendor/composer/autoload_real.php
@@ -2,7 +2,7 @@
 
 // autoload_real.php @generated by Composer
 
-class ComposerAutoloaderInit74cb58233dd200a2c5d7497ec6ecdfbc
+class ComposerAutoloaderInitaea5ee4c248b1d18c5a6f14e8651ac7c
 {
     private static $loader;
 
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit74cb58233dd200a2c5d7497ec6ecdfbc
             return self::$loader;
         }
 
-        spl_autoload_register(array('ComposerAutoloaderInit74cb58233dd200a2c5d7497ec6ecdfbc', 'loadClassLoader'), true, true);
+        spl_autoload_register(array('ComposerAutoloaderInitaea5ee4c248b1d18c5a6f14e8651ac7c', 'loadClassLoader'), true, true);
         self::$loader = $loader = new \Composer\Autoload\ClassLoader();
-        spl_autoload_unregister(array('ComposerAutoloaderInit74cb58233dd200a2c5d7497ec6ecdfbc', 'loadClassLoader'));
+        spl_autoload_unregister(array('ComposerAutoloaderInitaea5ee4c248b1d18c5a6f14e8651ac7c', 'loadClassLoader'));
 
         $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
         if ($useStaticLoader) {
             require_once __DIR__ . '/autoload_static.php';
 
-            call_user_func(\Composer\Autoload\ComposerStaticInit74cb58233dd200a2c5d7497ec6ecdfbc::getInitializer($loader));
+            call_user_func(\Composer\Autoload\ComposerStaticInitaea5ee4c248b1d18c5a6f14e8651ac7c::getInitializer($loader));
         } else {
             $map = require __DIR__ . '/autoload_namespaces.php';
             foreach ($map as $namespace => $path) {
@@ -48,19 +48,19 @@ class ComposerAutoloaderInit74cb58233dd200a2c5d7497ec6ecdfbc
         $loader->register(true);
 
         if ($useStaticLoader) {
-            $includeFiles = Composer\Autoload\ComposerStaticInit74cb58233dd200a2c5d7497ec6ecdfbc::$files;
+            $includeFiles = Composer\Autoload\ComposerStaticInitaea5ee4c248b1d18c5a6f14e8651ac7c::$files;
         } else {
             $includeFiles = require __DIR__ . '/autoload_files.php';
         }
         foreach ($includeFiles as $fileIdentifier => $file) {
-            composerRequire74cb58233dd200a2c5d7497ec6ecdfbc($fileIdentifier, $file);
+            composerRequireaea5ee4c248b1d18c5a6f14e8651ac7c($fileIdentifier, $file);
         }
 
         return $loader;
     }
 }
 
-function composerRequire74cb58233dd200a2c5d7497ec6ecdfbc($fileIdentifier, $file)
+function composerRequireaea5ee4c248b1d18c5a6f14e8651ac7c($fileIdentifier, $file)
 {
     if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
         require $file;
diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php
index 6ea13de02..50af5c123 100644
--- a/vendor/composer/autoload_static.php
+++ b/vendor/composer/autoload_static.php
@@ -4,7 +4,7 @@
 
 namespace Composer\Autoload;
 
-class ComposerStaticInit74cb58233dd200a2c5d7497ec6ecdfbc
+class ComposerStaticInitaea5ee4c248b1d18c5a6f14e8651ac7c
 {
     public static $files = array (
         '841780ea2e1d6545ea3a253239d59c05' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/functions.php',
@@ -347,9 +347,9 @@ class ComposerStaticInit74cb58233dd200a2c5d7497ec6ecdfbc
     public static function getInitializer(ClassLoader $loader)
     {
         return \Closure::bind(function () use ($loader) {
-            $loader->prefixLengthsPsr4 = ComposerStaticInit74cb58233dd200a2c5d7497ec6ecdfbc::$prefixLengthsPsr4;
-            $loader->prefixDirsPsr4 = ComposerStaticInit74cb58233dd200a2c5d7497ec6ecdfbc::$prefixDirsPsr4;
-            $loader->classMap = ComposerStaticInit74cb58233dd200a2c5d7497ec6ecdfbc::$classMap;
+            $loader->prefixLengthsPsr4 = ComposerStaticInitaea5ee4c248b1d18c5a6f14e8651ac7c::$prefixLengthsPsr4;
+            $loader->prefixDirsPsr4 = ComposerStaticInitaea5ee4c248b1d18c5a6f14e8651ac7c::$prefixDirsPsr4;
+            $loader->classMap = ComposerStaticInitaea5ee4c248b1d18c5a6f14e8651ac7c::$classMap;
 
         }, null, ClassLoader::class);
     }
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 64c1b2aaa..615b6db4e 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -502,12 +502,12 @@
         "source": {
             "type": "git",
             "url": "https://github.com/zoujingli/ThinkLibrary.git",
-            "reference": "5fae7920d5b8ea47cfc4ed114dc36c4dcc4e8b28"
+            "reference": "71d9d3e9e8dbd2939ccab8af7891c597fd037b15"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/zoujingli/ThinkLibrary/zipball/5fae7920d5b8ea47cfc4ed114dc36c4dcc4e8b28",
-            "reference": "5fae7920d5b8ea47cfc4ed114dc36c4dcc4e8b28",
+            "url": "https://api.github.com/repos/zoujingli/ThinkLibrary/zipball/71d9d3e9e8dbd2939ccab8af7891c597fd037b15",
+            "reference": "71d9d3e9e8dbd2939ccab8af7891c597fd037b15",
             "shasum": "",
             "mirrors": [
                 {
@@ -526,7 +526,7 @@
             "qiniu/php-sdk": "^7.2",
             "topthink/framework": "5.1.*"
         },
-        "time": "2019-07-18T03:17:34+00:00",
+        "time": "2019-07-19T03:22:49+00:00",
         "type": "library",
         "installation-source": "dist",
         "autoload": {
diff --git a/vendor/zoujingli/think-library/src/command/Sync.php b/vendor/zoujingli/think-library/src/command/Sync.php
index ea5fff1f3..d0bddae04 100644
--- a/vendor/zoujingli/think-library/src/command/Sync.php
+++ b/vendor/zoujingli/think-library/src/command/Sync.php
@@ -20,12 +20,17 @@ use think\console\Input;
 use think\console\Output;
 
 /**
- * 文件比对支持
+ * 文件比对同步支持
  * Class Sync
  * @package library\command
  */
 class Sync extends Command
 {
+    /**
+     * 基础URL地址
+     * @var string
+     */
+    protected $uri;
 
     /**
      * 当前Admin版本号
@@ -33,12 +38,6 @@ class Sync extends Command
      */
     protected $version;
 
-    /**
-     * 基础URL地址
-     * @var string
-     */
-    protected $baseUri;
-
     /**
      * 指定更新模块
      * @var array
@@ -53,70 +52,31 @@ class Sync extends Command
     {
         $this->version = config('app.thinkadmin_ver');
         if (empty($this->version)) $this->version = 'v4';
-        $this->baseUri = "https://{$this->version}.thinkadmin.top";
-        parent::__construct($name);
+        $this->uri = "https://{$this->version}.thinkadmin.top";
+        if (is_string($name) && !empty($name)) {
+            parent::__construct($name);
+        }
     }
 
     /**
      * 执行指令
      * @param Input $input
      * @param Output $output
+     * @param array $files
      */
-    protected function execute(Input $input, Output $output)
+    protected function execute(Input $input, Output $output, $files = [])
     {
-        $output->comment('start updating difference files');
-        foreach ($this->diff() as $file) foreach ($this->modules as $module) {
-            if (stripos($file['name'], $module) === 0) {
-                $this->syncFile($file, $output);
-                break;
-            }
-        }
-        $output->comment('update difference file completion');
-    }
-
-    /**
-     * 同步所有差异文件
-     */
-    public function sync()
-    {
-        foreach ($this->diff() as $file) {
-            $this->syncFile($file, new Output());
-        }
-    }
-
-    /**
-     * 同步指定文件
-     * @param array $file
-     * @param Output $output
-     */
-    private function syncFile($file, $output)
-    {
-        if (in_array($file['type'], ['add', 'mod'])) {
-            if ($this->down(encode($file['name']))) {
-                $output->writeln("{$file['name']} updated successfully.");
-            } else {
-                $output->error("{$file['name']} update failed.");
-            }
-        } elseif (in_array($file['type'], ['del'])) {
-            $realfile = realpath(env('root_path') . $file['name']);
-            if (is_file($realfile) && unlink($realfile)) {
-                $this->removeEmptyDir(dirname($realfile));
-                $output->writeln("{$file['name']} remove successfully.");
-            } else {
-                $output->error("{$file['name']} remove failed.");
-            }
-        }
-    }
-
-    /**
-     * 清理指定的空目录
-     * @param string $dir
-     */
-    private function removeEmptyDir($dir)
-    {
-        if (is_dir($dir) && count(scandir($dir)) === 2) {
-            if (rmdir($dir)) $this->removeEmptyDir(dirname($dir));
+        $output->newLine();
+        $output->comment("=== 准备从代码仓库下载更新{$this->version}版本文件 ===");
+        $output->newLine();
+        foreach ($this->getDiff() as $file) foreach ($this->modules as $module) {
+            if (stripos($file['name'], $module) === 0) $files[] = $file;
         }
+        if (empty($files)) $output->info('--- 本地文件与线上文件一致,无需要下载及更新文件');
+        else foreach ($files as $file) $this->syncFile($file, $output);
+        $output->newLine();
+        $output->comment("=== 从代码仓库下载{$this->version}版本并更新文件成功 ===");
+        $output->newLine();
     }
 
     /**
@@ -126,16 +86,9 @@ class Sync extends Command
     public function build()
     {
         return $this->tree([
-            'think',
-            'config/log.php',
-            'config/cookie.php',
-            'config/template.php',
-            'application/admin',
-            'application/wechat',
-            'application/service',
-            'public/static/plugs',
-            'public/static/theme',
-            'public/static/admin.js',
+            'think', 'config/log.php', 'config/cookie.php', 'config/template.php',
+            'application/admin', 'application/wechat', 'application/service',
+            'public/static/plugs', 'public/static/theme', 'public/static/admin.js',
         ]);
     }
 
@@ -160,13 +113,58 @@ class Sync extends Command
         return ['paths' => $paths, 'ignores' => $ignores, 'list' => $maps];
     }
 
+    /**
+     * 同步所有差异文件
+     */
+    public function sync()
+    {
+        foreach ($this->getDiff() as $file) {
+            $this->syncFile($file, new Output());
+        }
+    }
+
+    /**
+     * 同步指定文件
+     * @param array $file
+     * @param Output $output
+     */
+    private function syncFile($file, $output)
+    {
+        if (in_array($file['type'], ['add', 'mod'])) {
+            if ($this->runDown(encode($file['name']))) {
+                $output->writeln("--- 下载 {$file['name']} 更新成功");
+            } else {
+                $output->error("--- 下载 {$file['name']} 更新失败");
+            }
+        } elseif (in_array($file['type'], ['del'])) {
+            $realfile = realpath(env('root_path') . $file['name']);
+            if (is_file($realfile) && unlink($realfile)) {
+                $this->delEmptyDir(dirname($realfile));
+                $output->writeln("--- 删除 {$file['name']} 文件成功");
+            } else {
+                $output->error("--- 删除 {$file['name']} 文件失败");
+            }
+        }
+    }
+
+    /**
+     * 清理指定的空目录
+     * @param string $dir
+     */
+    private function delEmptyDir($dir)
+    {
+        if (is_dir($dir) && count(scandir($dir)) === 2) {
+            if (rmdir($dir)) $this->delEmptyDir(dirname($dir));
+        }
+    }
+
     /**
      * 两二维数组对比
      * @param array $serve 线上文件列表信息
      * @param array $local 本地文件列表信息
      * @return array
      */
-    public function contrast(array $serve = [], array $local = [])
+    private function contrast(array $serve = [], array $local = [])
     {
         // 数据扁平化
         list($_serve, $_local, $_new) = [[], [], []];
@@ -192,9 +190,9 @@ class Sync extends Command
      * @param string $encode
      * @return boolean|integer
      */
-    public function down($encode)
+    private function runDown($encode)
     {
-        $result = json_decode(http_get("{$this->baseUri}?s=admin/api.update/read/{$encode}"), true);
+        $result = json_decode(http_get("{$this->uri}?s=admin/api.update/read/{$encode}"), true);
         if (empty($result['code'])) return false;
         $pathname = env('root_path') . decode($encode);
         file_exists(dirname($pathname)) || mkdir(dirname($pathname), 0755, true);
@@ -205,9 +203,9 @@ class Sync extends Command
      * 获取文件差异数据
      * @return array
      */
-    public function diff()
+    private function getDiff()
     {
-        $result = json_decode(http_get("{$this->baseUri}?s=/admin/api.update/tree"), true);
+        $result = json_decode(http_get("{$this->uri}?s=/admin/api.update/tree"), true);
         if (empty($result['code'])) return [];
         $new = $this->tree($result['data']['paths'], $result['data']['ignores']);
         return $this->contrast($result['data']['list'], $new['list']);
@@ -241,9 +239,10 @@ class Sync extends Command
      */
     private function getFileInfo($file, $root)
     {
-        $hash = md5(preg_replace('/\s{1,}/', '', file_get_contents($file)));
-        $name = str_replace($root, '', str_replace('\\', '/', realpath($file)));
-        return ['name' => $name, 'hash' => $hash];
+        return [
+            'hash' => md5(preg_replace('/\s{1,}/', '', file_get_contents($file))),
+            'name' => str_replace($root, '', str_replace('\\', '/', realpath($file))),
+        ];
     }
 
 }