0.17.8 • Published 5 years ago

wodax-update-notifier v0.17.8

Weekly downloads
4
License
MIT
Repository
-
Last release
5 years ago

wodax-update-notifier

NPM version NPM downloads

简介

通过 集成 wodax-update-notifier 来实现以下功能:

  • 检测 工具wodax-update-notifier 是否为最新?
  • 检测基于脚手架create-wodax-project 生成的项目模板是否有更新?
  • 检测基于脚手架create-wodax-project 生成的项目依赖环境是否有更新?
  • 检测项目其他依赖是否有更新?
  • 检测是否遵循 WodaX 规范?
  • 应用项目补丁,强制更新
  • 应用核心依赖库更新检测,强制更新
  • 应用执行检查代码规范,完成部分自修复
  • 应用格式化代码

安装

$ npm install wodax-update-notifier -D # yarn add wodax-update-notifier -D

用法示例

check_update.js 源码

const util = require('util');
const fs = require('fs');
const path = require('path');
const updateNotifier = require('wodax-update-notifier');

const leftToken = '\033[1;31m';
const rightToken = '\033[0;0m';

/**
 * 异步运行 spawn 子进程
 * @param command
 * @param args
 * @param options
 * @param onExitCallback
 */
function runSpawnProcess(
  command = '',
  args = [],
  options = {},
  onExitCallback = () => {
  }
) {
  try {
    const envData = {
      ...process.env,
      NODE_OPTIONS: '--max_old_space_size=4096',
    };

    const hl = require('child_process').spawn(command, args, {
      env: envData,
      ...options,
    });
    hl.stdout.on('data', (data) => {
      console.log(data.toString());
    });
    hl.stderr.on('data', (data) => {
      console.log(data.toString());
    });
    hl.on('exit', (code, signal) => {
      onExitCallback && onExitCallback(code, signal);
    });
  } catch (e) {
    console.error(e);
    onExitCallback(-1, '');
  }
}

/**
 * 运行同步命令
 * @param command  命令
 * @param enableOutputContent 是否可以输出内容
 * @param enableThrow  是否可以抛出异常
 */
function runOneCommand({
                         command = `pwd`,
                         enableOutputContent = false,
                         enableThrow = false,
                       }) {
  try {
    const output = require('child_process').execSync(`${command}`, {
      env: {
        ...process.env,
        NODE_OPTIONS: '--max_old_space_size=4096',
      },
    });
    if (enableOutputContent) {
      console.log(output.toString());
    }
  } catch (e) {
    if (enableThrow) throw e;
  }
}

/** check Current Project Packages
 *
 * @param pkgInfo
 */
function checkCurrentProjectPackage(pkgInfo) {
  try {
    const {name: packageName, version: packageVersion, wodax} = pkgInfo;
    const {templateClassId, templateKey, templateVersion} = wodax;
    const pkg = {
      name: packageName,
      version: packageVersion,
    };

    // check templateVersion
    updateNotifier({
      pkg,
      templateClassId,
      templateKey,
      templateVersion,
      updateCheckInterval: 0,
      callback: function (err, info) {
        if (err) {
          if (!pkg.name === packageName) {
            console.error(err);
          }
        } else {
          console.log(info);
        }
      },
    });

    // check Dependencies
    [
      'devDependencies',
      'optionalDependencies',
      'dependencies',
      'peerDependency',
      'bundleDependencies',
    ].map((ele) => {
      const dependencies = pkgInfo[ele] || {};
      Object.keys(dependencies).map((one_pkg_name) => {
        const pkg = {
          name: one_pkg_name,
          version: dependencies[one_pkg_name],
          dependenciesType: ele,
        };

        const notifier = updateNotifier({
          pkg,
          templateClassId,
          templateKey,
          updateCheckInterval: 0,
          callback: function (err, info) {
            if (err) {
              if (!pkg.name === packageName) {
                console.error(err);
              }
            } else {
              const packageName = this.packageName;
              // 1. 先检测包是否存在?
              const modulePath = `${path.normalize(
                path.join(__dirname, '../node_modules', packageName)
              )}`;
              if (!fs.existsSync(`${modulePath}`)) {
                try {
                  const installCommand = this.getInstallCommand({
                    latestVersion: pkg.version,
                    isYarnGlobal: false,
                    isGlobal: false,
                  });

                  console.log(`${leftToken}${'-'.repeat(36)}${rightToken}`);
                  console.log(`检测路径为:'${modulePath}'`);
                  console.log(
                    `根据 WodaX 项目架构规范要求,'${packageName}' 依赖包没有找到,正在启动安装程序 ...`
                  );
                  console.log(
                    `如果 '${packageName}' 更新失败,请在终端中手动运行该命令 '${installCommand}'`
                  );
                  console.log(`${leftToken}${'-'.repeat(36)}${rightToken}`);
                  runOneCommand({
                    command: `${installCommand}`,
                    enableOutputContent: false,
                    enableThrow: true,
                  });
                  console.log(`核心依赖 '${packageName}' 已安装完成 ... `);
                  console.log(`${leftToken}${'-'.repeat(36)}${rightToken}`);
                } catch (e) {
                  console.error(e);
                }
              } else {
                // 2. 再检测是否需要更新
                const {type} = info;
                if (type && type !== 'latest') {
                  this.config.set('update', info);
                  this.printInfo(info);
                }
              }
            }
          },
        });
      });
    });
  } catch (e) {
  }
}

// 检测 npm config list
console.log(
  `${leftToken}正在检测 npm config 配置 (nodejs 全局globle 缓存cache 需要特别注意)...  ${rightToken}`
);
runOneCommand({command: `npm config list`, enableOutputContent: true});
console.log(`${leftToken}${'-'.repeat(36)}${rightToken}`);

updateNotifier.selfCheckUpdate((err, info) => {
  if (!err) {
    const {packageName, needUpdate, installCommand} = info;
    if (!needUpdate) {
      // check Dependencies
      const pkgInfo = require('../package.json');
      checkCurrentProjectPackage(pkgInfo);
    } else {
      console.log(
        `根据 WodaX 项目架构规范要求,'${packageName}' 正在强制更新中 ...`
      );
      console.log(
        `如果 '${packageName}'更新失败,请在终端中手动运行该命令 '${installCommand}' ...`
      );

      try {
        runOneCommand({command: `${installCommand}`, enableThrow: true});
        console.log(
          `${leftToken} 核心依赖 '${packageName}' 已更新完成。 正在重新检查 ... ${rightToken}`
        );
        runSpawnProcess(process.execPath, [__filename], {});
      } catch (e) {
        console.error(e);
        process.exit(999);
      }
    }
  }
});
0.17.8

5 years ago

0.17.7

5 years ago

0.17.5

5 years ago

0.17.6

5 years ago

0.17.3

5 years ago

0.17.4

5 years ago

0.17.2

5 years ago

0.17.1

5 years ago

0.17.0

5 years ago

0.16.69

5 years ago

0.16.70

5 years ago

0.16.71

5 years ago

0.16.65

5 years ago

0.16.66

5 years ago

0.16.67

5 years ago

0.16.68

5 years ago

0.16.64

5 years ago

0.16.63

5 years ago

0.16.61

5 years ago

0.16.62

5 years ago

0.16.60

5 years ago

0.16.59

5 years ago

0.16.58

5 years ago

0.16.57

5 years ago

0.16.56

5 years ago

0.16.55

5 years ago

0.16.54

5 years ago

0.16.53

5 years ago

0.16.52

5 years ago

0.16.49

5 years ago

0.16.50

5 years ago

0.16.51

5 years ago

0.16.47

5 years ago

0.16.48

5 years ago

0.16.46

5 years ago

0.16.45

5 years ago

0.16.44

5 years ago

0.16.43

5 years ago

0.16.42

5 years ago

0.16.41

5 years ago

0.16.40

5 years ago

0.16.39

5 years ago

0.16.38

5 years ago

0.16.36

5 years ago

0.16.37

5 years ago

0.16.35

5 years ago

0.16.34

5 years ago

0.16.33

5 years ago

0.16.32

5 years ago

0.16.31

5 years ago

0.16.30

5 years ago

0.16.29

5 years ago

0.16.28

5 years ago

0.16.27

5 years ago

0.16.26

5 years ago

0.16.25

5 years ago

0.16.24

5 years ago

0.16.23

5 years ago

0.16.22

5 years ago

0.16.21

5 years ago

0.16.20

5 years ago

0.16.19

5 years ago

0.16.18

5 years ago

0.16.17

5 years ago

0.16.16

5 years ago

0.16.15

5 years ago

0.16.14

5 years ago

0.16.11

5 years ago

0.16.12

5 years ago

0.16.13

5 years ago

0.16.10

5 years ago

0.16.9

5 years ago

0.16.6

5 years ago

0.16.7

5 years ago

0.16.8

5 years ago

0.16.5

5 years ago

0.16.4

5 years ago

0.16.3

5 years ago

0.16.1

5 years ago

0.16.2

5 years ago

0.16.0

5 years ago

0.15.16

5 years ago

0.15.14

5 years ago

0.15.15

5 years ago

0.15.13

5 years ago

0.15.12

5 years ago

0.15.11

5 years ago

0.15.7

5 years ago

0.15.8

5 years ago

0.15.6

5 years ago

0.15.5

5 years ago

0.15.4

5 years ago

0.15.3

5 years ago

0.15.2

5 years ago

0.15.1

5 years ago

0.15.0

5 years ago

0.14.20

5 years ago

0.14.19

5 years ago

0.14.18

5 years ago

0.14.17

5 years ago

0.14.16

5 years ago

0.14.15

5 years ago

0.14.14

5 years ago

0.14.13

5 years ago

0.14.12

5 years ago

0.14.11

5 years ago

0.14.10

5 years ago

0.14.9

5 years ago

0.14.8

5 years ago

0.14.7

5 years ago

0.14.6

5 years ago

0.14.5

5 years ago

0.14.4

5 years ago

0.14.3

5 years ago

0.14.2

5 years ago

0.14.1

5 years ago

0.14.0

5 years ago

0.13.0

5 years ago

0.11.0

5 years ago

0.10.0

5 years ago

0.9.0

5 years ago

0.8.2

5 years ago

0.8.1

5 years ago

0.8.0

5 years ago

0.7.1

5 years ago

0.6.4

5 years ago

0.6.3

5 years ago

0.6.2

5 years ago

0.6.0

5 years ago

0.5.0

5 years ago

0.4.0

5 years ago

0.3.0

5 years ago

0.2.2

5 years ago

0.2.1

5 years ago

0.2.0

5 years ago

0.1.1

5 years ago

0.1.0

5 years ago