当前位置: 首页 > web >正文

uniapp+ts 多环境编译

1. 创建项目

npx degit dcloudio/uni-preset-vue#vite-ts [项目名称]

2.创建env目录

多环境配置文件命名为.env.别名

添加index.d.ts


interface ImportMetaEnv{readonly VITE_ENV:string,readonly UNI_PLATFORM:string,readonly VITE_APPID:string,readonly VITE_NAME:stringreadonly VITE_VERSION:stringreadonly VITE_API_BASE_URL:string
}interface ImportMeta{readonly env:ImportMetaEnv;
}

3.修改vite.config.ts

import { defineConfig, loadEnv,type PluginOption } from "vite";
import uni from "@dcloudio/vite-plugin-uni";
import {resolve } from 'path'
import { copyToDeployDir } from "./post-build-plugin";
import { modifyVersion } from "./version-plugin";// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {const env = loadEnv(mode, process.cwd()+"/env", ['VITE_']);return {envDir:resolve(__dirname, 'env'),plugins: [modifyVersion(mode,env),uni(),copyToDeployDir(mode,env)],resolve:{alias:{'@':resolve(__dirname, 'src')}}}
});

post-build-plugin.ts文件内容为:

import {  loadEnv,type PluginOption } from "vite";
import {resolve } from 'path';
import fs from 'fs-extra';//拷贝到发布目录
export function copyToDeployDir(mode: string,baseEnv :Record<string,string>) : PluginOption {return{name: 'copy-to-deploy',enforce: 'post',async  closeBundle() {try{if (!baseEnv.VITE_NAME) {throw new Error('VITE_NAME environment variable is not defined');}const nodeEnv = baseEnv.VITE_USER_NODE_ENV == "development" ? "dev":"build";// 路径安全处理const sourceDir = resolve(__dirname, 'dist');const destDir = resolve(__dirname, 'deploy', baseEnv.VITE_NAME);await fs.copy(sourceDir, destDir, { overwrite: true });console.log(`✅ 文件已复制到: ${destDir}`);if(baseEnv.VITE_PLATFORM =="mp-toutiao"){await createPackageFile(destDir, nodeEnv, baseEnv);}await updateProjectFile(destDir, nodeEnv, baseEnv);} catch (error) {console.error('❌ 文件复制失败:', error instanceof Error ? error.message : error);process.exit(1); // 构建失败时退出}}}
}//创建package.json文件
async function createPackageFile(destDir:string, nodeEnv:string, env:Record<string,string>){const filePath = resolve(destDir, nodeEnv, env.VITE_PLATFORM,"package.json")const content = "{\"industrySDK\": true}";await fs.writeFile(filePath, content);console.log(`✅ package.json文件已创建`);
}//更新项目 appid ,项目名称
async function updateProjectFile(destDir:string, nodeEnv:string,env:Record<string,string>){const filePath = resolve(destDir, nodeEnv, env.VITE_PLATFORM,"project.config.json")const content = fs.readFileSync(filePath, 'utf8');const newContent = content.replace('TT_APPID', env.VITE_APPID).replace('TT_NAME',env.VITE_NAME);console.log(newContent)await fs.writeFile(filePath, newContent);
}

4.编译命令执行

pnpm run dev:mp-toutiao-别名

注:package.json中需将编译命令添加

"dev:mp-toutiao-别名": "uni -p mp-toutiao --mode 别名",

5.完整多环境配置工程

playlet: uniapp + typescript + pina 创建小程序,支持多环境导出小程序

http://www.xdnf.cn/news/8631.html

相关文章:

  • JavaSE核心知识点03高级特性03-03(IO流)
  • 5 分钟速通密码学!
  • 人工智能发展
  • 【C/C++】胜者树与败者树:多路归并排序的利器
  • MFC——编程框架和基础
  • “可观、可测、可调、可控“,四可功能如何让光伏电站变身电网“优等生“?
  • Spring AI(8)——流式响应
  • wafer晶圆几何形貌测量系统:厚度(THK)翘曲度(Warp)弯曲度(Bow)等数据测量
  • 直线导轨运转过程中如何避免震动发生?
  • Linux上部署IgH EtherCAT主站教程
  • B2C商城架构对比:ZKmall模板商城为何选择 Spring Cloud
  • 《P1470 [USACO2.3] 最长前缀 Longest Prefix》
  • SOC-ESP32S3部分:9-GPIO输入按键状态读取
  • python打卡训练营打卡记录day34
  • 电力设备类——如何使用YOLOv8模型对配网缺陷检数据集进行训练、评估和可视化 这个配网销钉缺失检测图像数据集 配网缺陷检测图像数据集 配网缺陷
  • 【达梦数据库】groupadd无法打开etc group
  • C++:适配器
  • VsCode配置
  • 前后端分页详解
  • Java的动态加载及类加载器实践
  • UI 设计|提高审美|Linear UI风格分享
  • RxJS 核心操作符详细用法示例
  • AI开发实习生面试总结(持续更新中...)
  • 精华贴分享|个股拥挤度分析研究分析
  • docker安装es连接kibana并安装分词器
  • Windows开机时间过长的原因
  • 射频芯片学习
  • 技术文档的炼金术:从信息碎片到知识体系的系统性构建
  • 《进化陷阱》--AI 生成文章 《连载 1》
  • RxJS 高阶映射操作符详解:map、mergeMap 和 switchMap