UNPKG

t-comm

Version:

专业、稳定、纯粹的工具库

193 lines (186 loc) 7.03 kB
'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;