pug-site-core 2.0.1 → 2.0.3
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/index.js +40 -33
- package/lib/devServer.js +1 -1
- package/lib/generate.js +107 -69
- package/package.json +2 -2
package/index.js
CHANGED
|
@@ -18,37 +18,44 @@ export const pugSiteCore = {
|
|
|
18
18
|
translateLanguageData,
|
|
19
19
|
};
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
let curCmd = process.env.npm_lifecycle_event;
|
|
22
|
+
const args = process.argv.slice(2);
|
|
22
23
|
|
|
23
|
-
//
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
//
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
24
|
+
// 检查是否包含 dev 参数
|
|
25
|
+
if (args.includes("dev")) {
|
|
26
|
+
try {
|
|
27
|
+
switch (curCmd) {
|
|
28
|
+
case "getFun":
|
|
29
|
+
await generateGetDataFn();
|
|
30
|
+
break;
|
|
31
|
+
case "getData":
|
|
32
|
+
await generateGetDataFn();
|
|
33
|
+
// 移除 dev 参数后传递其他参数
|
|
34
|
+
const dataArgs = args.filter((arg) => arg !== "dev");
|
|
35
|
+
await fetchDataToJsonFile(dataArgs);
|
|
36
|
+
break;
|
|
37
|
+
case "dev":
|
|
38
|
+
startDevServer();
|
|
39
|
+
break;
|
|
40
|
+
case "compileFn":
|
|
41
|
+
await compilePagesPugToFn();
|
|
42
|
+
break;
|
|
43
|
+
case "buildFn":
|
|
44
|
+
await buildFn();
|
|
45
|
+
break;
|
|
46
|
+
case "buildStatic":
|
|
47
|
+
await buildStatic();
|
|
48
|
+
break;
|
|
49
|
+
case "lang":
|
|
50
|
+
await translateLanguageData();
|
|
51
|
+
break;
|
|
52
|
+
default:
|
|
53
|
+
console.log(`未知的命令: ${curCmd}`);
|
|
54
|
+
}
|
|
55
|
+
} catch (error) {
|
|
56
|
+
console.error(`执行命令 ${curCmd} 时发生错误:`, error);
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
} else {
|
|
60
|
+
console.log(`请添加 dev 参数以执行命令,例如: npm run getData dev`);
|
|
61
|
+
}
|
package/lib/devServer.js
CHANGED
|
@@ -171,7 +171,7 @@ async function matchRouter(url, language, device) {
|
|
|
171
171
|
for (let index = 0; index < router.length; index++) {
|
|
172
172
|
const obj = router[index];
|
|
173
173
|
if (obj.matchFn.call(params)) {
|
|
174
|
-
let data = obj.getData.call(params);
|
|
174
|
+
let data = await obj.getData.call(params);
|
|
175
175
|
let pugPath = obj.getPagesFnName.call(params);
|
|
176
176
|
pugPath = pugPath.split("_").join(pathSymbol);
|
|
177
177
|
return {
|
package/lib/generate.js
CHANGED
|
@@ -196,12 +196,22 @@ export async function fetchDataToJsonFile(args) {
|
|
|
196
196
|
const getData = await import(paths.getData);
|
|
197
197
|
const pugFilePathList = await getPagesPugFilePathArr();
|
|
198
198
|
|
|
199
|
-
const { languageList, customBuildData,
|
|
199
|
+
const { languageList, customBuildData, fetchDataConcurrencyLimit } = config;
|
|
200
200
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
201
|
+
// 创建一个全局任务队列控制整体并发数
|
|
202
|
+
const queue = async.queue(async (task) => {
|
|
203
|
+
await task();
|
|
204
|
+
}, fetchDataConcurrencyLimit || 10);
|
|
204
205
|
|
|
206
|
+
// 收集所有需要执行的任务
|
|
207
|
+
const allTasks = [];
|
|
208
|
+
|
|
209
|
+
// 过滤出需要处理的语言
|
|
210
|
+
const languagesToProcess = filterLang.length
|
|
211
|
+
? languageList.filter((lang) => filterLang.includes(lang))
|
|
212
|
+
: languageList;
|
|
213
|
+
|
|
214
|
+
for (const language of languagesToProcess) {
|
|
205
215
|
// 清空指定语言的数据目录
|
|
206
216
|
if (filterLang.includes(language) && !filterFun.length) {
|
|
207
217
|
await fse.remove(paths.resolveRoot("jsonData", language));
|
|
@@ -210,67 +220,73 @@ export async function fetchDataToJsonFile(args) {
|
|
|
210
220
|
// 处理公共数据
|
|
211
221
|
const commonFuncName = "get_common_data";
|
|
212
222
|
if (isFillFun(commonFuncName)) {
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
223
|
+
allTasks.push(async () => {
|
|
224
|
+
const commonData = await getData[commonFuncName](language);
|
|
225
|
+
console.log(language, commonFuncName, "开始写入json文件");
|
|
226
|
+
await fse.outputJSON(
|
|
227
|
+
paths.resolveRoot("jsonData", language, "_common.json"),
|
|
228
|
+
commonData
|
|
229
|
+
);
|
|
230
|
+
});
|
|
219
231
|
}
|
|
220
232
|
|
|
221
233
|
// 处理自定义数据
|
|
222
234
|
if (customBuildData?.length) {
|
|
223
|
-
|
|
235
|
+
for (const obj of customBuildData) {
|
|
224
236
|
if (
|
|
225
237
|
obj.includeLang &&
|
|
226
238
|
obj.includeLang.length > 0 &&
|
|
227
239
|
!obj.includeLang.includes(language)
|
|
228
240
|
) {
|
|
229
|
-
|
|
241
|
+
continue;
|
|
230
242
|
}
|
|
243
|
+
|
|
231
244
|
let dataFn = getData[obj.getDataFn];
|
|
232
245
|
if (!dataFn || typeof dataFn !== "function") {
|
|
233
246
|
return Promise.reject(new Error(obj.getDataFn + "获取数据函数不存在"));
|
|
234
247
|
}
|
|
235
248
|
|
|
236
|
-
if (filterFun.length && !filterFun.includes(
|
|
237
|
-
|
|
249
|
+
if (filterFun.length && !filterFun.includes(obj.getDataFn)) {
|
|
250
|
+
continue;
|
|
238
251
|
}
|
|
239
252
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
253
|
+
allTasks.push(async () => {
|
|
254
|
+
let data = await dataFn(language);
|
|
255
|
+
await checkData(data, language, obj.getDataFn);
|
|
256
|
+
console.log(language, obj.getDataFn, "开始写入json文件");
|
|
257
|
+
let outPutPath = obj.outPutPath.split("/").join(pathSymbol);
|
|
258
|
+
if (Array.isArray(data)) {
|
|
259
|
+
let name = outPutPath.split(pathSymbol).pop().replace(/\..*$/, "");
|
|
260
|
+
const regex = /^\[.+\]$/;
|
|
261
|
+
if (regex.test(name)) {
|
|
262
|
+
let property = name.slice(1, -1);
|
|
263
|
+
for (let index = 0; index < data.length; index++) {
|
|
264
|
+
const dataItem = data[index];
|
|
265
|
+
let fileName = dataItem[property];
|
|
266
|
+
if (!fileName) {
|
|
267
|
+
return Promise.reject(
|
|
268
|
+
new Error(
|
|
269
|
+
`${language} ${obj.getDataFn} 获取的数据中期望以${property}属性命名文件但是${index}下标中对象属性不存在或者为空字符串`
|
|
270
|
+
)
|
|
271
|
+
);
|
|
272
|
+
}
|
|
273
|
+
await saveJsonData(
|
|
274
|
+
paths.join(language, outPutPath.replace(name, fileName)),
|
|
275
|
+
dataItem
|
|
257
276
|
);
|
|
258
277
|
}
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
dataItem
|
|
262
|
-
);
|
|
278
|
+
} else {
|
|
279
|
+
await saveJsonData(paths.join(language, outPutPath), data);
|
|
263
280
|
}
|
|
264
|
-
} else {
|
|
281
|
+
} else if (typeof data === "object") {
|
|
265
282
|
await saveJsonData(paths.join(language, outPutPath), data);
|
|
266
283
|
}
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
}
|
|
270
|
-
});
|
|
284
|
+
});
|
|
285
|
+
}
|
|
271
286
|
}
|
|
272
287
|
|
|
273
|
-
|
|
288
|
+
// 处理模板页面数据
|
|
289
|
+
for (const fileName of pugFilePathList) {
|
|
274
290
|
let funName =
|
|
275
291
|
"get_" + fileName.split(pathSymbol).join("_").slice(0, -4) + "_data";
|
|
276
292
|
|
|
@@ -278,42 +294,64 @@ export async function fetchDataToJsonFile(args) {
|
|
|
278
294
|
if (!getData[funName] || typeof getData[funName] !== "function") {
|
|
279
295
|
return Promise.reject(new Error(`${funName} 获取数据函数不存在`));
|
|
280
296
|
}
|
|
297
|
+
|
|
281
298
|
if (filterFun.length && !filterFun.includes(funName)) {
|
|
282
|
-
|
|
299
|
+
continue;
|
|
283
300
|
}
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
301
|
+
|
|
302
|
+
allTasks.push(async () => {
|
|
303
|
+
let data = await getData[funName](language);
|
|
304
|
+
await checkData(data, language, funName);
|
|
305
|
+
console.log(language, funName, "开始写入json文件");
|
|
306
|
+
if (Array.isArray(data)) {
|
|
307
|
+
for (let index = 0; index < data.length; index++) {
|
|
308
|
+
const item = data[index];
|
|
309
|
+
let lastJsonFilePath;
|
|
310
|
+
if (item.page_name) {
|
|
311
|
+
lastJsonFilePath = paths.join(
|
|
312
|
+
language,
|
|
313
|
+
...jsonFilePath.slice(0, -1),
|
|
314
|
+
item.page_name
|
|
315
|
+
);
|
|
316
|
+
} else {
|
|
317
|
+
console.warn("下标:", index, "无page_name属性,使用index作为文件名");
|
|
318
|
+
lastJsonFilePath =
|
|
319
|
+
paths.join(language, ...jsonFilePath) +
|
|
320
|
+
"_" +
|
|
321
|
+
(index + 1) +
|
|
322
|
+
".json";
|
|
323
|
+
}
|
|
324
|
+
item._template = fileName;
|
|
325
|
+
await saveJsonData(lastJsonFilePath, item);
|
|
326
|
+
}
|
|
327
|
+
} else {
|
|
328
|
+
if (data.page_name) {
|
|
329
|
+
jsonFilePath = paths.join(
|
|
292
330
|
language,
|
|
293
331
|
...jsonFilePath.slice(0, -1),
|
|
294
|
-
|
|
332
|
+
data.page_name
|
|
295
333
|
);
|
|
296
334
|
} else {
|
|
297
|
-
|
|
298
|
-
lastJsonFilePath =
|
|
299
|
-
paths.join(language, ...jsonFilePath) + "_" + ++index + ".json";
|
|
335
|
+
jsonFilePath = paths.join(language, ...jsonFilePath) + ".json";
|
|
300
336
|
}
|
|
301
|
-
|
|
302
|
-
await saveJsonData(
|
|
303
|
-
});
|
|
304
|
-
} else {
|
|
305
|
-
if (data.page_name) {
|
|
306
|
-
jsonFilePath = paths.join(
|
|
307
|
-
language,
|
|
308
|
-
...jsonFilePath.slice(0, -1),
|
|
309
|
-
data.page_name
|
|
310
|
-
);
|
|
311
|
-
} else {
|
|
312
|
-
jsonFilePath = paths.join(language, ...jsonFilePath) + ".json";
|
|
337
|
+
data._template = fileName;
|
|
338
|
+
await saveJsonData(jsonFilePath, data);
|
|
313
339
|
}
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
// 将所有任务添加到队列
|
|
345
|
+
allTasks.forEach((task) => queue.push(task));
|
|
346
|
+
|
|
347
|
+
// 等待所有任务完成
|
|
348
|
+
return new Promise((resolve, reject) => {
|
|
349
|
+
queue.drain(() => {
|
|
350
|
+
resolve();
|
|
351
|
+
});
|
|
352
|
+
|
|
353
|
+
queue.error((err) => {
|
|
354
|
+
reject(err);
|
|
317
355
|
});
|
|
318
356
|
});
|
|
319
357
|
} catch (error) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pug-site-core",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.3",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"axios": "^1.7.7"
|
|
38
38
|
},
|
|
39
39
|
"license": "ISC",
|
|
40
|
-
"description": "
|
|
40
|
+
"description": "优化并发处理现在可以精细到一个数据请求",
|
|
41
41
|
"files": [
|
|
42
42
|
"lib/",
|
|
43
43
|
"index.js"
|