Это 8-й день моего участия в августовском испытании обновлений.Подробности о событии:Испытание августовского обновления
место действия:В режиме разделения фронтенда и бэкэнда, а фронтенд развернут на бэкенде, необходимо отправить код в каталог git бэкэнда после упаковки каждого фронтенда. Поэтому я написал следующую программу.
монтажный комплект
npm i cpx shelljs --save-dev
См. китайскую документацию по облачным оболочкам
Корневой каталог проекта Добавить файл 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) =>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"
}
}
Нравится и поддержите, оставьте в руке стойкий аромат, и будьте почитаемы, шевелите своими ручонками, чтобы заработать состояние, спасибо, что оставили свои следы.
Прекрасная рекомендация в прошлом
Внешний вид 4D-зоны — расширенный
Поговорим о двух наиболее часто используемых инструментах управления во фронтенд-разработке.
Разговор о раздражающих регулярных выражениях
Прикоснись к своей руке и возьми свою печень nodejs (1)
Получите адрес потока большого двоичного объекта файла для реализации функции загрузки.