@lcap/builder
Version:
lcap builder utils
105 lines (104 loc) • 4.12 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const vite_1 = require("vite");
const build_utils_1 = require("../utils/build-utils");
function resetLogger(config) {
const viteLogger = (0, vite_1.createLogger)();
const loggerWarn = viteLogger.warn;
viteLogger.warn = (msg, options) => {
// 忽略空 CSS 文件的警告
if (msg.includes('vite:css')) {
return;
}
loggerWarn(msg, options);
};
if (!config.customLogger) {
config.customLogger = viteLogger;
}
return config;
}
function addDefine(config, isBuild) {
if (!config.define) {
config.define = {};
}
config.define['process.env'] = Object.assign({ NODE_ENV: isBuild ? 'production' : 'development', VUE_APP_DESIGNER: false }, (config.define['process.env'] || {}));
}
function setLibBuildConfig(options, config) {
const { external, globals } = (0, build_utils_1.getBuildOutputConifg)({
rootPath: options.rootPath,
type: options.type,
framework: options.framework,
addDepExternal: false,
});
if (!config.build) {
config.build = {};
}
if (!config.build.rollupOptions) {
config.build.rollupOptions = {};
}
config.build.commonjsOptions = Object.assign({ extensions: ['.js'] }, config.build.commonjsOptions);
// 非库构建不处理默认参数;
if (config.build && !config.build.lib && config.build.rollupOptions && config.build.rollupOptions.input) {
return;
}
if (options.framework === 'vue2' && options.type === 'nasl.ui') {
delete globals['@vue/composition-api'];
const i = external.indexOf('@vue/composition-api');
if (i !== -1) {
external.splice(i, 1);
}
}
config.build = Object.assign(Object.assign({ target: ['es2020', 'edge88', 'firefox78', 'chrome56', 'safari14'], outDir: options.destDir, sourcemap: true }, config.build), { lib: Object.assign({ entry: 'src/index.ts', formats: ['es', 'umd'], fileName: (format, entryName) => {
switch (format) {
case 'es':
return `${entryName}.mjs`;
case 'cjs':
return `${entryName}.cjs`;
default:
return `${entryName}.js`;
}
},
// 兼容 vite6
cssFileName: 'index.css' }, (config.build.lib || {})), rollupOptions: Object.assign(Object.assign({ external }, (config.build.rollupOptions)), { output: Object.assign(Object.assign({ assetFileNames: (assetInfo) => {
if (assetInfo.name === 'style.css') {
return 'index.css';
}
return '[name][extname]';
}, interop: 'compat' }, config.build.rollupOptions.output), { globals: Object.assign(Object.assign({}, globals), (config.build.rollupOptions.output ? config.build.rollupOptions.output.globals : {})) }) }) });
}
/**
* 更新 HMR 配置
* @param config vite 配置
* @returns 更新后的配置
*/
function updateHMRConfig(config) {
if (!config.server) {
config.server = {};
}
// 允许所有 host 访问
config.server.allowedHosts = true;
if (typeof config.server.hmr === 'boolean' && !config.server.hmr) {
return config;
}
// 远程沙箱调试需要
const hmr = typeof config.server.hmr === 'object' ? config.server.hmr : {};
delete hmr.port;
config.server.hmr = Object.assign(Object.assign({}, hmr), { path: hmr.path || '/_vite_hmr' });
return config;
}
function lcapViteConfigPlugin(options) {
return {
name: 'vite:lcap-default-config',
enforce: 'post',
config(config, { command }) {
const isBuild = command === 'build';
resetLogger(config);
addDefine(config, isBuild);
setLibBuildConfig(options, config);
if (!isBuild) {
updateHMRConfig(config);
}
},
};
}
exports.default = lcapViteConfigPlugin;