Vite4+Vuejs3项目初步搭建,并部署多个vue项目到nginx

news2025/1/18 11:52:14

前提条件
1、熟悉命令行
2、已安装 16.0 或更高版本的 Node.js
 

 

参照vuejs官网的步骤,创建一个vue前端项目

当前vuejs的版本:3.2.47

npm init vue@latest


	Vue.js - The Progressive JavaScript Framework

	√ Project name: ... vuejs3-project
	√ Add TypeScript? ... No / Yes
	√ Add JSX Support? ... No / Yes
	√ Add Vue Router for Single Page Application development? ... No / Yes
	√ Add Pinia for state management? ... No / Yes
	√ Add Vitest for Unit Testing? ... No / Yes
	√ Add an End-to-End Testing Solution? » No
	√ Add ESLint for code quality? ... No / Yes


cd vuejs3-project

npm install

npm run dev

刚创建完的项目,配置文件vite.config.js是空空如也.....

但也是能run起来的,默认会随机找个端口,命令如下:

npm run dev

在项目根目录下,配置多环境文件

 

vite中自定义环境变量
Vite内置了dotenv这个第三方库, dotenv会自动读取.env文件, dotenv 从你的 环境目录 中的下列文件加载额外的环境变量:

.env                     # 所有情况下都会加载
.env.[mode]         # 只在指定模式下加载 

默认情况下:

npm run dev 会加载 .env 和 .env.development 内的配置
npm run build 会加载 .env 和 .env.production 内的配置
mode 可以通过命令行 --mode 选项来重写。
 

 一份简单可用的vite.config.js文件如下:

import { fileURLToPath, URL } from 'node:url'
const { resolve } = require('path')
import { defineConfig, loadEnv } from 'vite' // 帮手函数,这样不用 jsdoc 注解也可以获取类型提示
import vue from '@vitejs/plugin-vue'
import { viteMockServe } from "vite-plugin-mock"

// https://vitejs.dev/config/
// https://vitejs.dev/config/
const localEnabled = process.env.USE_MOCK || false;
const prodEnabled = process.env.USE_CHUNK_MOCK || false;

// 获取当前环境的配置
const   {VITE_APP_CONTEXT_NAME,VITE_BASIC_API} = loadEnv



// https://vitejs.dev/config/
export default () => defineConfig({
    plugins: [ //配置需要使用的插件列表
        vue(),
        viteMockServe({
            mockPath: "./src/server/mock",
            localEnabled: localEnabled, // 开发打包开关 true时打开mock  false关闭mock
            prodEnabled: prodEnabled,//prodEnabled, // 生产打包开关
            // 这样可以控制关闭mock的时候不让mock打包到最终代码内
            injectCode: ` import { setupProdMockServer } from './mockProdServer';setupProdMockServer(); `,
            logger: false, //是否在控制台显示请求日志
            supportTs:false //打开后,可以读取 ts 文件模块 打开后将无法监视 .js 文件
        })
    ],
    // 强制预构建插件包
    optimizeDeps: {
        //检测需要预构建的依赖项
        entries: [],
        //默认情况下,不在 node_modules 中的,链接的包不会预构建
        include: ['axios'],
        exclude:['your-package-name'] //排除在优化之外
    },
    //静态资源服务的文件夹
    publicDir: "public",
    // 项目部署在主域名的子文件使用,例如http://localhost:3000/myvite/。 不填默认就是 ./
    // base: VITE_APP_CONTEXT_NAME==='字段名' ? './' : VITE_APP_CONTEXT_NAME, // 例子:env.VITE_APP_BASE_URL || '/'
    base: './',
    //静态资源处理
    assetsInclude: "",
    //控制台输出的级别 info 、warn、error、silent
    logLevel: "info",
    // 设为false 可以避免 vite 清屏而错过在终端中打印某些关键信息
    clearScreen:true,
    resolve: {
        alias: [//配置别名
            { find: '@', replacement: resolve(__dirname, 'src') }
        ],
        // 情景导出 package.json 配置中的exports字段
        conditions: [],
        // 导入时想要省略的扩展名列表
        // 不建议使用 .vue 影响IDE和类型支持
        extensions:['.mjs','.js','.ts','.jsx','.tsx','.json']
    },
    // css
    css: {
        // 配置 css modules 的行为
        modules: {  },
        // postCss 配置
        postcss: {
        },
        //指定传递给 css 预处理器的选项
        preprocessorOptions:{
            scss: {
                additionalData:`$injectedColor:orange;`
            }
        }
    },
    json: {
        //是否支持从 .json 文件中进行按名导入
        namedExports: true,
        //若设置为 true 导入的json会被转为 export default JSON.parse("..") 会比转译成对象字面量性能更好
        stringify:false
    },
    //继承自 esbuild 转换选项,最常见的用例是自定义 JSX
    esbuild: {
        jsxFactory: "h",
        jsxFragment: "Fragment",
        jsxInject:`import Vue from 'vue'`
    },
    //本地运行配置,以及反向代理配置
    server: {
        host: "0.0.0.0",
        https: false,//是否启用 http 2
        cors: true,//为开发服务器配置 CORS , 默认启用并允许任何源
        open: true,//服务启动时自动在浏览器中打开应用
        port: "9000",
        strictPort: false, //设为true时端口被占用则直接退出,不会尝试下一个可用端口
        force: true,//是否强制依赖预构建
        hmr: false,//禁用或配置 HMR 连接
        // 传递给 chockidar 的文件系统监视器选项
        watch: {
            ignored:["!**/node_modules/your-package-name/**"]
        },
        // 反向代理配置(后端可以有多個服務)
        proxy: {
            '/money-note-api': {
                target: VITE_BASIC_API,
                changeOrigin: true,
                rewrite: (path) => path.replace(/^\/money-note-api/, '')
            }
        }
    },
    //打包配置
    build: {
        //浏览器兼容性  "esnext"|"modules"
        target: "modules",
        //指定输出路径
        outDir: "dist",
        //生成静态资源的存放路径
        assetsDir: "assets",
        //小于此阈值的导入或引用资源将内联为 base64 编码,以避免额外的 http 请求。设置为 0 可以完全禁用此项
        assetsInlineLimit: 4096,
        //启用/禁用 CSS 代码拆分
        cssCodeSplit: true,
        //构建后是否生成 source map 文件
        sourcemap: false,
        //自定义底层的 Rollup 打包配置
        rollupOptions: {
        },
        //@rollup/plugin-commonjs 插件的选项
        commonjsOptions: {
        },
        //构建的库
        // Vite项目 build打包后浏览器中可直接使用的方法 https://blog.csdn.net/weixin_54898878/article/details/129730628
        // lib: {},
        //当设置为 true,构建后将会生成 manifest.json 文件
        manifest: false,
        // 设置为 false 可以禁用最小化混淆,
        // 或是用来指定使用哪种混淆器
        // boolean | 'terser' | 'esbuild'
        minify: "terser", //terser 构建后文件体积更小
        //传递给 Terser 的更多 minify 选项。
        terserOptions: {
        },
        //设置为 false 来禁用将构建后的文件写入磁盘
        write: true,
        //默认情况下,若 outDir 在 root 目录下,则 Vite 会在构建时清空该目录。
        emptyOutDir: true,
        //启用/禁用 brotli 压缩大小报告
        brotliSize: true,
        //chunk 大小警告的限制
        chunkSizeWarningLimit: 500
    },
    ssr: {
        // 列出的是要为 SSR 强制外部化的依赖
        external: [],
        //列出的是防止被 SSR 外部化依赖项
        noExternal: [
        ]
    }
})

// 原文链接:https://blog.csdn.net/weixin_46409887/article/details/128935767

打包构建时可能会报错,需要安装如下依赖:

npm install vite-plugin-mock
npm install terser

然后就构建了:

 

访问Vue前端应用时,带上上下文根路径(不需要的话,可以跳过此步骤)

此处,笔者创建2个Vue前端应用,然后构建出静态资源包后,分别放到nginx的html目录下,

 

 

然后在nginx的 nginx.conf配置文件中,配置上下文根,分别为 /mn 、/vuejs3

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

		location / {
            root   html;
            index  index.html index.htm;
        }

		location /mn {
            alias   html/mn/;
			index  index.html index.htm;
			try_files $uri $uri/ mn/index.html; 
        }
		
		location /vuejs3 {
            alias   html/vuejs3/;
			index  index.html index.htm;
			try_files $uri $uri/ vuejs3/index.html; #解决页面刷新404问题
        }
   }

重启nginx 

 效果如下:

参考文档:

vuejs官网
https://cn.vuejs.org/guide/quick-start.html#try-vue-online

Vue Router官网
https://router.vuejs.org/zh/introduction.html

vite中多环境文件的使用与配置
https://blog.csdn.net/weixin_46769087/article/details/128120034

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/415084.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BitDock桌面美化工具 一直在后台偷偷上传东西,具体上传什么东西不知,一天耗费我几十个G的流量

通过流量防火墙监控发现bitdock一直在上传东西,目前截止发现已上传了40G的流量 ――――――――――――――――――――――― 程序名称:SystemAudioDetection.exe 程序说明: 路径:D:\BitDock\AudioEngine\SystemAudioDetecti…

【C 字符串】02 字符串函数(命令行参数)

Navigator一、strlen()函数—统计长度二、strcat()函数—拼接三、strncat()函数—strcat()的升级四、strcmp()和strncmp()—比较五、strcpy()和strncpy()—拷贝六、sprintf()函数—合并多个字符串七、其他可能用到的字符串函数八、ctype.h中的字符函数九、把字符串转换为数字十…

在线文章生成工具-原创文章生成工具

在线文章生成器 在线文章生成器是指一种可以在线使用的自动化创造文章的工具。它可以使用自然语言处理(NLP)技术和人工智能算法提供需要的信息,基于标题、关键字,句子关联性等元素自动创造文章内容,涵盖各种类型&…

双端队列 码蹄集

题目来源:码蹄集 题目描述: 题意分析: 这道题目需要使用到双端队列的数据结构。我们可以借助 STL 中的 deque 来实现这个数据结构。具体来说,我们可以通过 deque 的 push_front 和 push_back 操作在队列的头部和尾部添加元素&am…

地球系统模式(CESM)实践技术应用

目前通用地球系统模式(Community Earth System Model,CESM)在研究地球的过去、现在和未来的气候状况中具有越来越普遍的应用。于2010年07月推出以来,一直受到气候学界的密切关注。近年升级的CESM2.0在大气、陆地、海洋、海冰、陆冰…

图形库EasyX的学习:)

最近学了一点做小游戏的基本知识,来总结一下,巩固一下记忆: 在这个基础上初学者要先明白vs的下载及基本使用还有图形库的下载及安装; 然后才是正题: 图形库里包含c语法,所以要用c文件,但是除…

Ubantu docker学习笔记(六)容器数据卷——补充实验

文章目录一、volume container二、 data-packed volume container三、利用数据卷驱动共享数据注意要在同一个网络配置下!3.1服务端3.2客户端一、volume container 这里我觉得很好理解,volume container是专门为其他容器提供volume的容器。其实也就相当于…

深圳海运到墨西哥需要多长时间

目前,墨西哥的跨境电商商业正在高速发展,并且具有可观的红利。因此,从中国到墨西哥的运输需求很大,特别是海运,是很多跨境电商卖家主要选择的运输方式。 一般而言,中国到墨西哥的跨境卖家们普遍关注海运所需…

“终于我从字节离职了...“一个年薪40W的测试工程师的自白...

”我递上了我的辞职信,不是因为公司给的不多,也不是因为公司待我不好,但是我觉得,我每天看中我憔悴的面容,每天晚上拖着疲惫的身体躺在床上,我都不知道人生的意义,是赚钱吗?是为了更…

【云原生进阶之容器】第五章容器运行时5.8--容器热迁移

《云原生进阶之容器》专题索引: 第一章Docker核心技术1.1节——Docker综述第一章Docker核心技术1.2节——Linux容器LXC第一章Docker核心技术1.3节——命名空间Namespace第一章Docker核心技术1.4节——chroot技术第一章Docker核心技术1.5.1节——cgroup综述

MySQL-存储过程

什么是存储过程我们前面所学习的MySQL语句都是针对一个表或几个表的单条 SQL 语句,但是在数据库的实际操作中,并非所有操作都那么简单,经常会有一个完整的操作需要多条SQL语句处理多个表才能完成。例如,为了确认学生能否毕业&…

015 - C++ 类与结构体对比

今天这期我们主要解决一个问题,就是 C 中的类和结构体有什么区别。 上一期我们讲类的时候, 我们对类有了一些基本的介绍,在本期的学习开始之前你可以先看看那一期。 本期我们有两个术语,结构体 struct,它是 structur…

【终结扩散模型】Consistency Models.OpenAI开源新模型代码,一步成图,1秒18张

【终结扩散模型】Consistency Models.OpenAI开源新模型代码,一步成图,1秒18张0、前言Abstract1. Introduction2. Diffusion Models3. Consistency Models3.1 Definition3.2 Parameterization3.3 Sampling3.4 Zero-Shot Data Editing4. Training Consiste…

MySQL运维13-数据库性能测试

文章目录1、数据库性能指标1.1、事务吞吐率1.2、响应时间2、数据库性能测试的目的3、数据库性能测试的注意事项4、数据库性能测试工具选型4.1、sysbench4.2、mysqlslap5、sysbench测试介绍5.1、sysbench的安装5.1.1、sysbench的正常安装步骤5.1.2、安装中的异常处理5.2、sysben…

数据结构|二叉树的三种遍历方式,你掌握了几种?

目录 1、遍历方式 2、前序遍历 3、中序遍历 1、遍历方式 学习二叉树的结构,最简单的方式就是遍历二叉树。遍历二叉树就是通过某条线路对二叉树的各个结点进行一次访问,访问的方法有三种分为前序遍历、中序遍历、后续遍历,层序遍历它们的遍…

TryHackMe-Year of the Fox(Linux渗透测试)

Year of the Fox 你能熬过狡猾的狐狸吗? 端口扫描 循例nmap 有个域名,加入hosts SMB枚举 smbmap enum4linux -a,枚举到两个账户 Web枚举 进80发现需要登录 上hydra RCE to Getshell 进来可以查看一些文件 bp发现这里存在过滤 burpfuzz一…

数据结构---作业1时间复杂度

本专栏是对自我的平时作业错题及掌握知识不牢固的地方的总结专栏. 1.大O是一个渐进表示法,不会去表示精确的次数,cpu的运算速度很快,估计精确的没有意义。 2. 此函数有一个循环,但是循环没有被执行n次,i每次都是2倍进…

再不转型为ChatGPT程序员,有遭受降维打击的危险

Open AI在演示GPT-4的时候,有这么一个场景:给一个界面草图,就可以生成网页代码。这个演示非常简单,如果界面原型比较复杂呢?像这样:ChatGPT能不能直接生成HTML, CSS,JavaScript代码,把这个网页给…

【MySQL】表的约束

前言 hi~大家好呀,欢迎来到我的MySQL学习笔记系列~ 继上次数据类型的描述,这篇笔记重点记录DDL-数据定义语言对表的结构中的其他约束条件进行说明,以便让关系型数据库真正的保持完整性。 我的上一篇MySQL笔记~ 【MySQL】表的操作和数据类型_柒…

OpenCV实战之人脸美颜美型(七)——美颜demo

前言 之前我们已经完成了人脸检测、肤色检测、磨皮、美白功能,这一篇文章中我们将尝试利用OpenCV中的滑动条对象,结合窗口制作一个简单的demo。demo中会将上述功能集成进来,并通过滑动条来调整美白、磨皮力度观察其效果,先放一张效果图如下。 滑动条 OpenCV中可通过crea…