UNPKG

@wgoo/cli

Version:

Wgoo Cli 是一个 React 组件库构建工具,通过 Wgoo Cli 可以快速搭建一套功能完备的 React 组件库。

102 lines (84 loc) 2.2 kB
const { join } = require('path'); const { existsSync, readdirSync } = require('fs-extra'); const { SRC_DIR, SITE_MODILE_SHARED_FILE } = require('../common/constant'); const { pascalize, removeExt, decamelize, getWgooConfig, smartOutputFile, normalizePath, } = require('../common'); function genInstall() { return `import packageEntry from './package-entry'; import './package-style'; `; } function genImports(demos) { return demos .map( (item) => `import ${item.name} from '${removeExt(normalizePath(item.path))}';` ) .join('\n'); } function genExports(demos) { return `export const demos = {\n ${demos .map((item) => item.name) .join(',\n ')}\n};`; } function getSetName(demos) { return demos .map((item) => ` ${item.name}.name = 'demo-${item.component}';`) .join('\n'); } function genConfig(demos) { const wgooConfig = getWgooConfig(); const demoNames = demos.map((item) => decamelize(item.name)); function demoFilter(nav) { return nav.filter((group) => { group.items = group.items.filter((item) => demoNames.includes(item.path) ); return group.items.length; }); } const { nav, locales } = wgooConfig.site; if (locales) { Object.keys(locales).forEach((lang) => { if (locales[lang].nav) { locales[lang].nav = demoFilter(locales[lang].nav); } }); } else if (nav) { wgooConfig.site.nav = demoFilter(nav); } return `export const config = ${JSON.stringify(wgooConfig, null, 2)}`; } function genCode(components) { const demos = components .map((component) => ({ component, name: pascalize(component), path: join(SRC_DIR, component, 'demo/index'), })) .filter((item) => { const path = item.path + '.jsx'; return existsSync(path); }); return `${genInstall()} ${genImports(demos)} export { packageEntry }; try { ${getSetName(demos)} } catch(e) {} ${genExports(demos)} ${genConfig(demos)} `; } function genSiteMobileShared() { const dirs = readdirSync(SRC_DIR); const code = genCode(dirs); smartOutputFile(SITE_MODILE_SHARED_FILE, code); } module.exports = { genSiteMobileShared };