hw-weapp-compiler 1.0.25 → 1.0.26

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.
@@ -5,6 +5,7 @@
5
5
  * 通过增量检测避免重复上传,并展示上传进度。
6
6
  */
7
7
  const path = require('path');
8
+ const chalk = require('chalk');
8
9
  const OBSClient = require('esdk-obs-nodejs');
9
10
  const OSSClient = require('ali-oss');
10
11
  const Progress = require('progress');
@@ -104,18 +105,12 @@ function getObsRuntimeOptions() {
104
105
  }
105
106
 
106
107
  function createObsRequestLogger(operation, file, key) {
107
- const startedAt = Date.now();
108
- const { timeoutSeconds, maxRetryCount, operationTimeoutMs } = getObsRuntimeOptions();
109
108
  const displayFile = getDisplayFile(file);
110
109
 
111
- console.log(`[OBS] ${operation} started: key=${key}, file=${displayFile}`);
112
-
113
110
  const pendingTimer = setTimeout(() => {
114
111
  console.warn(
115
- `[OBS] ${operation} is still pending after ${OBS_PENDING_WARNING_MS / 1000}s: key=${key}, ` +
116
- `server=${obsConfig.server}, bucket=${obsConfig.bucket}, ` +
117
- `sdkTimeout=${timeoutSeconds}s, maxRetryCount=${maxRetryCount}, ` +
118
- `operationTimeout=${operationTimeoutMs / 1000}s`,
112
+ `[OBS] ${operation} pending (${OBS_PENDING_WARNING_MS / 1000}s): ` +
113
+ `file=${displayFile}, key=${key}`,
119
114
  );
120
115
  }, OBS_PENDING_WARNING_MS);
121
116
 
@@ -125,19 +120,8 @@ function createObsRequestLogger(operation, file, key) {
125
120
  }
126
121
 
127
122
  return {
128
- finish(outcome, detail) {
123
+ finish() {
129
124
  clearTimeout(pendingTimer);
130
- const elapsed = Date.now() - startedAt;
131
- const suffix = detail ? `, ${detail}` : '';
132
- const message = `[OBS] ${operation} ${outcome} in ${elapsed}ms: key=${key}${suffix}`;
133
-
134
- if (outcome === 'failed') {
135
- console.error(message);
136
- } else if (outcome === 'miss') {
137
- console.warn(message);
138
- } else {
139
- console.log(message);
140
- }
141
125
  },
142
126
  };
143
127
  }
@@ -150,7 +134,7 @@ function runObsRequest(operation, file, key, request) {
150
134
  let operationTimer;
151
135
  let activeRequest;
152
136
 
153
- const finish = (error, result, outcome) => {
137
+ const finish = (error, result) => {
154
138
  if (settled) {
155
139
  return;
156
140
  }
@@ -158,10 +142,7 @@ function runObsRequest(operation, file, key, request) {
158
142
  settled = true;
159
143
  clearTimeout(operationTimer);
160
144
  activeRequest = null;
161
- requestLogger.finish(
162
- outcome || (error ? 'failed' : 'completed'),
163
- formatObsError(error || result),
164
- );
145
+ requestLogger.finish();
165
146
 
166
147
  if (error) {
167
148
  reject(error);
@@ -226,10 +207,10 @@ function waitForObsClientReady(client) {
226
207
  return;
227
208
  }
228
209
 
229
- setImmediate(checkReady);
210
+ setTimeout(checkReady, 10);
230
211
  };
231
212
 
232
- setImmediate(checkReady);
213
+ setTimeout(checkReady, 0);
233
214
  });
234
215
  }
235
216
 
@@ -314,7 +295,7 @@ async function getObsStat(file) {
314
295
  } else if (status < 300) {
315
296
  finish(null, result);
316
297
  } else {
317
- finish(result, null, 'miss');
298
+ finish(result);
318
299
  }
319
300
  },
320
301
  );
@@ -372,9 +353,18 @@ async function uploadFile(file) {
372
353
  await doUpload(file);
373
354
  setStorage(file, true);
374
355
  } catch (uploadError) {
375
- console.error(
376
- `[assets] upload failed: file=${getDisplayFile(file)}, ${formatObsError(uploadError)}`,
377
- );
356
+ const detail = `file=${getDisplayFile(file)}, ${formatObsError(uploadError)}`;
357
+
358
+ if (ossConfig) {
359
+ console.error(`[assets] upload failed: ${detail}`);
360
+ } else {
361
+ const message = chalk.red(`[OBS] upload failed: ${detail}`);
362
+ if (progress && progress.stream && progress.stream.isTTY) {
363
+ progress.interrupt(message);
364
+ } else {
365
+ console.error(message);
366
+ }
367
+ }
378
368
  }
379
369
  } finally {
380
370
  uploadQueue[file] = 'completed';
@@ -440,10 +430,13 @@ function addToUploadQueue(assets) {
440
430
  }
441
431
  });
442
432
 
443
- console.log(
444
- `[assets] upload queue: provider=${ossConfig ? 'OSS' : 'OBS'}, total=${assets.length}, ` +
445
- `cached=${cachedCount}, pending=${pendingCount}`,
446
- );
433
+ if (ossConfig) {
434
+ console.log(
435
+ `[assets] upload queue: provider=OSS, total=${assets.length}, ` +
436
+ `cached=${cachedCount}, pending=${pendingCount}`,
437
+ );
438
+ }
439
+
447
440
  return pendingCount ? checkUpload() : Promise.resolve();
448
441
  }
449
442
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hw-weapp-compiler",
3
- "version": "1.0.25",
3
+ "version": "1.0.26",
4
4
  "description": "基于 webpack5 的小程序构建工具,兼容 Node.js 14~24",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -4,9 +4,11 @@ const Module = require('module');
4
4
  const os = require('os');
5
5
  const path = require('path');
6
6
 
7
+ let metadataCalledBeforeReady = false;
8
+ let metadataCallCount = 0;
9
+
7
10
  class AsyncOBSClient {
8
11
  constructor(config) {
9
- this.config = config;
10
12
  this.util = {
11
13
  server: null,
12
14
  signatureContext: null,
@@ -20,7 +22,10 @@ class AsyncOBSClient {
20
22
  }
21
23
 
22
24
  getObjectMetadata(_params, callback) {
23
- assert(this.util.signatureContext, 'request started before OBS client initialization');
25
+ metadataCallCount += 1;
26
+ if (!this.util.signatureContext) {
27
+ metadataCalledBeforeReady = true;
28
+ }
24
29
  callback(null, { CommonMsg: { Status: 200 } });
25
30
  }
26
31
  }
@@ -56,6 +61,8 @@ async function run() {
56
61
  const uploadModule = path.resolve(originalCwd, 'build/utils/upload.js');
57
62
  const { addToUploadQueue } = require(uploadModule);
58
63
  await addToUploadQueue(['assets/ready.png']);
64
+ assert.strictEqual(metadataCalledBeforeReady, false, 'request started before client was ready');
65
+ assert.strictEqual(metadataCallCount, 1, 'metadata request should run exactly once');
59
66
 
60
67
  // 等待 storage.js 的防抖写入结束后再清理测试目录。
61
68
  await new Promise((resolve) => setTimeout(resolve, 400));