Files
vue-ts-example-2025/vite.config.rollup.ts
严浩 9e050306bb
All checks were successful
CI/CD Pipeline / playwright (push) Successful in 3m3s
CI/CD Pipeline / build-and-deploy (push) Successful in 2m6s
feat: refactor Vite plugin loading mechanism and improve plugin management
2025-12-12 00:09:53 +08:00

107 lines
4.4 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { /* ManualChunkMeta, PreRenderedAsset, */ RollupOptions } from 'rollup';
// import path from 'node:path';
// https://www.npmjs.com/package/utils4u/v/2.19.2?activeTab=code
export const viteConfigRollupOptions: RollupOptions = {
/* onwarn: (warning, warn) => {
if (warning.code === 'EMPTY_BUNDLE') return;
if (warning.code === 'EVAL' && warning.id?.includes('node_modules/eruda')) return;
if (warning.code === 'EVAL' && warning.id?.includes('node_modules/mockjs')) return;
if (warning.code === 'EVAL' && warning.id?.includes('node_modules/protobufjs')) return;
warn(warning);
}, */
output: {
// 如果一个 chunk 小于 10KBRollup 会尝试将它合并到其他 chunk 中。这样可以避免产生大量碎片文件
experimentalMinChunkSize: 10 * 1024,
// // Keep hashed file names predictable across entry, chunk, and asset outputs.
// entryFileNames: 'entry/[name].[hash].js', // 默认: "[name].js"
// chunkFileNames: 'chunk/[name].[hash].js', // 默认: "[name]-[hash].js"
// // assetFileNames:'', // 默认: "assets/[name]-[hash][extname]"
// // https://cn.rollupjs.org/configuration-options/#output-assetfilenames
// assetFileNames(chunkInfo: PreRenderedAsset) {
// const names = [...new Set(chunkInfo.names)];
// if (names.length !== 1) {
// console.error('Multiple names for asset:', chunkInfo);
// process.exit(1);
// }
// const assetName = names[0];
// const ext = assetName.split('.').pop()?.toLowerCase();
// if (ext && /png|jpe?g|gif|svg|webp|avif/.test(ext)) {
// return 'chunks/images/[name].[hash][extname]';
// }
// if (ext && /woff2?|ttf|otf/.test(ext)) {
// return 'chunks/fonts/[name].[hash][extname]';
// }
// if (ext === 'css') {
// return 'chunks/css/[name].[hash][extname]';
// }
// return '_chunks/[name].[hash][extname]';
// },
// manualChunks: (id: string, _meta: ManualChunkMeta) => {
// // https://github.com/unocss/unocss/issues/4917
// // if (['/src/layouts'].some((prefix) => id.includes(prefix))) {
// // const url = new URL(id, 'file://');
// // if (!url.search /* ?vue&type=script&setup=true&lang.ts */) {
// // return 'layouts';
// // }
// // }
// if (id.includes('meta-layouts')) {
// // console.debug(`id :>> `, id); // id :>> virtual:meta-layouts
// // 这里很奇怪,打印 id 是`virtual:meta-layouts`,但是 `'virtual:meta-layouts' === id` 却是 false
// return 'lib-meta-layouts';
// }
// if (id.includes('index.page.vue')) {
// const url = new URL(id, 'file://');
// if (!url.search /* ?vue&type=script&setup=true&lang.ts */) {
// const parentDir = path.basename(path.dirname(id));
// return `${parentDir}-index.page`;
// }
// }
// if (!id.includes('node_modules')) return;
// // 处理 pnpm 的特殊路径结构
// let packageName;
// if (id.includes('.pnpm')) {
// // pnpm 路径: .pnpm/naive-ui@2.43.1_vue@3.5.22/node_modules/naive-ui/...
// const pnpmMatch = id.match(/\.pnpm\/(.+?)@/);
// if (pnpmMatch) {
// packageName = pnpmMatch[1];
// }
// } else {
// // 普通路径: node_modules/lodash/...
// const normalMatch = id.match(/node_modules\/(@[^/]+\/[^/]+|[^/]+)\//);
// if (normalMatch) {
// packageName = normalMatch[1];
// }
// }
// if (packageName) {
// if (['highlight.js'].includes(packageName)) {
// return 'lib-hljs';
// }
// // 根据包名分组
// if (['consola', 'lodash', '@juggle+resize-observer', 'vueuc'].includes(packageName)) {
// return 'lib-vendor';
// }
// // // 拆了有问题
// // if (['naive-ui'].includes(packageName) && id.includes('_internal')) {
// // return 'lib-naive-ui-internal';
// // }
// if (['naive-ui'].includes(packageName)) {
// return 'lib-naive-ui';
// }
// if (
// ['primelocale', 'primevue', 'primeuix', 'primeicons'].some((name) =>
// packageName!.includes(name),
// )
// ) {
// return 'lib-primevue';
// }
// if (['vue', 'vue-router', 'pinia', 'vue-demi', 'vue-i18n'].includes(packageName)) {
// return 'lib-vue-vendor';
// }
// }
// },
},
};