@kkkwww/deploy 1.0.14 → 1.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.js +104 -169
- package/lib/index.js.map +1 -1
- package/package.json +2 -1
package/lib/index.js
CHANGED
|
@@ -14,154 +14,96 @@ import os from 'os';
|
|
|
14
14
|
import SftpClient from 'ssh2-sftp-client';
|
|
15
15
|
import { fileURLToPath } from 'url';
|
|
16
16
|
// ==========================
|
|
17
|
-
// ESM 兼容 __dirname
|
|
18
|
-
// ==========================
|
|
19
17
|
const __filename = fileURLToPath(import.meta.url);
|
|
20
18
|
const __dirname = path.dirname(__filename);
|
|
21
19
|
// ==========================
|
|
22
|
-
// 读取 package.json 版本号
|
|
23
|
-
// ==========================
|
|
24
|
-
let VERSION = '0.0.0';
|
|
25
|
-
try {
|
|
26
|
-
const pkgPath = path.resolve(__dirname, '../package.json');
|
|
27
|
-
if (fs.existsSync(pkgPath)) {
|
|
28
|
-
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
|
29
|
-
VERSION = pkg.version || '0.0.0';
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
catch (e) { }
|
|
33
|
-
// ==========================
|
|
34
|
-
// 多线程配置
|
|
35
|
-
// ==========================
|
|
36
20
|
const CONCURRENCY = 5;
|
|
37
|
-
// ==========================
|
|
38
|
-
// 缓存文件
|
|
39
|
-
// ==========================
|
|
40
21
|
const CACHE_FILE = path.join(os.homedir(), '.deploy-cache.json');
|
|
41
|
-
const SKIP_LOG_FILE = path.join(os.homedir(), '.deploy-skip.log');
|
|
42
|
-
// ==========================
|
|
43
|
-
// 解析命令行
|
|
22
|
+
const SKIP_LOG_FILE = path.join(os.homedir(), '.deploy-skip.log');
|
|
44
23
|
// ==========================
|
|
45
24
|
function getArgs() {
|
|
46
25
|
const args = {};
|
|
47
26
|
process.argv.slice(2).forEach((arg) => {
|
|
48
27
|
if (arg.startsWith('--')) {
|
|
49
28
|
const [key, ...valArr] = arg.slice(2).split('=');
|
|
50
|
-
args[key] = valArr.join('=');
|
|
29
|
+
args[key] = valArr.join('=') || 'true';
|
|
51
30
|
}
|
|
52
31
|
});
|
|
53
32
|
return args;
|
|
54
33
|
}
|
|
55
34
|
// ==========================
|
|
56
|
-
// 读取缓存
|
|
57
|
-
// ==========================
|
|
58
35
|
function loadCache() {
|
|
59
36
|
try {
|
|
60
37
|
if (fs.existsSync(CACHE_FILE)) {
|
|
61
|
-
|
|
62
|
-
return JSON.parse(data);
|
|
38
|
+
return JSON.parse(fs.readFileSync(CACHE_FILE, 'utf8'));
|
|
63
39
|
}
|
|
64
40
|
}
|
|
65
|
-
catch (
|
|
41
|
+
catch (_a) { }
|
|
66
42
|
return {};
|
|
67
43
|
}
|
|
68
44
|
// ==========================
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const cache = {
|
|
74
|
-
host: config.host,
|
|
75
|
-
port: config.port,
|
|
76
|
-
user: config.user,
|
|
77
|
-
password: config.password,
|
|
78
|
-
remotePath: config.remotePath,
|
|
79
|
-
backup: config.backup,
|
|
80
|
-
};
|
|
81
|
-
fs.writeFileSync(CACHE_FILE, JSON.stringify(cache, null, 2));
|
|
82
|
-
}
|
|
83
|
-
catch (e) { }
|
|
45
|
+
function saveCache(host, config) {
|
|
46
|
+
const all = loadCache();
|
|
47
|
+
all[host] = config;
|
|
48
|
+
fs.writeFileSync(CACHE_FILE, JSON.stringify(all, null, 2));
|
|
84
49
|
}
|
|
85
50
|
// ==========================
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
51
|
+
function logSkip(local, remote) {
|
|
52
|
+
const line = `${new Date().toISOString()} ⚡ 跳过 本地: ${local} → 远程: ${remote}\n`;
|
|
53
|
+
fs.appendFileSync(SKIP_LOG_FILE, line);
|
|
54
|
+
console.log(line.trim());
|
|
90
55
|
}
|
|
91
56
|
// ==========================
|
|
92
|
-
|
|
93
|
-
// ==========================
|
|
94
|
-
function isSameFile(sftp, localFile, remoteFile) {
|
|
57
|
+
function isSameFile(sftp, local, remote) {
|
|
95
58
|
return __awaiter(this, void 0, void 0, function* () {
|
|
96
59
|
try {
|
|
97
|
-
const
|
|
98
|
-
const
|
|
99
|
-
|
|
100
|
-
Math.floor(
|
|
101
|
-
return true;
|
|
102
|
-
}
|
|
60
|
+
const l = fs.statSync(local);
|
|
61
|
+
const r = yield sftp.stat(remote);
|
|
62
|
+
return (l.size === r.size &&
|
|
63
|
+
Math.floor(l.mtimeMs / 1000) === Math.floor(r.modifyTime / 1000));
|
|
103
64
|
}
|
|
104
|
-
catch (
|
|
65
|
+
catch (_a) {
|
|
105
66
|
return false;
|
|
106
67
|
}
|
|
107
|
-
return false;
|
|
108
68
|
});
|
|
109
69
|
}
|
|
110
70
|
// ==========================
|
|
111
|
-
// 写跳过日志
|
|
112
|
-
// ==========================
|
|
113
|
-
function logSkip(fileName) {
|
|
114
|
-
const logLine = `${new Date().toISOString()} ⚡ 跳过已存在文件:${fileName}\n`;
|
|
115
|
-
fs.appendFileSync(SKIP_LOG_FILE, logLine);
|
|
116
|
-
console.log(logLine.trim());
|
|
117
|
-
}
|
|
118
|
-
// ==========================
|
|
119
|
-
// 确保远程目录存在(逐级创建)
|
|
120
|
-
// ==========================
|
|
121
71
|
function ensureRemoteDir(sftp, remoteDir) {
|
|
122
72
|
return __awaiter(this, void 0, void 0, function* () {
|
|
123
|
-
const
|
|
124
|
-
let
|
|
125
|
-
for (const
|
|
126
|
-
|
|
73
|
+
const parts = remoteDir.split('/').filter(Boolean);
|
|
74
|
+
let cur = '';
|
|
75
|
+
for (const p of parts) {
|
|
76
|
+
cur += '/' + p;
|
|
127
77
|
try {
|
|
128
|
-
yield sftp.stat(
|
|
78
|
+
yield sftp.stat(cur);
|
|
129
79
|
}
|
|
130
|
-
catch (
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
console.log(`📁 创建远程目录:${current}`);
|
|
134
|
-
}
|
|
135
|
-
catch (err) {
|
|
136
|
-
console.error(`❌ 创建目录失败:${current}`, err);
|
|
137
|
-
}
|
|
80
|
+
catch (_a) {
|
|
81
|
+
yield sftp.mkdir(cur);
|
|
82
|
+
console.log(`📁 创建目录:${cur}`);
|
|
138
83
|
}
|
|
139
84
|
}
|
|
140
85
|
});
|
|
141
86
|
}
|
|
142
87
|
// ==========================
|
|
143
|
-
|
|
144
|
-
// ==========================
|
|
145
|
-
function uploadFile(sftp, localFile, remoteFile) {
|
|
88
|
+
function uploadFile(sftp, local, remote) {
|
|
146
89
|
return __awaiter(this, void 0, void 0, function* () {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
logSkip(fileName);
|
|
90
|
+
if (yield isSameFile(sftp, local, remote)) {
|
|
91
|
+
logSkip(local, remote);
|
|
150
92
|
return;
|
|
151
93
|
}
|
|
152
|
-
const
|
|
94
|
+
const size = fs.statSync(local).size;
|
|
153
95
|
let uploaded = 0;
|
|
154
|
-
console.log(`\n📤 上传:${
|
|
96
|
+
console.log(`\n📤 上传:${local} → ${remote}`);
|
|
155
97
|
return new Promise((resolve, reject) => {
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
uploaded +=
|
|
159
|
-
const pct = ((uploaded /
|
|
160
|
-
process.stdout.write(`
|
|
98
|
+
const rs = fs.createReadStream(local);
|
|
99
|
+
rs.on('data', (c) => {
|
|
100
|
+
uploaded += c.length;
|
|
101
|
+
const pct = ((uploaded / size) * 100).toFixed(1);
|
|
102
|
+
process.stdout.write(` ${pct}% (${uploaded}/${size})\r`);
|
|
161
103
|
});
|
|
162
|
-
sftp.put(
|
|
104
|
+
sftp.put(rs, remote)
|
|
163
105
|
.then(() => {
|
|
164
|
-
console.log(` ✅
|
|
106
|
+
console.log(` ✅ 完成`);
|
|
165
107
|
resolve();
|
|
166
108
|
})
|
|
167
109
|
.catch(reject);
|
|
@@ -169,117 +111,110 @@ function uploadFile(sftp, localFile, remoteFile) {
|
|
|
169
111
|
});
|
|
170
112
|
}
|
|
171
113
|
// ==========================
|
|
172
|
-
|
|
173
|
-
// ==========================
|
|
174
|
-
function uploadWithConcurrency(tasks, concurrency) {
|
|
114
|
+
function uploadWithConcurrency(tasks) {
|
|
175
115
|
return __awaiter(this, void 0, void 0, function* () {
|
|
176
|
-
const
|
|
177
|
-
for (const
|
|
178
|
-
const p =
|
|
179
|
-
|
|
180
|
-
if (
|
|
181
|
-
yield Promise.race(
|
|
116
|
+
const pool = new Set();
|
|
117
|
+
for (const t of tasks) {
|
|
118
|
+
const p = t().finally(() => pool.delete(p));
|
|
119
|
+
pool.add(p);
|
|
120
|
+
if (pool.size >= CONCURRENCY) {
|
|
121
|
+
yield Promise.race(pool);
|
|
182
122
|
}
|
|
183
123
|
}
|
|
184
|
-
yield Promise.all(
|
|
124
|
+
yield Promise.all(pool);
|
|
185
125
|
});
|
|
186
126
|
}
|
|
187
127
|
// ==========================
|
|
188
|
-
|
|
189
|
-
// ==========================
|
|
190
|
-
function uploadDirConcurrent(sftp, localDir, remoteDir) {
|
|
128
|
+
function uploadDir(sftp, localDir, remoteDir) {
|
|
191
129
|
return __awaiter(this, void 0, void 0, function* () {
|
|
192
130
|
yield ensureRemoteDir(sftp, remoteDir);
|
|
193
|
-
const
|
|
131
|
+
const list = fs.readdirSync(localDir);
|
|
194
132
|
const tasks = [];
|
|
195
|
-
for (const
|
|
196
|
-
const local = path.join(localDir,
|
|
197
|
-
const remote = path.posix.join(remoteDir,
|
|
133
|
+
for (const f of list) {
|
|
134
|
+
const local = path.join(localDir, f);
|
|
135
|
+
const remote = path.posix.join(remoteDir, f);
|
|
198
136
|
const stat = fs.statSync(local);
|
|
199
137
|
if (stat.isDirectory()) {
|
|
200
|
-
yield
|
|
138
|
+
yield uploadDir(sftp, local, remote);
|
|
201
139
|
}
|
|
202
140
|
else {
|
|
203
141
|
tasks.push(() => uploadFile(sftp, local, remote));
|
|
204
142
|
}
|
|
205
143
|
}
|
|
206
|
-
yield uploadWithConcurrency(tasks
|
|
144
|
+
yield uploadWithConcurrency(tasks);
|
|
207
145
|
});
|
|
208
146
|
}
|
|
209
147
|
// ==========================
|
|
210
|
-
// 主逻辑
|
|
211
|
-
// ==========================
|
|
212
148
|
function run() {
|
|
213
149
|
return __awaiter(this, void 0, void 0, function* () {
|
|
214
|
-
|
|
215
|
-
const
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
}
|
|
224
|
-
const cache = loadCache();
|
|
225
|
-
const argParams = getArgs();
|
|
226
|
-
const config = {
|
|
227
|
-
host: argParams.host || cache.host,
|
|
228
|
-
port: Number(argParams.port || cache.port) || 22,
|
|
229
|
-
user: argParams.user || cache.user,
|
|
230
|
-
password: argParams.password || cache.password,
|
|
231
|
-
localPath: argParams.local,
|
|
232
|
-
remotePath: argParams.remote || cache.remotePath,
|
|
233
|
-
backup: argParams.backup === 'false' ? false : ((_a = cache.backup) !== null && _a !== void 0 ? _a : true),
|
|
234
|
-
};
|
|
235
|
-
console.log(JSON.stringify(config, null, 2));
|
|
236
|
-
if (!config.host || !config.user || !config.localPath || !config.remotePath) {
|
|
150
|
+
const args = getArgs();
|
|
151
|
+
const host = args.host;
|
|
152
|
+
const port = Number(args.port || 22);
|
|
153
|
+
const user = args.user || args.username;
|
|
154
|
+
const password = args.password;
|
|
155
|
+
const localPath = args.local || args.dir;
|
|
156
|
+
const remotePath = args.remote || args.serverDir;
|
|
157
|
+
const backup = args.backup !== 'false';
|
|
158
|
+
if (!host || !user || !password || !localPath || !remotePath) {
|
|
237
159
|
console.log(`
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
│ 关闭备份:--backup=false
|
|
244
|
-
│ 版本查看:-v / --version
|
|
245
|
-
└───────────────────────────────────────────┘
|
|
246
|
-
`);
|
|
160
|
+
用法:
|
|
161
|
+
--host=IP --user=root --password=xxx
|
|
162
|
+
--local=./dist 或 --dir=./dist
|
|
163
|
+
--remote=/www/app 或 --serverDir=/www/app
|
|
164
|
+
`);
|
|
247
165
|
return;
|
|
248
166
|
}
|
|
249
|
-
|
|
250
|
-
console.log('
|
|
167
|
+
const config = { host, port, user, password, localPath, remotePath, backup };
|
|
168
|
+
console.log('配置:\n', config);
|
|
251
169
|
const sftp = new SftpClient();
|
|
252
170
|
try {
|
|
253
|
-
console.log('🔗 连接服务器中...');
|
|
254
171
|
yield sftp.connect(config);
|
|
255
|
-
console.log('✅
|
|
256
|
-
|
|
172
|
+
console.log('✅ 已连接\n');
|
|
173
|
+
// ======================
|
|
174
|
+
// 根目录处理逻辑
|
|
175
|
+
// ======================
|
|
176
|
+
const localAbs = path.resolve(localPath);
|
|
177
|
+
const baseName = path.basename(localAbs);
|
|
178
|
+
const keepRoot = remotePath.endsWith('/');
|
|
179
|
+
const finalRemote = keepRoot
|
|
180
|
+
? path.posix.join(remotePath, baseName)
|
|
181
|
+
: remotePath;
|
|
182
|
+
console.log(keepRoot
|
|
183
|
+
? `📁 保留根目录:${baseName}`
|
|
184
|
+
: `📂 不保留根目录,仅上传内容`);
|
|
185
|
+
console.log(`🚀 ${localAbs} → ${finalRemote}`);
|
|
186
|
+
// ======================
|
|
187
|
+
// 备份
|
|
188
|
+
// ======================
|
|
189
|
+
if (backup) {
|
|
257
190
|
try {
|
|
258
|
-
yield sftp.stat(
|
|
259
|
-
const backupPath =
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
}
|
|
263
|
-
catch (e) {
|
|
264
|
-
console.log('ℹ 远程目录不存在,跳过备份');
|
|
191
|
+
yield sftp.stat(finalRemote);
|
|
192
|
+
const backupPath = finalRemote + '_bak_' + Date.now();
|
|
193
|
+
yield sftp.rename(finalRemote, backupPath);
|
|
194
|
+
console.log(`📦 已备份 → ${backupPath}`);
|
|
265
195
|
}
|
|
196
|
+
catch (_a) { }
|
|
266
197
|
}
|
|
267
|
-
|
|
198
|
+
// ======================
|
|
199
|
+
// 上传
|
|
200
|
+
// ======================
|
|
268
201
|
if (fs.statSync(localAbs).isDirectory()) {
|
|
269
|
-
|
|
270
|
-
yield uploadDirConcurrent(sftp, localAbs, config.remotePath);
|
|
202
|
+
yield uploadDir(sftp, localAbs, finalRemote);
|
|
271
203
|
}
|
|
272
204
|
else {
|
|
273
|
-
yield uploadFile(sftp, localAbs,
|
|
205
|
+
yield uploadFile(sftp, localAbs, finalRemote);
|
|
274
206
|
}
|
|
275
|
-
console.log('\n🎉
|
|
207
|
+
console.log('\n🎉 完成');
|
|
208
|
+
// ✅ 最后保存缓存
|
|
209
|
+
saveCache(host, config);
|
|
210
|
+
console.log('✅ 已缓存');
|
|
276
211
|
}
|
|
277
|
-
catch (
|
|
278
|
-
console.error('
|
|
212
|
+
catch (e) {
|
|
213
|
+
console.error('❌ 错误', e.message);
|
|
279
214
|
}
|
|
280
215
|
finally {
|
|
281
216
|
yield sftp.end();
|
|
282
|
-
console.log('🔌
|
|
217
|
+
console.log('🔌 已断开');
|
|
283
218
|
}
|
|
284
219
|
});
|
|
285
220
|
}
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;AACA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,6BAA6B;AAC7B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kkkwww/deploy",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.16",
|
|
4
4
|
"description": "简易部署工具",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"lib"
|
|
11
11
|
],
|
|
12
12
|
"scripts": {
|
|
13
|
+
"dev": "ts-node src/index --host=127.0.0.1 --local=src --remote=/www/okx-api/ --user=ubuntu --password=1111",
|
|
13
14
|
"build": "tsc",
|
|
14
15
|
"pub": "npm publish --access=public --registry=https://registry.npmjs.org/"
|
|
15
16
|
},
|