t-comm
Version:
专业、稳定、纯粹的工具库
193 lines (186 loc) • 7.03 kB
JavaScript
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
var _regeneratorRuntime = require('@babel/runtime/regenerator');
var tslib_es6 = require('../tslib.es6-0d92ef81.js');
var fs_fs = require('../fs/fs.js');
var node_nodeCommand = require('../node/node-command.js');
var nodejs_fs = require('../nodejs/fs.js');
var nodejs_path = require('../nodejs/path.js');
var publish_helper = require('../publish/helper.js');
var thirdParty_fsExtra = require('../third-party/fs-extra.js');
var thirdParty_tar = require('../third-party/tar.js');
require('../nodejs/crypto.js');
require('../nodejs/os.js');
require('@babel/runtime/helpers/typeof');
require('../nodejs/child_process.js');
require('../env-variable/env-variable.js');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
var _regeneratorRuntime__default = /*#__PURE__*/_interopDefaultLegacy(_regeneratorRuntime);
var DEFAULT_HOST_TARGET_DIR = '/root/ft_local';
/**
* 从 package.json 中解析需要打包的文件列表
* @param {object} options 配置
* @param {string} [options.root] 项目根目录,默认为 process.cwd()
* @returns {Array<string>} 文件列表
* @example
* ```ts
* // 使用当前工作目录的 package.json
* const files = resolveFiles();
* // ['dist', 'README.md', '.env.local']
*
* // 指定项目根目录
* const files2 = resolveFiles({ root: '/path/to/project' });
* ```
*/
function resolveFiles() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
_ref$root = _ref.root,
root = _ref$root === void 0 ? process.cwd() : _ref$root;
if (!root) {
root = process.cwd();
}
var pkgPath = nodejs_path.getPath().resolve(root, 'package.json');
var fs = nodejs_fs.getFs();
if (!fs.existsSync(root)) {
throw new Error('ERROR: root 不存在');
}
if (!fs.existsSync(pkgPath)) {
throw new Error('ERROR: package.json 不存在');
}
var _readFileSync = fs_fs.readFileSync(pkgPath, true),
_readFileSync$files = _readFileSync.files,
files = _readFileSync$files === void 0 ? [] : _readFileSync$files;
if (files.indexOf('.env.local') < 0 && fs.existsSync('.env.local')) {
files.push('.env.local');
}
return files;
}
function build(_ref2) {
var files = _ref2.files,
root = _ref2.root,
bundleName = _ref2.bundleName,
_ref2$outputDir = _ref2.outputDir,
outputDir = _ref2$outputDir === void 0 ? 'dist' : _ref2$outputDir;
var resolvedFiles = !files || files.length === 0 ? resolveFiles({
root: root
}) : files;
return new Promise(function (resolve, reject) {
console.log('[build] 开始打包...');
console.log('[build] Files: ', resolvedFiles);
// 创建输出目录
var fse = thirdParty_fsExtra.getFsExtra();
fse.ensureDirSync("./".concat(outputDir));
var tar = thirdParty_tar.getTar();
// 打包
tar.c({
gzip: true,
file: "".concat(outputDir, "/").concat(bundleName, ".tar.gz"),
filter: function filter() {
return true;
}
}, _toConsumableArray__default["default"](resolvedFiles)).then(function () {
console.log('[build] 打包完成');
resolve(true);
})["catch"](function (err) {
console.log('[build] 打包失败');
reject(err);
});
});
}
function upload(_ref3) {
var root = _ref3.root,
bundleName = _ref3.bundleName,
hostName = _ref3.hostName,
hostPwd = _ref3.hostPwd,
_ref3$hostTargetDir = _ref3.hostTargetDir,
hostTargetDir = _ref3$hostTargetDir === void 0 ? DEFAULT_HOST_TARGET_DIR : _ref3$hostTargetDir,
_ref3$wrapHostPwd = _ref3.wrapHostPwd,
wrapHostPwd = _ref3$wrapHostPwd === void 0 ? true : _ref3$wrapHostPwd,
_ref3$outputDir = _ref3.outputDir,
outputDir = _ref3$outputDir === void 0 ? 'dist' : _ref3$outputDir;
if (!hostName || !hostName || !bundleName) {
throw new Error('参数不全');
}
console.log('[upload] 开始上传...');
var publishBash = publish_helper.getPublishBashPath();
var wrappedHostPwd = wrapHostPwd ? "\"".concat(hostPwd, "\"") : hostPwd;
node_nodeCommand.execCommand("sh ".concat(publishBash, " ./").concat(outputDir, "/").concat(bundleName, ".tar.gz ").concat(hostTargetDir, " ").concat(hostName, " ").concat(wrappedHostPwd), root, 'inherit');
console.log('[upload] 上传完成');
}
/**
* 打包并上传到服务器
* @param {object} options 配置
* @param {string} options.hostName 服务器名称
* @param {string} options.hostPwd 服务器密码
* @param {string} [options.root] 项目根目录
* @param {string} [options.bundleName] 打包文件名称
* @param {boolean} [options.wrapHostPwd=true] 是否用双引号包裹密码,默认为 true
* @param {string} [options.outputDir='dist'] 打包输出目录,默认为 'dist'
* @example
*
* await buildAndUpload({
* hostName: '9.9.9.9',
* hostPwd: 'xxxx',
* bundleName: 'cron-job-svr',
* });
*
*/
function buildAndUpload(_ref4) {
var _ref4$root = _ref4.root,
root = _ref4$root === void 0 ? process.cwd() : _ref4$root,
_ref4$bundleName = _ref4.bundleName,
bundleName = _ref4$bundleName === void 0 ? 'bundle' : _ref4$bundleName,
hostName = _ref4.hostName,
hostPwd = _ref4.hostPwd,
hostTargetDir = _ref4.hostTargetDir,
_ref4$wrapHostPwd = _ref4.wrapHostPwd,
wrapHostPwd = _ref4$wrapHostPwd === void 0 ? true : _ref4$wrapHostPwd,
_ref4$outputDir = _ref4.outputDir,
outputDir = _ref4$outputDir === void 0 ? 'dist' : _ref4$outputDir;
return tslib_es6.__awaiter(this, void 0, void 0, /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee() {
var files, flag;
return _regeneratorRuntime__default["default"].wrap(function (_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
files = resolveFiles({
root: root
});
_context.next = 1;
return build({
files: files,
bundleName: bundleName,
outputDir: outputDir
});
case 1:
flag = _context.sent;
if (flag) {
_context.next = 2;
break;
}
return _context.abrupt("return", files);
case 2:
_context.next = 3;
return upload({
root: root,
bundleName: bundleName,
hostName: hostName,
hostPwd: hostPwd,
hostTargetDir: hostTargetDir,
wrapHostPwd: wrapHostPwd,
outputDir: outputDir
});
case 3:
return _context.abrupt("return", files);
case 4:
case "end":
return _context.stop();
}
}, _callee);
}));
}
exports.build = build;
exports.buildAndUpload = buildAndUpload;
exports.resolveFiles = resolveFiles;
exports.upload = upload;