UNPKG

@lcap/builder

Version:
105 lines (104 loc) 4.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = lcapViteConfigPlugin; 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); } }, }; }