@mypaas/hcm-cli
Version:
Vant Cli 是一个 Vue 组件库构建工具,通过 Vant Cli 可以快速搭建一套功能完备的 Vue 组件库。
76 lines (72 loc) • 2.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.genSiteMobileShared = void 0;
const path_1 = require("path");
const fs_extra_1 = require("fs-extra");
const constant_1 = require("../common/constant");
const common_1 = require("../common");
function genInstall() {
return `import Vue from 'vue';
import PackageEntry from './package-entry';
import './package-style';
`;
}
function genImports(demos) {
return demos
.map(item => `import ${item.name} from '${common_1.removeExt(common_1.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 vantConfig = common_1.getVantConfig();
const demoNames = demos.map(item => common_1.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 } = vantConfig.site;
if (locales) {
Object.keys(locales).forEach((lang) => {
if (locales[lang].nav) {
locales[lang].nav = demoFilter(locales[lang].nav);
}
});
}
else if (nav) {
vantConfig.site.nav = demoFilter(nav);
}
return `export const config = ${JSON.stringify(vantConfig, null, 2)}`;
}
function genCode(components) {
const demos = components
.map(component => ({
component,
name: common_1.pascalize(component),
path: path_1.join(constant_1.SRC_DIR, component, 'demo/index.vue'),
}))
.filter(item => fs_extra_1.existsSync(item.path));
return `${genInstall()}
${genImports(demos)}
Vue.use(PackageEntry);
${getSetName(demos)}
${genExports(demos)}
${genConfig(demos)}
`;
}
function genSiteMobileShared() {
const dirs = fs_extra_1.readdirSync(constant_1.SRC_DIR).filter(common_1.getIgnoreComponentFilter((dir, ignores) => !ignores.includes(dir)));
const code = genCode(dirs);
common_1.smartOutputFile(constant_1.SITE_MODILE_SHARED_FILE, code);
}
exports.genSiteMobileShared = genSiteMobileShared;