超简单使用Vite+Vue3构建共享开发和分模块打包的前端项目

简介: 使用Vite和Vue3构建支持共享组件和分模块独立打包的前端项目的方法。

前言

最近有个需求就是构建一个可复用公共组件、可分模块独立部署的前端项目。关于这个共享开发和分模块打包的操作,还记得是在上家公司的某个SpringBoot项目上见过。它的好处就是子模块各自独立开发与打包、可复用父模块的共享代码、降低耦合度等。前端这里还没试过这样的操作,于是面向谷歌/百度开发一下。嗯,原来有这种操作的,真是流批,在此记录一下这个解决方案。

一、准备环境

(1)开发环境

C:\Users\帅龍之龍>nvm -v
1.1.12

C:\Users\帅龍之龍>nvm ls

  * 20.4.0 (Currently using 64-bit executable)
    18.16.1
    16.19.1

C:\Users\帅龍之龍>node -v
v20.4.0

C:\Users\帅龍之龍>npm -v
9.7.2

(2)nvm相关命令说明

nvm off                     # 禁用node.js版本管理(不卸载任何东西)
nvm on                      # 启用node.js版本管理
nvm install <version>       # 安装node.js的命名 version是版本号 例如:nvm install 16
nvm uninstall <version>     # 卸载node.js是的命令,卸载指定版本的nodejs,当安装失败时卸载使用
nvm ls                      # 显示所有安装的node.js版本
nvm list available          # 显示可以安装的所有node.js的版本
nvm use <version>           # 切换到使用指定的nodejs版本
nvm v                       # 显示nvm版本
nvm install stable          # 安装最新稳定版

(3)settings.txt

node_mirror: https://npmmirror.com/mirrors/node/
npm_mirror: https://npmmirror.com/mirrors/npm/

二、创建Vite项目

1.新建一个temp文件夹

(1)在桌面新建一个temp文件夹,然后在VS Code中打开此文件夹,打开一个终端;

2.创建一个Vite+Vue项目工程

(1)具体操作如下:

npm create vite@latest

(1) 输入项目名,如: vite-vue3-multi_modulets,然后回车
? Project name: » vite-vue3-multi_modulets

(2) 选择 Vue 框架,回车
? Select a framework: » - Use arrow-keys. Return to submit.
    Vanilla
>   Vue
    React
    Preact
    Lit
    Svelte
    Others

(3) 选择数据类型,回车
? Select a variant: » - Use arrow-keys. Return to submit.
>   TypeScript
    JavaScript
    Customize with create-vue ↗
    Nuxt 

(4) 创建完成,运行项目
Done. Now run: 

  cd vite-vue3-multi_modulets
  npm install
  npm run dev

PS C:\Users\帅龍之龍\Desktop\temp>

3.修改vite.config.ts文件

(1)修改前

import {
   
    defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vitejs.dev/config/
export default defineConfig({
   
   
  plugins: [vue()],
})

(2)修改后

import {
   
    defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import {
   
    resolve } from 'path'

let config
const moduleName = process.env['npm_config_project'] // 使用`--project=[module_name]`获取模块名
if (!moduleName) {
   
   
  // 构建父模块
  config = {
   
   
    plugins: [vue()],
  }
} else {
   
   
  // 构建子模块
  config = {
   
   
    plugins: [vue()],
    root: `./src/apps/${
     
     moduleName}`,
    build: {
   
   
      rollupOptions: {
   
   
        input: resolve(__dirname, `src/apps/${
     
     moduleName}/index.html`), // 指定子模块入口文件
        output: {
   
   
          dir: `dist/apps/${
     
     moduleName}`
        }
      }
    }
  }
}

// https://vitejs.dev/config/
export default defineConfig(config)

三、以新建子目录的方式来创建应用或模块

(1)在项目的src目录中,新建apps文件夹

(2)在apps目录中,新建projectA和projectB文件夹

(3)在projectA和projectB文件夹,各新建一个App.vue、index.html、main.ts文件

/src/apps/projectA

-> App.vue
<template>
  <div>项目A</div>
</template>

-> index.html
<!DOCTYPE html>
<html lang="zh">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" type="image/svg+xml" href="./assets/vite.svg" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>项目A</title>
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="./main.ts"></script>
  </body>
</html>

-> main.ts
import {
   
    createApp } from 'vue'
import App from './App.vue'

createApp(App).mount('#app')

---- ---- ---- ---- ---- ---- ---- ----

/src/apps/projectB

-> App.vue
<template>
  <div>项目B</div>
</template>

-> index.html
<!DOCTYPE html>
<html lang="zh">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" type="image/svg+xml" href="./assets/vite.svg" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>项目B</title>
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="./main.ts"></script>
  </body>
</html>

-> main.ts
import {
   
    createApp } from 'vue'
import App from './App.vue'

createApp(App).mount('#app')

四、运行项目

npm run dev # 构建父模块
npm run dev --project=projectA # 构建projectA模块
npm run dev --project=projectB # 构建projectB模块

npm run build # 打包父模块
npm run build --project=projectA # 打包projectA模块
npm run build --project=projectB # 打包projectB模块

五、白嫖地址

vite-vue3-multi_modulets: 这是一个基于 Vite 构建的 Vue3 + TS 项目,支持组件共享、分模块编译和打包。

目录
相关文章
|
24天前
|
前端开发 JavaScript Java
前端限制打包文件数量
前端限制打包文件数量
166 65
|
6天前
|
前端开发 开发者 UED
前端只是切图仔?来学学给开发人看的UI设计
该文章针对前端开发者介绍了UI设计的基本原则与实践技巧,覆盖了布局、色彩理论、字体选择等方面的知识,并提供了设计工具和资源推荐,帮助开发者提升产品的视觉与交互体验。
|
10天前
|
开发框架 前端开发 JavaScript
【博客开发】前端应用开发环境搭建(可复用)
【博客开发】前端应用开发环境搭建(可复用)
|
14天前
|
移动开发 缓存 前端开发
构建高效的前端路由系统:从原理到实践
在现代Web开发中,前端路由系统已成为构建单页面应用(SPA)不可或缺的核心技术之一。不同于传统服务器渲染的多页面应用,SPA通过前端路由技术实现了页面的局部刷新与无缝导航,极大地提升了用户体验。本文将深入剖析前端路由的工作原理,包括Hash模式与History模式的实现差异,并通过实战演示如何在Vue.js框架中构建一个高效、可维护的前端路由系统。我们还将探讨如何优化路由加载性能,确保应用在不同网络环境下的流畅运行。本文不仅适合前端开发者深入了解前端路由的奥秘,也为后端转前端或初学者提供了从零到一的实战指南。
|
15天前
|
机器学习/深度学习 数据采集 JavaScript
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
ADR药品不良反应监测系统是一款智能化工具,用于监测和分析药品不良反应。该系统通过收集和分析病历、处方及实验室数据,快速识别潜在不良反应,提升用药安全性。系统采用Java开发,基于SpringBoot框架,前端使用Vue,具备数据采集、清洗、分析等功能模块,并能生成监测报告辅助医务人员决策。通过集成多种数据源并运用机器学习算法,系统可自动预警药品不良反应,有效减少药害事故,保障公众健康。
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
|
1月前
|
前端开发 开发者
在前端开发中,webpack 作为一个强大的模块打包工具,为我们提供了丰富的功能和扩展性
【9月更文挑战第1天】在前端开发中,Webpack 作为强大的模块打包工具,提供了丰富的功能和扩展性。本文重点介绍 DefinePlugin 插件,详细探讨其原理、功能及实际应用。DefinePlugin 可在编译过程中动态定义全局变量,适用于环境变量配置、动态加载资源、接口地址配置等场景,有助于提升代码质量和开发效率。通过具体配置示例和注意事项,帮助开发者更好地利用此插件优化项目。
68 13
|
27天前
|
Web App开发 前端开发 JavaScript
Web前端项目的跨平台桌面客户端打包方案之——CEF框架
Chromium Embedded Framework (CEF) 是一个基于 Google Chromium 项目的开源 Web 浏览器控件,旨在为第三方应用提供嵌入式浏览器支持。CEF 隔离了底层 Chromium 和 Blink 的复杂性,提供了稳定的产品级 API。它支持 Windows、Linux 和 Mac 平台,不仅限于 C/C++ 接口,还支持多种语言。CEF 功能强大,性能优异,广泛应用于桌面端开发,如 QQ、微信、网易云音乐等。CEF 开源且采用 BSD 授权,商业友好,装机量已超 1 亿。此外,GitHub 项目 CefDetector 可帮助检测电脑中使用 CEF
103 3
|
7天前
|
JavaScript 前端开发 开发者
深入浅出 Vue.js:构建响应式前端应用
Vue.js 是一个流行的前端框架,以其简洁、高效和易学著称。它采用响应式和组件化设计,简化了交互式用户界面的构建。本文详细介绍 Vue.js 的核心概念、基本用法及如何构建响应式前端应用,包括实例、模板、响应式数据和组件等关键要素,并介绍了项目结构、Vue CLI、路由管理和状态管理等内容,帮助开发者高效地开发现代化前端应用。
|
7天前
|
前端开发 测试技术 API
探索微前端架构:构建现代化的前端应用
在软件开发中,传统单体架构已难以满足快速迭代需求,微前端架构应运而生。它将前端应用拆分成多个小型、独立的服务,每个服务均可独立开发、测试和部署。本文介绍微前端架构的概念与优势,并指导如何实施。微前端架构具备自治性、技术多样性和共享核心的特点,能够加速开发、提高可维护性,并支持灵活部署策略。实施步骤包括定义服务边界、选择架构模式、建立共享核心、配置跨服务通信及实现独立部署。尽管面临服务耦合、状态同步等挑战,合理规划仍可有效应对。
|
2月前
|
开发者 自然语言处理 存储
语言不再是壁垒:掌握 JSF 国际化技巧,轻松构建多语言支持的 Web 应用
【8月更文挑战第31天】JavaServer Faces (JSF) 框架提供了强大的国际化 (I18N) 和本地化 (L10N) 支持,使开发者能轻松添加多语言功能。本文通过具体案例展示如何在 JSF 应用中实现多语言支持,包括创建项目、配置语言资源文件 (`messages_xx.properties`)、设置 `web.xml`、编写 Managed Bean (`LanguageBean`) 处理语言选择,以及使用 Facelets 页面 (`index.xhtml`) 显示多语言消息。通过这些步骤,你将学会如何配置 JSF 环境、编写语言资源文件,并实现动态语言切换。
29 0
下一篇
无影云桌面