vite + vu3 构建配置多页面打包

vite 配置

import { defineConfig, loadEnv } from "vite";
import vue from "@vitejs/plugin-vue";
import { resolve, join } from "path";
import { readdirSync } from "fs";

import viteCompression from "vite-plugin-compression";

const project_pages = {};
const alias_pages = {};
const entryPath = resolve(__dirname, "./src/modules");
const entrys = readdirSync(entryPath).reduce((obj, dirname) => {
	obj[dirname] = join(entryPath, dirname);
	return obj;
}, {});

Object.keys(entrys).forEach(pageName => {
	project_pages[pageName] = resolve(__dirname, `src/modules/${pageName}/index.html`);
	alias_pages[pageName] = resolve(__dirname, `src/modules/${pageName}`);
});

// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {
	let pages = {};
	let alias = {};
	const sliasaSsign = Object.assign({}, { "@": resolve(__dirname, "src") }, { ...alias_pages });
	const env = loadEnv(mode, process.cwd());
	const isDev = mode === "development";

	if (isDev) {
		pages = { ...project_pages };
		alias = sliasaSsign;
	} else {
		if (env.VITE_APP_MODEL) {
			pages[env.VITE_APP_MODEL] = project_pages[env.VITE_APP_MODEL];
			alias[env.VITE_APP_MODEL] = alias_pages[env.VITE_APP_MODEL];
			alias = Object.assign({}, { "@": resolve(__dirname, "src") }, { ...alias });
		} else {
			pages = { ...project_pages };
			alias = sliasaSsign;
		}
	}
	return {
		// 项目根目录
		root: env.VITE_APP_ROOTPATH,
		plugins: [
			vue(),
			// gzip压缩 生产环境生成 .gz 文件
			viteCompression({
				verbose: true,
				disable: false,
				threshold: 10240,
				algorithm: "gzip",
				ext: ".gz",
			}),
		],
		resolve: {
			extensions: [".js", ".ts", ".vue", ".json"],
			alias: alias, // 配置项目别名
		},
		css: {
			preprocessorOptions: {
				less: {
					additionalData: '@import "@/assets/style/main.less";',
				},
			},
		},
		server: {
			host: "0.0.0.0",
			port: 6038,
			open: false,
			https: false,
			proxy: {				
				'/host': {
					target: 'https://...................',
					changeOrigin: true, // 允许跨域
					// 重写路径 --> 作用与vue配置pathRewrite作用相同
					rewrite: (path) => path.replace(/^\/host/, "")
				},
				'/cns/file': { 
					target: 'https://.................../file',
					changeOrigin: true,
					rewrite: (path) => path.replace(/^\/cns\/file/, "")
				}
			},
		},
		build: {
			rollupOptions: {
				input: pages,// 指定 SSR 的自定义入口
				brotliSize: false, // 不统计
				target: 'esnext',
				minify: 'esbuild', // 混淆器,terser构建后文件体积更小
				output: {
					//输出路径
					dir: "./dist",
					chunkFileNames: 'static/chunkjs/[name]-[hash].js',
					entryFileNames: 'static/entryjs/[name]-[hash].js',
					assetFileNames: 'static/[ext]/[name]-[hash].[ext]'
				},
			},
			terserOptions: {
				compress: {
					drop_console: true,
					drop_debugger: true,
				},
			},
		},
	};
});


文件目录

在这里插入图片描述

.env文件
# 根路径
VITE_APP_ROOTPATH = ./

.env.main文件
# app模块
VITE_APP_MODEL = main

# 根路径
VITE_APP_ROOTPATH = ./src/modules/main/
.env.minor文件
# app模块
VITE_APP_MODEL = minor

# 根路径
VITE_APP_ROOTPATH = ./src/modules/minor/

可单独打包每个模块
在这里插入图片描述

package.json 文件

scripts 配置

"scripts": {
    "dev": "vite --host",
    "main": "vite serve src/modules/main/ --config ./vite.config.ts",
    "minor": "vite serve src/modules/minor/ --config ./vite.config.ts",
    "build": "vue-tsc --noEmit && vite build",
    "build:main": "vue-tsc --noEmit && vite build --mode main",
    "build:minor": "vue-tsc --noEmit && vite build --mode minor",
    "preview": "vite preview",
    "lint": "eslint src --fix --ext .ts,.tsx,.vue,.js,.jsx",
    "prettier": "prettier --write .",
    "prepare": "husky install"
  },

打包生成目录

在这里插入图片描述

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
以下是配置页面的Vue3 + Vite + TypeScript的示例代码: 1. 在项目根目录下创建一个`pages`文件夹,用于存放多页面的入口文件和模板文件。 2. 在`pages`文件夹下创建一个`index`文件夹,用于存放首页相关的文件。 3. 在`index`文件夹下创建一个`index.html`文件,作为首页的模板文件。 4. 在`index`文件夹下创建一个`main.ts`文件,作为首页的入口文件。 5. 在`pages`文件夹下创建一个`about`文件夹,用于存放关于页面相关的文件。 6. 在`about`文件夹下创建一个`about.html`文件,作为关于页面的模板文件。 7. 在`about`文件夹下创建一个`main.ts`文件,作为关于页面的入口文件。 8. 在`vite.config.ts`文件中配置页面: ```typescript import { defineConfig } from 'vite'; import { resolve } from 'path'; export default defineConfig({ build: { outDir: 'dist', assetsDir: 'assets', rollupOptions: { input: { index: resolve(__dirname, 'pages/index/main.ts'), about: resolve(__dirname, 'pages/about/main.ts'), }, }, }, }); ``` 9. 在`index.html`和`about.html`文件中分别引入不同的JS文件: ```html <!-- index.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Index Page</title> </head> <body> <div id="app"></div> <script type="module" src="/index.js"></script> </body> </html> <!-- about.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>About Page</title> </head> <body> <div id="app"></div> <script type="module" src="/about.js"></script> </body> </html> ``` 10. 在`main.ts`文件中编写Vue3的代码: ```typescript import { createApp } from 'vue'; import App from './App.vue'; createApp(App).mount('#app'); ``` 11. 运行`npm run dev`启动开发服务器,访问`http://localhost:3000/index.html`和`http://localhost:3000/about.html`即可查看多页面效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

织_网

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值