Browse Source

wip: support electron

vben 3 years ago
parent
commit
8dfa1778e8

+ 0 - 2
.env

@@ -1,5 +1,3 @@
-PORT = 3100
-
 # port
 VITE_PORT = 3100
 

+ 55 - 55
.github/workflows/ftp-schedule.yml

@@ -1,55 +1,55 @@
-name: schedule-push-to-ftp
-
-# Timed deployment project
-on:
-  push:
-  schedule:
-    - cron: '0 20 * * *'
-
-jobs:
-  schedule-push-to-ftp:
-    runs-on: ubuntu-latest
-    steps:
-      - name: Checkout
-        uses: actions/checkout@v2
-
-      - name: Sed Config Base
-        shell: bash
-        run: |
-          sed -i  's#VITE_PUBLIC_PATH\s*=.*#VITE_PUBLIC_PATH = /next/#g' ./.env.production
-          sed -i  "s#VITE_BUILD_COMPRESS\s*=.*#VITE_BUILD_COMPRESS = 'gzip'#g" ./.env.production
-          cat ./.env.production
-
-      - name: use Node.js 14
-        uses: actions/setup-node@v2.1.2
-        with:
-          node-version: '14.x'
-
-      - name: Get yarn cache
-        id: yarn-cache
-        run: echo "::set-output name=dir::$(yarn cache dir)"
-
-      - name: Cache dependencies
-        uses: actions/cache@v2
-        with:
-          path: ${{ steps.yarn-cache.outputs.dir }}
-          key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
-          restore-keys: |
-            ${{ runner.os }}-yarn-
-
-      - name: Build
-        run: |
-          yarn install
-          yarn run build
-
-      - name: Deploy
-        uses: SamKirkland/FTP-Deploy-Action@2.0.0
-        env:
-          FTP_SERVER: ${{ secrets.FTP_SERVER }}
-          FTP_USERNAME: ${{ secrets.FTP_USERNAME }}
-          FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }}
-          METHOD: sftp
-          PORT: ${{ secrets.FTP_PORT }}
-          LOCAL_DIR: dist
-          REMOTE_DIR: /srv/www/vben-admin
-          ARGS: --delete --verbose --parallel=80
+# name: schedule-push-to-ftp
+
+# # Timed deployment project
+# on:
+#   push:
+#   schedule:
+#     - cron: '0 20 * * *'
+
+# jobs:
+#   schedule-push-to-ftp:
+#     runs-on: ubuntu-latest
+#     steps:
+#       - name: Checkout
+#         uses: actions/checkout@v2
+
+#       - name: Sed Config Base
+#         shell: bash
+#         run: |
+#           sed -i  's#VITE_PUBLIC_PATH\s*=.*#VITE_PUBLIC_PATH = /next/#g' ./.env.production
+#           sed -i  "s#VITE_BUILD_COMPRESS\s*=.*#VITE_BUILD_COMPRESS = 'gzip'#g" ./.env.production
+#           cat ./.env.production
+
+#       - name: use Node.js 14
+#         uses: actions/setup-node@v2.1.2
+#         with:
+#           node-version: '14.x'
+
+#       - name: Get yarn cache
+#         id: yarn-cache
+#         run: echo "::set-output name=dir::$(yarn cache dir)"
+
+#       - name: Cache dependencies
+#         uses: actions/cache@v2
+#         with:
+#           path: ${{ steps.yarn-cache.outputs.dir }}
+#           key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
+#           restore-keys: |
+#             ${{ runner.os }}-yarn-
+
+#       - name: Build
+#         run: |
+#           yarn install
+#           yarn run build
+
+#       - name: Deploy
+#         uses: SamKirkland/FTP-Deploy-Action@2.0.0
+#         env:
+#           FTP_SERVER: ${{ secrets.FTP_SERVER }}
+#           FTP_USERNAME: ${{ secrets.FTP_USERNAME }}
+#           FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }}
+#           METHOD: sftp
+#           PORT: ${{ secrets.FTP_PORT }}
+#           LOCAL_DIR: dist
+#           REMOTE_DIR: /srv/www/vben-admin
+#           ARGS: --delete --verbose --parallel=80

+ 13 - 13
script/rollup.config.js → build/config/rollupElectronConfig.ts

@@ -1,22 +1,22 @@
-const path = require('path');
-const { nodeResolve } = require('@rollup/plugin-node-resolve');
-const commonjs = require('@rollup/plugin-commonjs');
-const esbuild = require('rollup-plugin-esbuild');
-const alias = require('@rollup/plugin-alias');
-const json = require('@rollup/plugin-json');
+import path from 'path';
+import { RollupOptions } from 'rollup';
+import { nodeResolve } from '@rollup/plugin-node-resolve';
+import commonjs from '@rollup/plugin-commonjs';
+import esbuild from 'rollup-plugin-esbuild';
+import alias from '@rollup/plugin-alias';
+import json from '@rollup/plugin-json';
 
-module.exports = (env = 'production') => {
-  console.log('环境:' + env);
+export function getRollupOptions(): RollupOptions {
   return {
-    input: path.join(__dirname, '../config/electron/index.ts'),
+    input: path.join(__dirname, '../../electron-main/index.ts'),
     output: {
-      file: path.join(__dirname, '../dist/main/build.js'),
+      file: path.join(__dirname, '../../dist/main/build.js'),
       format: 'cjs',
       name: 'ElectronMainBundle',
       sourcemap: true,
     },
     plugins: [
-      nodeResolve({ jsnext: true, preferBuiltins: true, browser: true }), // 消除碰到 node.js 模块时⚠警告
+      nodeResolve({ preferBuiltins: true, browser: true }), // 消除碰到 node.js 模块时⚠警告
       commonjs(),
       json(),
       esbuild({
@@ -43,7 +43,7 @@ module.exports = (env = 'production') => {
         },
       }),
       alias({
-        entries: [{ find: '@main', replacement: path.join(__dirname, '../src/main') }],
+        entries: [{ find: '/@main/', replacement: path.join(__dirname, '../../electron-main') }],
       }),
     ],
     external: [
@@ -60,4 +60,4 @@ module.exports = (env = 'production') => {
       'electron',
     ],
   };
-};
+}

+ 76 - 0
build/script/compilerElectron.ts

@@ -0,0 +1,76 @@
+import rollup, { OutputOptions } from 'rollup';
+import chalk from 'chalk';
+import ora from 'ora';
+import waitOn from 'wait-on';
+import net from 'net';
+import { URL } from 'url';
+import minimist from 'minimist';
+import electronConnect from 'electron-connect';
+
+import { getRollupOptions } from '../config/rollupElectronConfig';
+
+const argv = minimist(process.argv.slice(2));
+const TAG = '[compiler-electron]';
+
+export function startCompilerElectron(port = 80) {
+  // 因为 vite 不会重定向到 index.html,所以直接写 index.html 路由。
+  const ELECTRON_URL = `http://localhost:${port}/index.html`;
+
+  const spinner = ora(`${TAG} Electron build...`);
+  const electron = electronConnect.server.create({ stopOnClose: true });
+  const rollupOptions = getRollupOptions();
+
+  function watchFunc() {
+    // once here, all resources are available
+    const watcher = rollup.watch(rollupOptions);
+    watcher.on('change', (filename) => {
+      const log = chalk.green(`change -- ${filename}`);
+      console.log(TAG, log);
+    });
+    watcher.on('event', (ev) => {
+      if (ev.code === 'END') {
+        // init-未启动、started-第一次启动、restarted-重新启动
+        electron.electronState === 'init' ? electron.start() : electron.restart();
+      } else if (ev.code === 'ERROR') {
+        console.log(ev.error);
+      }
+    });
+  }
+
+  if (argv.watch) {
+    waitOn(
+      {
+        resources: [ELECTRON_URL],
+        timeout: 5000,
+      },
+      (err) => {
+        if (err) {
+          const { hostname } = new URL(ELECTRON_URL);
+          const serverSocket = net.connect(port, hostname, () => {
+            watchFunc();
+          });
+          serverSocket.on('error', (e) => {
+            console.log(err);
+            console.log(e);
+            process.exit(1);
+          });
+        } else {
+          watchFunc();
+        }
+      }
+    );
+  } else {
+    spinner.start();
+    rollup
+      .rollup(rollupOptions)
+      .then((build) => {
+        spinner.stop();
+        console.log(TAG, chalk.green('Electron build successed.'));
+        build.write(rollupOptions.output as OutputOptions);
+      })
+      .catch((error) => {
+        spinner.stop();
+        console.log(`\n${TAG} ${chalk.red('构建报错')}\n`, error, '\n');
+      });
+  }
+}

+ 5 - 4
build/script/startElectron.ts

@@ -1,13 +1,14 @@
 import { createServer } from 'vite';
-import { execSync } from 'child_process';
 import path from 'path';
+import { startCompilerElectron } from './compilerElectron';
 
 (async () => {
   const server = await createServer({
     root: path.resolve(__dirname, '../../'),
   });
 
-  await server.listen();
-
-  execSync('node script/build --env=development --watch');
+  const app = await server.listen();
+  const port = app.config.server.port;
+  startCompilerElectron(port);
+  process.env.PORT = `${port}`;
 })();

+ 0 - 71
config/electron/index.ts

@@ -1,71 +0,0 @@
-/**
- * electron 主文件
- */
-import dotenv from 'dotenv';
-import { app, BrowserWindow, ipcMain } from 'electron';
-import is_dev from 'electron-is-dev';
-// @ts-ignore
-import Store from 'electron-store';
-import { join } from 'path';
-
-const store = new Store();
-// @ts-ignore
-ipcMain.on('store:set', async (e, args) => {
-  store.set(args.key, args.value);
-});
-// @ts-ignore
-ipcMain.handle('store:get', async (e, args) => {
-  return await store.get(args);
-});
-// @ts-ignore
-ipcMain.on('store:delete', async (e, args) => {
-  store.delete(args);
-});
-
-dotenv.config({ path: join(__dirname, '../../.env') });
-
-let win = null;
-
-class createWin {
-  // 创建浏览器窗口
-  constructor() {
-    // @ts-ignore
-    win = new BrowserWindow({
-      width: 930,
-      height: 700,
-      frame: false,
-      transparent: true,
-      webPreferences: {
-        devTools: true,
-
-        nodeIntegration: true,
-        enableRemoteModule: true,
-      },
-    });
-    // win.webContents.openDevTools()
-    // @ts-ignore
-    win.maximize();
-    // win.maximize()
-
-    const URL = is_dev
-      ? `http://localhost:${process.env.PORT}` // vite 启动的服务器地址
-      : `file://${join(__dirname, '../../dist/render/index.html')}`; // vite 构建后的静态文件地址
-
-    // @ts-ignore
-    win.loadURL(URL);
-  }
-}
-
-app.whenReady().then(() => new createWin());
-
-app.on('window-all-closed', () => {
-  if (process.platform !== 'darwin') {
-    app.quit();
-  }
-});
-
-app.on('activate', () => {
-  if (BrowserWindow.getAllWindows().length === 0) {
-    new createWin();
-  }
-});

+ 64 - 0
electron-main/index.ts

@@ -0,0 +1,64 @@
+import { app, BrowserWindow, screen } from 'electron';
+import is_dev from 'electron-is-dev';
+import { join } from 'path';
+
+let mainWindow: BrowserWindow | null = null;
+
+class createWin {
+  constructor() {
+    const displayWorkAreaSize = screen.getAllDisplays()[0].workArea;
+    mainWindow = new BrowserWindow({
+      width: parseInt(`${displayWorkAreaSize.width * 0.85}`, 10),
+      height: parseInt(`${displayWorkAreaSize.height * 0.85}`, 10),
+      movable: true,
+      // frame: false,
+      show: false,
+      center: true,
+      resizable: true,
+      // transparent: true,
+      titleBarStyle: 'default',
+      webPreferences: {
+        devTools: true,
+        contextIsolation: false,
+        nodeIntegration: true,
+        enableRemoteModule: true,
+      },
+      backgroundColor: '#fff',
+    });
+    const URL = is_dev
+      ? `http://localhost:${process.env.PORT}` // vite 启动的服务器地址
+      : `file://${join(__dirname, '../dist/render/index.html')}`; // vite 构建后的静态文件地址
+
+    mainWindow.loadURL(URL);
+
+    mainWindow.on('ready-to-show', () => {
+      mainWindow.show();
+    });
+  }
+}
+
+app.whenReady().then(() => new createWin());
+
+const isFirstInstance = app.requestSingleInstanceLock();
+
+if (!isFirstInstance) {
+  app.quit();
+} else {
+  app.on('second-instance', () => {
+    if (mainWindow) {
+      mainWindow.focus();
+    }
+  });
+}
+
+app.on('window-all-closed', () => {
+  if (process.platform !== 'darwin') {
+    app.quit();
+  }
+});
+
+app.on('activate', () => {
+  if (BrowserWindow.getAllWindows().length === 0) {
+    new createWin();
+  }
+});

+ 17 - 21
package.json

@@ -6,6 +6,7 @@
     "email": "anncwb@126.com",
     "url": "https://github.com/anncwb"
   },
+  "main": "dist/main/build.js",
   "build": {
     "appId": "xxx@gmail.com",
     "electronDownload": {
@@ -46,17 +47,14 @@
       "deleteAppDataOnUninstall": false
     }
   },
-  "main": "dist/main/build.js",
   "scripts": {
-    "dev": "vite",
-    "app": "esno ./build/script/runApp.ts",
-    "app:build": "npm run build && node script/build && electron-builder ",
-    "app:vue": "vite --force",
-    "app:ele": "node script/build --env=development --watch",
     "bootstrap": "yarn install",
+    "dev": "vite",
     "serve": "npm run dev",
     "build": "vite build && esno ./build/script/postBuild.ts",
     "build:no-cache": "yarn clean:cache && npm run build",
+    "dev:app": "esno ./build/script/startElectron.ts --env=development --watch",
+    "build:app": "npm run build && esno ./build/script/startElectron.ts && electron-builder ",
     "report": "cross-env REPORT=true npm run build",
     "type:check": "vue-tsc --noEmit --skipLibCheck",
     "preview": "npm run build && vite preview",
@@ -77,8 +75,6 @@
     "postinstall": "npm run install:husky"
   },
   "dependencies": {
-    "electron-is-dev": "^1.2.0",
-    "electron-store": "^6.0.0",
     "@iconify/iconify": "^2.0.1",
     "@logicflow/core": "^0.4.11",
     "@logicflow/extension": "^0.4.12",
@@ -90,6 +86,7 @@
     "cropperjs": "^1.5.11",
     "crypto-js": "^4.0.0",
     "echarts": "^5.1.1",
+    "electron-is-dev": "^1.2.0",
     "lodash-es": "^4.17.21",
     "mockjs": "^1.1.0",
     "nprogress": "^0.2.0",
@@ -108,22 +105,14 @@
     "xlsx": "^0.17.0"
   },
   "devDependencies": {
-    "rollup-plugin-esbuild": "^3.0.2",
-    "@rollup/plugin-alias": "^3.1.1",
-    "@rollup/plugin-commonjs": "^15.0.0",
-    "@rollup/plugin-json": "^4.1.0",
-    "@rollup/plugin-node-resolve": "^9.0.0",
-    "wait-on": "^5.2.1",
-    "electron-contextmenu-middleware": "^1.0.3",
-    "electron-input-menu": "^2.1.0",
-    "electron": "^11.0.0",
-    "electron-builder": "^22.8.0",
-    "electron-connect": "^0.6.3",
-    "concurrently": "^5.3.0",
     "@commitlint/cli": "^12.1.4",
     "@commitlint/config-conventional": "^12.1.4",
     "@iconify/json": "^1.1.353",
     "@purge-icons/generated": "^0.7.0",
+    "@rollup/plugin-alias": "^3.1.1",
+    "@rollup/plugin-commonjs": "^15.0.0",
+    "@rollup/plugin-json": "^4.1.0",
+    "@rollup/plugin-node-resolve": "^9.0.0",
     "@types/codemirror": "^5.60.0",
     "@types/crypto-js": "^4.0.1",
     "@types/fs-extra": "^9.0.11",
@@ -146,6 +135,11 @@
     "conventional-changelog-cli": "^2.1.1",
     "cross-env": "^7.0.3",
     "dotenv": "^10.0.0",
+    "electron": "^11.0.0",
+    "electron-builder": "^22.8.0",
+    "electron-connect": "^0.6.3",
+    "electron-contextmenu-middleware": "^1.0.3",
+    "electron-input-menu": "^2.1.0",
     "eslint": "^7.28.0",
     "eslint-config-prettier": "^8.3.0",
     "eslint-define-config": "^1.0.8",
@@ -163,6 +157,7 @@
     "prettier": "^2.3.1",
     "pretty-quick": "^3.1.0",
     "rimraf": "^3.0.2",
+    "rollup-plugin-esbuild": "^3.0.2",
     "rollup-plugin-visualizer": "5.5.0",
     "stylelint": "^13.13.1",
     "stylelint-config-prettier": "^8.0.2",
@@ -182,7 +177,8 @@
     "vite-plugin-theme": "^0.8.1",
     "vite-plugin-windicss": "^1.0.1",
     "vue-eslint-parser": "^7.6.0",
-    "vue-tsc": "^0.1.7"
+    "vue-tsc": "^0.1.7",
+    "wait-on": "^5.2.1"
   },
   "resolutions": {
     "//": "Used to install imagemin dependencies, because imagemin may not be installed in China. If it is abroad, you can delete it",

+ 0 - 74
script/build.js

@@ -1,74 +0,0 @@
-/**
- * electron 打包
- */
-const path = require('path');
-const rollup = require('rollup');
-const argv = require('minimist')(process.argv.slice(2));
-const chalk = require('chalk');
-const ora = require('ora');
-const waitOn = require('wait-on');
-const electron = require('electron-connect').server.create({ stopOnClose: true });
-require('dotenv').config({ path: path.join(__dirname, '../.env') });
-const options = require('./rollup.config');
-const net = require('net');
-const { URL } = require('url');
-
-const opt = options(argv.env);
-const TAG = '[script/build.js]';
-const spinner = ora(`${TAG} Electron build...`);
-
-const watchFunc = function () {
-  // once here, all resources are available
-  const watcher = rollup.watch(opt);
-  watcher.on('change', (filename) => {
-    const log = chalk.green(`change -- ${filename}`);
-    console.log(TAG, log);
-  });
-  watcher.on('event', (ev) => {
-    if (ev.code === 'END') {
-      // init-未启动、started-第一次启动、restarted-重新启动
-      electron.electronState === 'init' ? electron.start() : electron.restart();
-    } else if (ev.code === 'ERROR') {
-      console.log(ev.error);
-    }
-  });
-};
-
-const resource = `http://localhost:${process.env.PORT}/index.html`; // 因为 vite 不会重定向到 index.html,所以直接写 index.html 路由。
-
-if (argv.watch) {
-  waitOn(
-    {
-      resources: [resource],
-      timeout: 5000,
-    },
-    (err) => {
-      if (err) {
-        const { port, hostname } = new URL(resource);
-        const serverSocket = net.connect(port || 80, hostname, () => {
-          watchFunc();
-        });
-        serverSocket.on('error', (e) => {
-          console.log(err);
-          console.log(e);
-          process.exit(1);
-        });
-      } else {
-        watchFunc();
-      }
-    }
-  );
-} else {
-  spinner.start();
-  rollup
-    .rollup(opt)
-    .then((build) => {
-      spinner.stop();
-      console.log(TAG, chalk.green('Electron build successed.'));
-      build.write(opt.output);
-    })
-    .catch((error) => {
-      spinner.stop();
-      console.log(`\n${TAG} ${chalk.red('构建报错')}\n`, error, '\n');
-    });
-}

+ 2 - 2
src/locales/useLocale.ts

@@ -3,7 +3,7 @@
  */
 import type { LocaleType } from '/#/config';
 
-import { updateLocale } from 'moment';
+import moment from 'moment';
 
 import { i18n } from './setupI18n';
 import { useLocaleStoreWithOut } from '/@/store/modules/locale';
@@ -56,7 +56,7 @@ export function useLocale() {
     const { message, momentLocale, momentLocaleName } = langModule;
 
     globalI18n.setLocaleMessage(locale, message);
-    updateLocale(momentLocaleName, momentLocale);
+    moment.updateLocale(momentLocaleName, momentLocale);
     loadLocalePool.push(locale);
 
     setI18nLanguage(locale);

+ 1 - 0
vite.config.ts

@@ -64,6 +64,7 @@ export default ({ command, mode }: ConfigEnv): UserConfig => {
       proxy: createProxy(VITE_PROXY),
     },
     build: {
+      minify: 'esbuild',
       target: 'es2015',
       outDir: OUTPUT_DIR,
       terserOptions: {

+ 45 - 132
yarn.lock

@@ -1385,8 +1385,8 @@
 
 "@rollup/plugin-commonjs@^15.0.0":
   version "15.1.0"
-  resolved "https://registry.nlark.com/@rollup/plugin-commonjs/download/@rollup/plugin-commonjs-15.1.0.tgz#1e7d076c4f1b2abf7e65248570e555defc37c238"
-  integrity sha1-Hn0HbE8bKr9+ZSSFcOVV3vw3wjg=
+  resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-15.1.0.tgz#1e7d076c4f1b2abf7e65248570e555defc37c238"
+  integrity sha512-xCQqz4z/o0h2syQ7d9LskIMvBSH4PX5PjYdpSSvgS+pQik3WahkQVNWg3D8XJeYjZoVWnIUQYDghuEMRGrmQYQ==
   dependencies:
     "@rollup/pluginutils" "^3.1.0"
     commondir "^1.0.1"
@@ -1417,8 +1417,8 @@
 
 "@rollup/plugin-node-resolve@^9.0.0":
   version "9.0.0"
-  resolved "https://registry.nlark.com/@rollup/plugin-node-resolve/download/@rollup/plugin-node-resolve-9.0.0.tgz?cache=0&sync_timestamp=1620138298696&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40rollup%2Fplugin-node-resolve%2Fdownload%2F%40rollup%2Fplugin-node-resolve-9.0.0.tgz#39bd0034ce9126b39c1699695f440b4b7d2b62e6"
-  integrity sha1-Ob0ANM6RJrOcFplpX0QLS30rYuY=
+  resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-9.0.0.tgz#39bd0034ce9126b39c1699695f440b4b7d2b62e6"
+  integrity sha512-gPz+utFHLRrd41WMP13Jq5mqqzHL3OXrfj3/MkSyB6UBIcuNt9j60GCbarzMzdf1VHFpOxfQh/ez7wyadLMqkg==
   dependencies:
     "@rollup/pluginutils" "^3.1.0"
     "@types/resolve" "1.17.1"
@@ -1805,8 +1805,8 @@
 
 "@types/node@^12.0.12":
   version "12.20.14"
-  resolved "https://registry.nlark.com/@types/node/download/@types/node-12.20.14.tgz?cache=0&sync_timestamp=1622824554937&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-12.20.14.tgz#9caf7eea0df08b406829889cc015256a6d81ab10"
-  integrity sha1-nK9+6g3wi0BoKYicwBUlam2BqxA=
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.14.tgz#9caf7eea0df08b406829889cc015256a6d81ab10"
+  integrity sha512-iFJOS5Q470FF+r4Ol2pSley7/wCNVqf+jgjhtxLLaJcDs+To2iCxlXIkJXrGLD9w9G/oJ9ibySu7z92DCwr7Pg==
 
 "@types/node@^14.17.1":
   version "14.17.1"
@@ -2260,10 +2260,10 @@ ajv-keywords@^3.4.1:
   resolved "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.5.2.tgz?cache=0&sync_timestamp=1616882384060&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
   integrity sha1-MfKdpatuANHC0yms97WSlhTVAU0=
 
-ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.2, ajv@^6.12.4:
+ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.4:
   version "6.12.6"
-  resolved "https://registry.nlark.com/ajv/download/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
-  integrity sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+  integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
   dependencies:
     fast-deep-equal "^3.1.1"
     fast-json-stable-stringify "^2.0.0"
@@ -2571,11 +2571,6 @@ atob@^2.1.2:
   resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
   integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
 
-atomically@^1.3.1:
-  version "1.7.0"
-  resolved "https://registry.npm.taobao.org/atomically/download/atomically-1.7.0.tgz#c07a0458432ea6dbc9a3506fffa424b48bccaafe"
-  integrity sha1-wHoEWEMuptvJo1Bv/6QktIvMqv4=
-
 autoprefixer@^10.2.6:
   version "10.2.6"
   resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.2.6.tgz#aadd9ec34e1c98d403e01950038049f0eb252949"
@@ -3350,7 +3345,7 @@ clone@^2.1.1:
 
 co@^4.0.0:
   version "4.6.0"
-  resolved "https://registry.nlark.com/co/download/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+  resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
   integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
 
 coa@^2.0.2:
@@ -3539,7 +3534,7 @@ compute-scroll-into-view@^1.0.17:
 
 comws@^2.0.2:
   version "2.1.0"
-  resolved "https://registry.nlark.com/comws/download/comws-2.1.0.tgz#d2dd8186bc752aa424f2a6a23332a23f3ef1b2c8"
+  resolved "https://registry.yarnpkg.com/comws/-/comws-2.1.0.tgz#d2dd8186bc752aa424f2a6a23332a23f3ef1b2c8"
   integrity sha1-0t2Bhrx1KqQk8qaiMzKiPz7xssg=
   dependencies:
     co "^4.0.0"
@@ -3562,37 +3557,6 @@ concat-stream@^1.5.1, concat-stream@^1.6.2:
     readable-stream "^2.2.2"
     typedarray "^0.0.6"
 
-concurrently@^5.3.0:
-  version "5.3.0"
-  resolved "https://registry.nlark.com/concurrently/download/concurrently-5.3.0.tgz?cache=0&sync_timestamp=1621854377114&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fconcurrently%2Fdownload%2Fconcurrently-5.3.0.tgz#7500de6410d043c912b2da27de3202cb489b1e7b"
-  integrity sha1-dQDeZBDQQ8kSston3jICy0ibHns=
-  dependencies:
-    chalk "^2.4.2"
-    date-fns "^2.0.1"
-    lodash "^4.17.15"
-    read-pkg "^4.0.1"
-    rxjs "^6.5.2"
-    spawn-command "^0.0.2-1"
-    supports-color "^6.1.0"
-    tree-kill "^1.2.2"
-    yargs "^13.3.0"
-
-conf@^7.1.2:
-  version "7.1.2"
-  resolved "https://registry.nlark.com/conf/download/conf-7.1.2.tgz#d9678a9d8f04de8bf5cd475105da8fdae49c2ec4"
-  integrity sha1-2WeKnY8E3ov1zUdRBdqP2uScLsQ=
-  dependencies:
-    ajv "^6.12.2"
-    atomically "^1.3.1"
-    debounce-fn "^4.0.0"
-    dot-prop "^5.2.0"
-    env-paths "^2.2.0"
-    json-schema-typed "^7.0.3"
-    make-dir "^3.1.0"
-    onetime "^5.1.0"
-    pkg-up "^3.1.0"
-    semver "^7.3.2"
-
 config-chain@^1.1.11:
   version "1.1.12"
   resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa"
@@ -3990,7 +3954,7 @@ css-select-base-adapter@^0.1.1:
 
 css-select@^1.1.0:
   version "1.2.0"
-  resolved "https://registry.nlark.com/css-select/download/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
+  resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
   integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=
   dependencies:
     boolbase "~1.0.0"
@@ -4037,8 +4001,8 @@ css-tree@^1.1.2:
 
 css-what@2.1:
   version "2.1.3"
-  resolved "https://registry.nlark.com/css-what/download/css-what-2.1.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-what%2Fdownload%2Fcss-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2"
-  integrity sha1-ptdgRXM2X+dGhsPzEcVlE9iChfI=
+  resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2"
+  integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==
 
 css-what@^3.2.1:
   version "3.4.2"
@@ -4102,23 +4066,11 @@ dargs@^7.0.0:
   resolved "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc"
   integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==
 
-date-fns@^2.0.1:
-  version "2.22.1"
-  resolved "https://registry.nlark.com/date-fns/download/date-fns-2.22.1.tgz?cache=0&sync_timestamp=1622203830828&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdate-fns%2Fdownload%2Fdate-fns-2.22.1.tgz#1e5af959831ebb1d82992bf67b765052d8f0efc4"
-  integrity sha1-Hlr5WYMeux2CmSv2e3ZQUtjw78Q=
-
 dateformat@^3.0.0:
   version "3.0.3"
   resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae"
   integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==
 
-debounce-fn@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.npm.taobao.org/debounce-fn/download/debounce-fn-4.0.0.tgz#ed76d206d8a50e60de0dd66d494d82835ffe61c7"
-  integrity sha1-7XbSBtilDmDeDdZtSU2Cg1/+Ycc=
-  dependencies:
-    mimic-fn "^3.0.0"
-
 debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:
   version "2.6.9"
   resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
@@ -4381,7 +4333,7 @@ dom-align@^1.10.4:
 
 dom-converter@~0.1:
   version "0.1.4"
-  resolved "https://registry.npm.taobao.org/dom-converter/download/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b"
+  resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b"
   integrity sha1-pF71cnuJDJv/5tfIduexnLDhfzs=
   dependencies:
     utila "~0.3"
@@ -4420,7 +4372,7 @@ domelementtype@^2.0.1, domelementtype@^2.2.0:
 
 domhandler@2.1:
   version "2.1.0"
-  resolved "https://registry.nlark.com/domhandler/download/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594"
+  resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594"
   integrity sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=
   dependencies:
     domelementtype "1"
@@ -4448,14 +4400,14 @@ domhandler@^4.2.0:
 
 domutils@1.1:
   version "1.1.6"
-  resolved "https://registry.nlark.com/domutils/download/domutils-1.1.6.tgz?cache=0&sync_timestamp=1622995212689&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdomutils%2Fdownload%2Fdomutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485"
+  resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485"
   integrity sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=
   dependencies:
     domelementtype "1"
 
 domutils@1.5.1:
   version "1.5.1"
-  resolved "https://registry.nlark.com/domutils/download/domutils-1.5.1.tgz?cache=0&sync_timestamp=1622995212689&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdomutils%2Fdownload%2Fdomutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
+  resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
   integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=
   dependencies:
     dom-serializer "0"
@@ -4630,20 +4582,20 @@ electron-connect@^0.6.3:
 
 electron-contextmenu-middleware@^1.0.3:
   version "1.0.3"
-  resolved "https://registry.nlark.com/electron-contextmenu-middleware/download/electron-contextmenu-middleware-1.0.3.tgz#ea233d153832a56c50059ee3a83e7cd04ecd9fe8"
+  resolved "https://registry.yarnpkg.com/electron-contextmenu-middleware/-/electron-contextmenu-middleware-1.0.3.tgz#ea233d153832a56c50059ee3a83e7cd04ecd9fe8"
   integrity sha1-6iM9FTgypWxQBZ7jqD580E7Nn+g=
   dependencies:
     comws "^2.0.2"
 
 electron-input-menu@^2.1.0:
   version "2.1.0"
-  resolved "https://registry.nlark.com/electron-input-menu/download/electron-input-menu-2.1.0.tgz#ab4914c78f9049752c0b0c80805ad6f823aa4ac2"
+  resolved "https://registry.yarnpkg.com/electron-input-menu/-/electron-input-menu-2.1.0.tgz#ab4914c78f9049752c0b0c80805ad6f823aa4ac2"
   integrity sha1-q0kUx4+QSXUsCwyAgFrW+COqSsI=
 
 electron-is-dev@^1.2.0:
   version "1.2.0"
-  resolved "https://registry.npm.taobao.org/electron-is-dev/download/electron-is-dev-1.2.0.tgz#2e5cea0a1b3ccf1c86f577cee77363ef55deb05e"
-  integrity sha1-LlzqChs8zxyG9XfO53Nj71XesF4=
+  resolved "https://registry.yarnpkg.com/electron-is-dev/-/electron-is-dev-1.2.0.tgz#2e5cea0a1b3ccf1c86f577cee77363ef55deb05e"
+  integrity sha512-R1oD5gMBPS7PVU8gJwH6CtT0e6VSoD0+SzSnYpNm+dBkcijgA+K7VAMHDfnRq/lkKPZArpzplTW6jfiMYosdzw==
 
 electron-publish@22.10.5:
   version "22.10.5"
@@ -4659,14 +4611,6 @@ electron-publish@22.10.5:
     lazy-val "^1.0.4"
     mime "^2.5.0"
 
-electron-store@^6.0.0:
-  version "6.0.1"
-  resolved "https://registry.nlark.com/electron-store/download/electron-store-6.0.1.tgz#2178b9dc37aeb749d99cf9d1d1bc090890b922dc"
-  integrity sha1-IXi53Deut0nZnPnR0bwJCJC5Itw=
-  dependencies:
-    conf "^7.1.2"
-    type-fest "^0.16.0"
-
 electron-to-chromium@^1.3.649:
   version "1.3.712"
   resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.712.tgz#ae467ffe5f95961c6d41ceefe858fc36eb53b38f"
@@ -4679,8 +4623,8 @@ electron-to-chromium@^1.3.723:
 
 electron@^11.0.0:
   version "11.4.8"
-  resolved "https://registry.nlark.com/electron/download/electron-11.4.8.tgz#6f89be903bd917bda52afacf7cd3bdf2154b5c79"
-  integrity sha1-b4m+kDvZF72lKvrPfNO98hVLXHk=
+  resolved "https://registry.yarnpkg.com/electron/-/electron-11.4.8.tgz#6f89be903bd917bda52afacf7cd3bdf2154b5c79"
+  integrity sha512-NrxlDZN1sWiDCWWOm5aX+tPGtiLgsCUwNqNFP3eJfY+RPdYLsxYRJDFa1vc4GcuCZEp9kZusINjmpPWsvJdspQ==
   dependencies:
     "@electron/get" "^1.0.1"
     "@types/node" "^12.0.12"
@@ -4740,8 +4684,8 @@ entities@^2.0.0:
 
 env-paths@^2.2.0:
   version "2.2.1"
-  resolved "https://registry.npm.taobao.org/env-paths/download/env-paths-2.2.1.tgz?cache=0&sync_timestamp=1615206892937&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fenv-paths%2Fdownload%2Fenv-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
-  integrity sha1-QgOZ1BbOH76bwKB8Yvpo1n/Q+PI=
+  resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
+  integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
 
 errlop@^4.0.0:
   version "4.1.0"
@@ -6253,7 +6197,7 @@ htmlparser2@^6.1.0:
 
 htmlparser2@~3.3.0:
   version "3.3.0"
-  resolved "https://registry.npm.taobao.org/htmlparser2/download/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe"
+  resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe"
   integrity sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=
   dependencies:
     domelementtype "1"
@@ -7008,7 +6952,7 @@ is-yarn-global@^0.3.0:
 
 isarray@0.0.1:
   version "0.0.1"
-  resolved "https://registry.nlark.com/isarray/download/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+  resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
   integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
 
 isarray@1.0.0, isarray@~1.0.0:
@@ -7160,11 +7104,6 @@ json-schema-traverse@^1.0.0:
   resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
   integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
 
-json-schema-typed@^7.0.3:
-  version "7.0.3"
-  resolved "https://registry.npm.taobao.org/json-schema-typed/download/json-schema-typed-7.0.3.tgz#23ff481b8b4eebcd2ca123b4fa0409e66469a2d9"
-  integrity sha1-I/9IG4tO680soSO0+gQJ5mRpotk=
-
 json-stable-stringify-without-jsonify@^1.0.1:
   version "1.0.1"
   resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
@@ -7609,10 +7548,10 @@ make-dir@^2.1.0:
     pify "^4.0.1"
     semver "^5.6.0"
 
-make-dir@^3.0.0, make-dir@^3.1.0:
+make-dir@^3.0.0:
   version "3.1.0"
-  resolved "https://registry.npm.taobao.org/make-dir/download/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
-  integrity sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=
+  resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
+  integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
   dependencies:
     semver "^6.0.0"
 
@@ -7885,11 +7824,6 @@ mimic-fn@^2.1.0:
   resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
   integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
 
-mimic-fn@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-3.1.0.tgz?cache=0&sync_timestamp=1617823824094&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-3.1.0.tgz#65755145bbf3e36954b949c16450427451d5ca74"
-  integrity sha1-ZXVRRbvz42lUuUnBZFBCdFHVynQ=
-
 mimic-response@^1.0.0, mimic-response@^1.0.1:
   version "1.0.1"
   resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
@@ -8187,8 +8121,8 @@ nprogress@^0.2.0:
 
 nth-check@^1.0.2, nth-check@~1.0.1:
   version "1.0.2"
-  resolved "https://registry.nlark.com/nth-check/download/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
-  integrity sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw=
+  resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
+  integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==
   dependencies:
     boolbase "~1.0.0"
 
@@ -8736,13 +8670,6 @@ pinkie@^2.0.0:
   resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
   integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
 
-pkg-up@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.npm.taobao.org/pkg-up/download/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5"
-  integrity sha1-EA7CNcwVDk/UJRlBJZaihRKg3vU=
-  dependencies:
-    find-up "^3.0.0"
-
 please-upgrade-node@^3.2.0:
   version "3.2.0"
   resolved "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942"
@@ -9047,7 +8974,7 @@ pretty-bytes@^5.3.0, pretty-bytes@^5.6.0:
 
 pretty-error@^1.1.1:
   version "1.2.0"
-  resolved "https://registry.npm.taobao.org/pretty-error/download/pretty-error-1.2.0.tgz#f28058414bf34dd2e993496219337e9d25a5ada5"
+  resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-1.2.0.tgz#f28058414bf34dd2e993496219337e9d25a5ada5"
   integrity sha1-8oBYQUvzTdLpk0liGTN+nSWlraU=
   dependencies:
     renderkid "~1.0.0"
@@ -9370,15 +9297,6 @@ read-pkg@^3.0.0:
     normalize-package-data "^2.3.2"
     path-type "^3.0.0"
 
-read-pkg@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.npm.taobao.org/read-pkg/download/read-pkg-4.0.1.tgz?cache=0&sync_timestamp=1616914810926&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg%2Fdownload%2Fread-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237"
-  integrity sha1-ljYlN48+HE1IyFhytabsfV0JMjc=
-  dependencies:
-    normalize-package-data "^2.3.2"
-    parse-json "^4.0.0"
-    pify "^3.0.0"
-
 read-pkg@^5.2.0:
   version "5.2.0"
   resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc"
@@ -9391,7 +9309,7 @@ read-pkg@^5.2.0:
 
 readable-stream@1.0:
   version "1.0.34"
-  resolved "https://registry.npm.taobao.org/readable-stream/download/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
   integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=
   dependencies:
     core-util-is "~1.0.0"
@@ -9573,7 +9491,7 @@ remark@^13.0.0:
 
 renderkid@~1.0.0:
   version "1.0.0"
-  resolved "https://registry.npm.taobao.org/renderkid/download/renderkid-1.0.0.tgz?cache=0&sync_timestamp=1609588654734&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frenderkid%2Fdownload%2Frenderkid-1.0.0.tgz#29e16c5f64be9bdd52989b6a630ac799c738158b"
+  resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-1.0.0.tgz#29e16c5f64be9bdd52989b6a630ac799c738158b"
   integrity sha1-KeFsX2S+m91SmJtqYwrHmcc4FYs=
   dependencies:
     css-select "^1.1.0"
@@ -9733,8 +9651,8 @@ roarr@^2.15.3:
 
 rollup-plugin-esbuild@^3.0.2:
   version "3.0.4"
-  resolved "https://registry.nlark.com/rollup-plugin-esbuild/download/rollup-plugin-esbuild-3.0.4.tgz#4b536a2db2ba1700521eec5fa9535437c7247145"
-  integrity sha1-S1NqLbK6FwBSHuxfqVNUN8ckcUU=
+  resolved "https://registry.yarnpkg.com/rollup-plugin-esbuild/-/rollup-plugin-esbuild-3.0.4.tgz#4b536a2db2ba1700521eec5fa9535437c7247145"
+  integrity sha512-Txe/qWTx4NykWLwHjQ8vxXB1Mh6nTWnk7nl9lTYBN0DKnbvnSz4u2qiLqceLMZXTk//iYP5jnxlBNciNBp57LQ==
   dependencies:
     "@rollup/pluginutils" "^4.1.0"
     joycon "^3.0.1"
@@ -9787,7 +9705,7 @@ run-parallel@^1.1.9:
   dependencies:
     queue-microtask "^1.2.2"
 
-rxjs@^6.4.0, rxjs@^6.5.2, rxjs@^6.6.3, rxjs@^6.6.6, rxjs@^6.6.7:
+rxjs@^6.4.0, rxjs@^6.6.3, rxjs@^6.6.6, rxjs@^6.6.7:
   version "6.6.7"
   resolved "https://registry.nlark.com/rxjs/download/rxjs-6.6.7.tgz?cache=0&sync_timestamp=1621619504812&other_urls=https%3A%2F%2Fregistry.nlark.com%2Frxjs%2Fdownload%2Frxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9"
   integrity sha1-kKwBisq/SRv2UEQjXVhjxNq4BMk=
@@ -10155,11 +10073,6 @@ space-separated-tokens@^1.1.4:
   resolved "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899"
   integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==
 
-spawn-command@^0.0.2-1:
-  version "0.0.2-1"
-  resolved "https://registry.npm.taobao.org/spawn-command/download/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0"
-  integrity sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=
-
 spdx-correct@^3.0.0:
   version "3.1.1"
   resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
@@ -10327,7 +10240,7 @@ string_decoder@^1.1.1:
 
 string_decoder@~0.10.x:
   version "0.10.31"
-  resolved "https://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
   integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
 
 string_decoder@~1.1.1:
@@ -10901,7 +10814,7 @@ traverse@^0.6.6:
   resolved "https://registry.npmjs.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137"
   integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=
 
-tree-kill@^1.1.0, tree-kill@^1.2.2:
+tree-kill@^1.1.0:
   version "1.2.2"
   resolved "https://registry.npm.taobao.org/tree-kill/download/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc"
   integrity sha1-TKCakJLIi3OnzcXooBtQeweQoMw=
@@ -11444,12 +11357,12 @@ util.promisify@~1.0.0:
 
 utila@~0.3:
   version "0.3.3"
-  resolved "https://registry.npm.taobao.org/utila/download/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226"
+  resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226"
   integrity sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=
 
 utila@~0.4:
   version "0.4.0"
-  resolved "https://registry.npm.taobao.org/utila/download/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
+  resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
   integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=
 
 utils-merge@1.0.1:
@@ -11712,7 +11625,7 @@ vite-plugin-windicss@^1.0.1:
 
 vite@2.3.6:
   version "2.3.6"
-  resolved "https://registry.npmjs.org/vite/-/vite-2.3.6.tgz#1f7cfde88a51a802d69000c7bac85d481c2e871c"
+  resolved "https://registry.yarnpkg.com/vite/-/vite-2.3.6.tgz#1f7cfde88a51a802d69000c7bac85d481c2e871c"
   integrity sha512-fsEpNKDHgh3Sn66JH06ZnUBnIgUVUtw6ucDhlOj1CEqxIkymU25yv1/kWDPlIjyYHnalr0cN6V+zzUJ+fmWHYw==
   dependencies:
     esbuild "^0.12.5"
@@ -12374,7 +12287,7 @@ yargs-parser@^20.2.2, yargs-parser@^20.2.3:
   resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a"
   integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==
 
-yargs@^13.2.4, yargs@^13.3.0:
+yargs@^13.2.4:
   version "13.3.2"
   resolved "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
   integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==