git реализует автоматическое нажатие

внешний интерфейс Git
git реализует автоматическое нажатие

Это 8-й день моего участия в августовском испытании обновлений.Подробности о событии:Испытание августовского обновления

место действия:В режиме разделения фронтенда и бэкэнда, а фронтенд развернут на бэкенде, необходимо отправить код в каталог git бэкэнда после упаковки каждого фронтенда. Поэтому я написал следующую программу.

монтажный комплект

npm i cpx shelljs --save-dev

См. китайскую документацию по облачным оболочкам

cpx npm документация

Корневой каталог проекта Добавить файл JS

// 引入所需工具包
const cpx = require("cpx");
const shell = require('shelljs')
// 添加 fs 模块读取文件
const fs = require('fs');
/*
 fs.existsSync(路径),检测次文件是否存在,存在还回 true
 shell.which('git') 判断git 命令是否可用
*/
if (fs.existsSync('./package.json') && shell.which('git')) {
  /**
   fs.readFileSync()方法是其同步读取文件的方法,会产生阻塞效果
   下边会介绍到 package.json 里边需要写什么
  */
  var package = fs.readFileSync('./package.json');
  if (typeof package == "object") {
    var result = JSON.parse(package);
    if (result.gitcopy) {
      if (!fs.existsSync(result.gitcopy.dir)) {
      /**
        exec()
        exec(command [, options] [, callback])
        command <String>:要在命令行执行的完整命令
        options <Object>:可选参数,JSON对象
        async: 异步执行.如果你提供了回调方法,这个值就一定为true,无论你怎么设置
        silent:打印信息不输出到命令控制台
        Node.js 的 child_process.exec()方法的其他参数都可以用
        callback:<Function>:当进程终止时调用,并带上输出。
        error <Error>
        stdout <String> | <Buffer>
        stderr <String> | <Buffer>
        返回值: 同步模式下,将返回一个ShellString(shelljs v0.6.xf返回一个形如{ code:..., stdout:... , stderr:... }的对象);异步模式下,将返回一个child_process的对象
      */
        shell.exec('git clone  ' + result.gitcopy.git + ' ' + result.gitcopy.dir);
      }
      shell.exec('cd ' + result.gitcopy.dir + ' &&  git checkout ' + result.gitcopy.checkout + ' &&  git pull ', function (err, stdout, stderr) {
        if (!err) {
        /**
          cpx.copy(source, dest, options, callback)
          source {string}——复制目标的文件glob。
          dest {string}——目标目录的文件路径。
          options {对象}
              options.clean {boolean}——删除在复制之前复制的文件的标志。默认值:false。
              options.dereference {boolean}——从符号链接复制时跟随符号链接的标志。默认值:false。
              options.includeEmptyDirs {boolean}——复制与glob匹配的空目录的标志。默认值:false。
              options.initialCopy {boolean}——在监视的初始时间不复制的标志。这是cpx.watch()。默认值:真的。
              options.preserve {boolean}——复制文件的uid、gid、atime和mtime的标志。默认值:false。
              options.Transform {((filepath: string) =&gt;stream. transform)[]}——创建流的函数。转换对象以转换每个复制文件。
              options.update {boolean}——如果源文件较旧,则不覆盖目标文件的标志。默认值:false。
           callback {(err: Error|null) => void} -- 在done时调用的函数.
           将匹配源glob的文件复制到dest目录。
        */
          cpx.copy("dist/**", result.gitcopy.dir + result.gitcopy.webapp, {}, function () {
            shell.exec('cd ' + result.gitcopy.dir + '  &&  git pull  &&  git add * && git commit -m "自动更新" && git push', function (err, stdout, stderr) {
              if (err) {
                console.log("No Update!");
              } else {
                console.log("Successful!");
              }
            });
          })
        } else {
          console.log(err);
        }
      });
    }
  } else {
    console.log("配置文件不是有效的object");
  }
}
else {
  console.log('请检查git是否已成功安装和配置文件是否存在!');
}

Измените файл package.json

Узел добавляет следующий код:

{
  "gitcopy": {
    "git": "https://git.jd.com/bt/jd-bt-middle-template.git",
    "dir": "../bt-middle-template-main",
    "webapp": "/bt-middle-template-main/src/main/webapp",
    "checkout": "master_jmm_default_images"
  }
}

Нравится и поддержите, оставьте в руке стойкий аромат, и будьте почитаемы, шевелите своими ручонками, чтобы заработать состояние, спасибо, что оставили свои следы.

Прекрасная рекомендация в прошлом

Front-end Swastika — Основы

Внешний вид 4D-зоны — расширенный

Поговорим о двух наиболее часто используемых инструментах управления во фронтенд-разработке.

Разговор о раздражающих регулярных выражениях

Прикоснись к своей руке и возьми свою печень nodejs (1)

Получите адрес потока большого двоичного объекта файла для реализации функции загрузки.

Рука касается вашей печени Nodejs (2)