UNPKG

@hb-webkit-dev/cli

Version:

> 环博前端脚手架

133 lines (132 loc) 5.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getSiteConfig = exports.smartOutputFile = 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.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, "getSiteConfig", { enumerable: true, get: function () { return constant_1.getSiteConfig; } }); 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; function getComponents() { const EXCLUDES = ['.DS_Store']; const dirs = fs_extra_1.readdirSync(constant_1.SRC_DIR); return dirs .filter((dir) => !EXCLUDES.includes(dir)) .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); // 如果是函数形式,可能并不仅仅是添加额外的处理流程,而是在原有流程上进行修改 // 比如修改markdown-loader,添加options.enableMetaData if (typeof config === 'function') { return webpack_merge_1.merge(defaultConfig, config(defaultConfig)); } return webpack_merge_1.merge(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; // 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;