参考 blog.csdn.net/qq_38974163…
初始化项目 node@16 npm@8
npm create vue@latest
项目目录
├── public
├── src
├── coreCommon
├── pages 多页面文件夹
├── page1 某个页面
├── router
├── views
├── .env.development
├── .env.test
├── .env.production
├── App.vue
├── main.js
├── index.html
├── package.json
├── vite.config.js
├── dist
├── page1
仅支持单页面运行和打包
npm run dev --page=页面名称
npm run build --page=页面名称
import { fileURLToPath, URL } from 'node:url';
import fs from 'fs';
import { defineConfig, loadEnv } from 'vite';
import vue from '@vitejs/plugin-vue';
import { resolve } from 'path';
import chalk from 'chalk';
const errorLog = error => console.log(chalk.red(`${error}`));
const npmConfigPage = process.env.npm_config_page || '';
console.log('将要运行或打包的页面为', npmConfigPage);
function getEntryPath() {
if (!npmConfigPage) {
errorLog('命令行缺少参数 `--page=xxx` ');
process.exit();
}
const pagePath = resolve(__dirname, './src/pages');
const entryFiles = fs.readdirSync(pagePath);
const find = entryFiles.some(filePath => npmConfigPage === filePath);
if (!find) {
errorLog('--page后面的页面不存在,请检查页面名称');
process.exit();
}
return { npmConfigPage: resolve(__dirname, `src/pages/${npmConfigPage}/index.html`) };
}
export default ({ mode }) => {
const env = loadEnv(mode, resolve(__dirname, `./src/pages/${npmConfigPage}`));
console.log('env', env);
return defineConfig({
plugins: [
vue(),
],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url)),
},
},
build: {
rollupOptions: {
input: getEntryPath(),
output: {
assetFileNames: '[ext]/[name]-[hash].[ext]',
chunkFileNames: 'js/[name]-[hash].js',
entryFileNames: 'js/[name]-[hash].js',
},
},
outDir: resolve(__dirname, `dist/${npmConfigPage}`),
sourcemap: true,
},
root: resolve(__dirname, `./src/pages/${npmConfigPage}`),
});
};