UNPKG

use-on-demand

Version:
185 lines 9.36 kB
import { __assign, __awaiter, __generator, __read, __spread } from "tslib"; import { xX_SRegexp_Helper } from '../../symbol-regexp/SRegexp_Helper'; import { xX_ExceptionError_Helper } from '../../exception-error/ExceptionError_Helper'; var xX_Sitemap_Helper = /** @class */ (function () { function xX_Sitemap_Helper() { } /** * 参考资料: * https://www.npmjs.com/package/sitemap-generator * https://github.com/lgraubner/sitemap-generator */ xX_Sitemap_Helper.generateSiteMap_useLib = function () { // const SitemapGenerator = require('sitemap-generator'); var SitemapGenerator = require('advanced-sitemap-generator'); // 创建生成器 var generator = SitemapGenerator( // 'https://hanshou101.github.io', // 遇到了安全性问题 // 'http://hanshou101.github.io', // 会自动跳转到【https】协议 // 'http://localhost:28080', // 只抓到了一个 'http://192.168.50.39:28080', // 'http://www.cnpaf.net/class/http/', { maxDepth: 99999, filepath: './lib-docs-dist/sitemap.xml', maxEntriesPerFile: 50000, stripQuerystring: false, // // WARN 以下属性,都是猜测的属性 allowInitialDomainChange: true, timeout: 999999, listenerTTL: 999999, }); // 事件监听 generator.on('done', function () { console.log('已经完成'); // const crawler = generator.getCrawler(); // const sitemap = generator.getSitemap(); // console.log('crawler', crawler); // console.log('sitemap', sitemap); // console.log('sitemap输出文件', sitemap.getPaths()); }); generator.on('error', function (error) { console.log('error', error); // => { code: 404, message: 'Not found.', url: 'http://example.com/foo' } }); generator.on('add', function (url) { console.log('add', url); // log url }); generator.on('fetch', function (status, url) { console.log(status, url); }); generator.on('clienterror', function (queueError, errorData) { console.log(queueError, errorData); }); generator.on('ignore', function (url) { console.log('ignore', url); // log ignored url }); // 开始【Crawler】爬行 generator.start(); }; /** * 手动生成【sitemap.xml】。 * 1. * 2. */ xX_Sitemap_Helper.generateSiteMap_manual = function ( // 配置选项 cfg) { if (cfg === void 0) { cfg = { /** * 参考资料: * 【greenrock2006】的回答:http://zhidao.baidu.com/question/1793260?sharesource=qzone * 常见网页格式,列表:https://zh.wikipedia.org/wiki/%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F%E5%88%97%E8%A1%A8#%E7%B6%B2%E9%A0%81%E7%A8%8B%E5%BC%8F */ exts: [ // 'js', 'mdx', 'html', 'htm', 'asp', 'php', 'jsp', 'nsp', 'xhtml', 'shtml', ], baseDir: 'lib-docs-dist', website: 'https://hanshou101.github.io', }; } return __awaiter(this, void 0, void 0, function () { /** * 使用【globby】的方法。 */ function from_globbyLib() { return __awaiter(this, void 0, void 0, function () { var pages; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, globby(querySyntax, { cwd: process.cwd(), gitignore: false, })]; case 1: pages = _a.sent(); return [2 /*return*/, { pages: pages, }]; } }); }); } /** * 使用【glob】的方法 */ function from_rawGlobLib() { // WARN 只支持【单个glob表达式】! var pages = require('glob').sync(querySyntax[0], // 'lib-docs-dist/**/*.html', {}); return { pages: pages, }; } var fs, globby, prettier, prettierConfig, querySyntax, pages, sitemap, formatted; return __generator(this, function (_a) { switch (_a.label) { case 0: if (cfg.website.endsWith('/')) { throw new Error(xX_ExceptionError_Helper.throwError_andLog('尾部不能带【/】号')); } if (cfg.exts.length <= 1) { throw new Error(xX_ExceptionError_Helper.throwError_andLog('因为使用了【{}】语法,所以必须至少有2个元素!!!不然会出现意外')); } fs = require('fs'); globby = require('globby'); prettier = require('prettier'); prettierConfig = { // 手动指定【配置】 // semi : false, // parser: 'babel', }; querySyntax = [ // 【js】、【mdx】。 形如:【'pages/**/*{.js,.mdx}'】 // WARN 采用动态拼接,将来更好修改。 // FIXME 此处,切记一个Bug————【最前面要加 / 斜杠】。具体原因,好像【加了 是根目录】,【不加 是当前目录】。 // WARN 后来,又发现 是不用加【/ 斜杠】的!!! cfg.baseDir + "/**/*{" + // 形如 【.js,.mdx】 cfg.exts.map(function (e) { return "." + e; }).join(',') /* + ',' */ // WARN 此处,Glob的列表,单个元素时,必须要在末尾加逗号!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + "}", "!" + cfg.baseDir + "/_*.js", "!" + cfg.baseDir + "/api", ]; return [4 /*yield*/, from_globbyLib()]; case 1: pages = (_a.sent()).pages; // const { pages } = await from_rawGlobLib(); console.log('查找格式', querySyntax); console.log('查找到的页面', pages); sitemap = "\n <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n " + pages.map(function (page) { // const path = page // .replace('pages', '') // 去除前面的【pages】前缀 // .replace('.js', '') // 去除后面的【js】后缀 // .replace('.mdx', ''); // 去除后面的【.mdx】后缀 // TIP 去除行首目录,去除行尾后缀名。 var path = __spread([ new RegExp("^" + xX_SRegexp_Helper.escapeRegex("" + cfg.baseDir)) ], cfg.exts.map(function (e) { return new RegExp("." + ("" + xX_SRegexp_Helper.escapeRegex(e)) + "$"); // 后缀名。且是行尾 })).reduce(function (preObj, curItem) { return preObj.replace(curItem, ''); }, page); console.log('path', path); // WARN 处理【根路由】的情况 var route = path === '/index' ? '' : path; return "\n\t\t\t\t\t\t\t\t<url>\n\t\t\t\t\t\t\t\t\t\t<loc>" + cfg.website + route + "</loc>\n\t\t\t\t\t\t\t\t</url>\n "; }).join('') + "\n </urlset>\n "; formatted = prettier.format(sitemap, __assign(__assign({}, prettierConfig), { parser: 'html' })); fs.writeFileSync(cfg.baseDir + "/sitemap.xml", formatted); return [2 /*return*/, true]; } }); }); }; return xX_Sitemap_Helper; }()); export { xX_Sitemap_Helper }; //# sourceMappingURL=Sitemap_Helper.js.map