UNPKG

san-cli-docit

Version:

san-cli-docit 是 [San](https://github.com/baidu/san) CLI 工具中 Markdown 文档建站部分。 是一个 [command 插件](https://ecomfe.github.io/san-cli)。

77 lines (74 loc) 2.49 kB
/** * @file 加载 theme * @author ksky521 */ const path = require('path'); const fs = require('fs'); const defaultTheme = 'san-cli-docit-theme'; const {error} = require('san-cli-utils/ttyLogger'); const defaultLayouts = { template: require.resolve('../template/index.ejs'), CodeBox: require.resolve('../template/CodeBox.san') }; /* eslint-disable operator-linebreak */ module.exports = (theme, context = process.cwd()) => { if (typeof theme !== 'string') { theme = defaultTheme; } const oTheme = theme; if (!path.isAbsolute(theme)) { // 1. 如果是@开头,则引入 if (/^\./.test(theme)) { theme = path.resolve(context, theme); } // 2. 如果是./开头,则相对引入 } let layouts = { Main: 'index.js', Markdown: 'markdown.js', CodeBox: 'CodeBox.san', template: 'index.ejs' }; let contextPath = theme; try { const pkg = require(`${theme}/package.json`); contextPath = path.dirname(require.resolve(`${theme}/package.json`)); if (pkg.docit && pkg.docit.layouts) { layouts = pkg.docit.layouts; // prettier-ignore /* eslint-disable max-len */ if (!layouts.Main || typeof layouts.Main !== 'string' || fs.existsSync(path.resolve(contextPath, layouts.Main))) { error(`\`${oTheme}\` Main layout is not exist!`); } } else { if (fs.existsSync(require.resolve(theme))) { layouts.Main = require.resolve(theme); } else { error(`\`${oTheme}\` Main layout is not exist!`); } } } catch (e) { error(`\`${oTheme}\` error!`); error(e); } Object.keys(layouts).forEach(key => { // TODO 判断下是否存在,不存在则设置默认值? const p = path.resolve(contextPath, layouts[key]); if (key === 'Markdown') { // 单独给 docit x.md 一个文件,如果不存在则直接使用Main layouts[key] = fs.existsSync(p) ? p : layouts.Main ? layouts.Main : p; } else { layouts[key] = fs.existsSync(p) ? p : defaultLayouts[key] ? defaultLayouts[key] : p; } }); // 添加个模板路径 layouts._themePath = theme; // 1. 默认 // 2. 读取配置 package.json,docit.layouts // 3. 处理相对路径 return layouts; };