@mypaas/hcm-cli
Version:
Vant Cli 是一个 Vue 组件库构建工具,通过 Vant Cli 可以快速搭建一套功能完备的 Vue 组件库。
162 lines (161 loc) • 6.33 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getVantConfig = exports.smartOutputFile = exports.setPostCSSREM = exports.isDev = exports.setBuildTarget = exports.setNodeEnv = exports.setModuleEnv = exports.getWebpackConfig = exports.normalizePath = exports.decamelize = exports.pascalize = exports.camelize = exports.isScript = exports.isStyle = exports.isSfc = exports.isAsset = exports.isTestDir = exports.isDemoDir = exports.isDir = exports.getComponents = exports.getIgnoreComponentFilter = exports.hasDefaultExport = exports.replaceExt = exports.removeExt = exports.ENTRY_EXTS = exports.SCRIPT_REGEXP = exports.STYLE_REGEXP = exports.ASSET_REGEXP = exports.TEST_REGEXP = exports.DEMO_REGEXP = exports.SFC_REGEXP = exports.EXT_REGEXP = void 0;
const path_1 = require("path");
const fs_extra_1 = require("fs-extra");
const webpack_merge_1 = require("webpack-merge");
const constant_1 = require("./constant");
Object.defineProperty(exports, "getVantConfig", { enumerable: true, get: function () { return constant_1.getVantConfig; } });
const lodash_1 = __importDefault(require("lodash"));
exports.EXT_REGEXP = /\.\w+$/;
exports.SFC_REGEXP = /\.(vue)$/;
exports.DEMO_REGEXP = new RegExp('\\' + path_1.sep + 'demo$');
exports.TEST_REGEXP = new RegExp('\\' + path_1.sep + 'test$');
exports.ASSET_REGEXP = /\.(png|jpe?g|gif|webp|ico|jfif|svg|woff2?|ttf)$/i;
exports.STYLE_REGEXP = /\.(css|less|scss)$/;
exports.SCRIPT_REGEXP = /\.(js|ts|jsx|tsx)$/;
exports.ENTRY_EXTS = ['js', 'ts', 'tsx', 'jsx', 'vue'];
function removeExt(path) {
return path.replace('.js', '');
}
exports.removeExt = removeExt;
function replaceExt(path, ext) {
return path.replace(exports.EXT_REGEXP, ext);
}
exports.replaceExt = replaceExt;
function hasDefaultExport(code) {
return code.includes('export default') || code.includes('export { default }');
}
exports.hasDefaultExport = hasDefaultExport;
/**
* 获取忽略组件筛选器, 避免重复加载 config
* @param filterFn
*/
function getIgnoreComponentFilter(filterFn) {
const config = constant_1.getVantConfig();
if (Array.isArray(config.ignores) && config.ignores.length > 0) {
return (params) => filterFn(params, config.ignores);
}
return () => true;
}
exports.getIgnoreComponentFilter = getIgnoreComponentFilter;
function getComponents() {
const EXCLUDES = ['.DS_Store'];
const dirs = fs_extra_1.readdirSync(constant_1.SRC_DIR);
const ignoreFilter = process.env.NODE_ENV === 'test'
? () => true
: getIgnoreComponentFilter((dir, ignores) => !ignores.includes(dir));
return dirs
.filter((dir) => !EXCLUDES.includes(dir))
.filter(ignoreFilter)
.filter((dir) => exports.ENTRY_EXTS.some((ext) => {
const path = path_1.join(constant_1.SRC_DIR, dir, `index.${ext}`);
if (fs_extra_1.existsSync(path)) {
return hasDefaultExport(fs_extra_1.readFileSync(path, 'utf-8'));
}
return false;
}));
}
exports.getComponents = getComponents;
function isDir(dir) {
return fs_extra_1.lstatSync(dir).isDirectory();
}
exports.isDir = isDir;
function isDemoDir(dir) {
return exports.DEMO_REGEXP.test(dir);
}
exports.isDemoDir = isDemoDir;
function isTestDir(dir) {
return exports.TEST_REGEXP.test(dir);
}
exports.isTestDir = isTestDir;
function isAsset(path) {
return exports.ASSET_REGEXP.test(path);
}
exports.isAsset = isAsset;
function isSfc(path) {
return exports.SFC_REGEXP.test(path);
}
exports.isSfc = isSfc;
function isStyle(path) {
return exports.STYLE_REGEXP.test(path);
}
exports.isStyle = isStyle;
function isScript(path) {
return exports.SCRIPT_REGEXP.test(path);
}
exports.isScript = isScript;
const camelizeRE = /-(\w)/g;
const pascalizeRE = /(\w)(\w*)/g;
function camelize(str) {
return str.replace(camelizeRE, (_, c) => c.toUpperCase());
}
exports.camelize = camelize;
function pascalize(str) {
return camelize(str).replace(pascalizeRE, (_, c1, c2) => c1.toUpperCase() + c2);
}
exports.pascalize = pascalize;
function decamelize(str, sep = '-') {
return str
.replace(/([a-z\d])([A-Z])/g, '$1' + sep + '$2')
.replace(/([A-Z]+)([A-Z][a-z\d]+)/g, '$1' + sep + '$2')
.toLowerCase();
}
exports.decamelize = decamelize;
function normalizePath(path) {
return path.replace(/\\/g, '/');
}
exports.normalizePath = normalizePath;
function getWebpackConfig(defaultConfig) {
if (fs_extra_1.existsSync(constant_1.ROOT_WEBPACK_CONFIG_FILE)) {
const config = require(constant_1.ROOT_WEBPACK_CONFIG_FILE);
const customMerge = webpack_merge_1.mergeWithCustomize({
customizeArray(arr1, arr2) {
return lodash_1.default.uniqWith([...arr1, ...arr2], lodash_1.default.isEqual);
},
});
// 如果是函数形式,可能并不仅仅是添加额外的处理流程,而是在原有流程上进行修改
// 比如修改markdown-loader,添加options.enableMetaData
if (typeof config === 'function') {
return customMerge(defaultConfig, config(defaultConfig));
}
return customMerge(defaultConfig, config);
}
return defaultConfig;
}
exports.getWebpackConfig = getWebpackConfig;
function setModuleEnv(value) {
process.env.BABEL_MODULE = value;
}
exports.setModuleEnv = setModuleEnv;
function setNodeEnv(value) {
process.env.NODE_ENV = value;
}
exports.setNodeEnv = setNodeEnv;
function setBuildTarget(value) {
process.env.BUILD_TARGET = value;
}
exports.setBuildTarget = setBuildTarget;
function isDev() {
return process.env.NODE_ENV === 'development';
}
exports.isDev = isDev;
function setPostCSSREM(value) {
process.env.POSTCSS_REM = value ? 'on' : 'off';
}
exports.setPostCSSREM = setPostCSSREM;
// smarter outputFileSync
// skip output if file content unchanged
function smartOutputFile(filePath, content) {
if (fs_extra_1.existsSync(filePath)) {
const previousContent = fs_extra_1.readFileSync(filePath, 'utf-8');
if (previousContent === content) {
return;
}
}
fs_extra_1.outputFileSync(filePath, content);
}
exports.smartOutputFile = smartOutputFile;