@mypaas/hcm-cli
Version:
Vant Cli 是一个 Vue 组件库构建工具,通过 Vant Cli 可以快速搭建一套功能完备的 Vue 组件库。
82 lines (81 loc) • 2.81 kB
JavaScript
;
/**
* Build style entry of all components
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.genComponentStyle = void 0;
const path_1 = require("path");
const fs_extra_1 = require("fs-extra");
const common_1 = require("../common");
const css_1 = require("../common/css");
const gen_style_deps_map_1 = require("./gen-style-deps-map");
const constant_1 = require("../common/constant");
function getDeps(component) {
const styleDepsJson = require(constant_1.STYPE_DEPS_JSON_FILE);
if (styleDepsJson.map[component]) {
const deps = styleDepsJson.map[component].slice(0);
if (gen_style_deps_map_1.checkStyleExists(component)) {
deps.push(component);
}
return deps;
}
return [];
}
function getPath(component, ext = '.css') {
return path_1.join(constant_1.ES_DIR, `${component}/index${ext}`);
}
function getRelativePath(component, style, ext) {
return path_1.relative(path_1.join(constant_1.ES_DIR, `${component}/style`), getPath(style, ext));
}
const OUTPUT_CONFIG = [
{
dir: constant_1.ES_DIR,
template: (dep) => `import '${dep}';`,
},
{
dir: constant_1.LIB_DIR,
template: (dep) => `require('${dep}');`,
},
];
function genEntry(params) {
const { ext, filename, component, baseFile } = params;
const deps = getDeps(component);
const depsPath = deps.map(dep => getRelativePath(component, dep, ext));
OUTPUT_CONFIG.forEach(({ dir, template }) => {
const outputDir = path_1.join(dir, component, 'style');
const outputFile = path_1.join(outputDir, filename);
let content = '';
if (baseFile) {
const compiledBaseFile = common_1.replaceExt(baseFile.replace(constant_1.SRC_DIR, dir), ext);
content += template(path_1.relative(outputDir, compiledBaseFile));
content += '\n';
}
content += depsPath.map(template).join('\n');
content = content.replace(new RegExp('\\' + path_1.sep, 'g'), '/');
fs_extra_1.outputFileSync(outputFile, content);
});
}
function genComponentStyle(options = { cache: true }) {
if (!options.cache) {
delete require.cache[constant_1.STYPE_DEPS_JSON_FILE];
}
const components = common_1.getComponents();
const baseFile = css_1.getCssBaseFile();
components.forEach(component => {
genEntry({
baseFile,
component,
filename: 'index.js',
ext: '.css',
});
if (css_1.CSS_LANG !== 'css') {
genEntry({
baseFile,
component,
filename: css_1.CSS_LANG + '.js',
ext: '.' + css_1.CSS_LANG,
});
}
});
}
exports.genComponentStyle = genComponentStyle;