uni-app -- cli创建多环境以及打包问题

最近项目又多又急,还全部都是没接触过的技术,RN,uni-app,上手就要写项目,写的实在是异常艰难,uni-app的项目还好,语法上类似于vue,RN写起来就比较痛苦了,样式都不太好写,调试也不太方便。

这里就先记录一下uni-app项目的创建环境变量以及打包的流程,做个记录,方便以后查阅。

其实,通过hb编辑器,直接创建uni-app项目是可以的,打包的时候直接使用hb的打包功能就行,但是这样只能做到打包之后,前端开发把打好的包发送给运维,让运维去部署,这样及其浪费时间,而且公司是 jks 自动部署,所以为了这一块,最后选择了通过cli脚手架,创建uni-app项目。

通过vue-cli脚手架创建uni-app项目  这是官网的创建教程,直接参考就好。其他的我也没啥说的。

创建多环境

uni-app在创建项目的时候,只分了两种环境:开发,生产。

其实这么说还不对,应该是在我本地开发的时候,只有一个  development  环境,在我打包的时候 只有一个 production  环境

但是我们真的在实际开发的时候,肯定不是只有development的。同样的,在打包上线之前,肯定也是不能直接打完包就丢到正式服务器上的。我司就有测试环境,预发环境,正式环境 三种。所以uni-app项目的环境是肯定不够的,然后我就开始想着创建多环境。

首先,项目创建好了之后,在package.json中可以看到 npm 命令,可以看到 NODE_ENV 只区分了开发和线上两种模式。这个在官网上也有说明  uni-app开发与生产环境配置,但是可以很明确的看到,在开发的时候,NODE_ENV 只有一个 development ,那我想在本地开发的时候,能存在多个环境。例如:在本地开发,但我我能链接测试,预发,甚至是线上的数据库,现在是做不到的

"build:app-plus": "cross-env NODE_ENV=production UNI_PLATFORM=app-plus vue-cli-service uni-build",

"dev:app-plus": "cross-env NODE_ENV=development UNI_PLATFORM=app-plus vue-cli-service uni-build --watch",

在项目运行的时候,我们可以使用 process.env.NODE_ENV 来区分环境,我想增加多个环境,也是可以通过改变  NODE_ENV  的值来实现的。

"dev:h5": "cross-env NODE_ENV=development UNI_PLATFORM=h5 vue-cli-service uni-serve",
"dev:h5-test": "cross-env NODE_ENV=test UNI_PLATFORM=h5 vue-cli-service uni-serve",
"dev:h5-pre": "cross-env NODE_ENV=pre UNI_PLATFORM=h5 vue-cli-service uni-serve",
"dev:h5-pro": "cross-env NODE_ENV=production UNI_PLATFORM=h5 vue-cli-service uni-serve",

我在本地开发的时候增加了三个环境 分别是 test 、 pre、production,也就是测试、预发和正式环境。通过运行不同的npm命令,执行不同的脚本,获取不同的 NODE_ENV 的值,然后通过不同的 NODE_ENV 区分不同的环境,连接不同的接口。打包的时候也是同一个道理。

/* eslint-disable no-undef */
let baseUrl = "";
if (process.env.NODE_ENV === "development") {
  // 开发环境
  baseUrl = "http://development";
} else if (process.env.NODE_ENV === "test") {
  // 测试环境
  baseUrl = "http://test";
} else if (process.env.NODE_ENV === "pre") {
  // 预发布环境
  baseUrl = "http://pre";
} else if (process.env.NODE_ENV === "production") {
  // 正式环境
  baseUrl = "http://production";
} 
console.log("====================================");
console.log(process.env.NODE_ENV, "process.env.NODE_ENV");
console.log(baseUrl, "baseUrl");
console.log("====================================");
module.exports = {
  baseUrl: baseUrl
};

上面是我新建了一个 config.js 文件,通过区分环境,调用不同环境的接口,项目运行之后,我能在控制台上明确看到我当前的NODE_ENV 是什么值,能看到我当前运行的接口是哪个环境

当我执行的是 dev:h5 脚本:此时 控制台打印的 NODE_ENV = development, baseUrl = http://development

当我分别执行 dev:h5-test 、dev:h5-pre 得到的结果分别是

所以可以看到,开发人员是可以通过配置 NODE_ENV 来区分前端开发环境的。

同理,打包也是一样的,新建打包命令,查看打包之后的NODE_ENV以及 baseUrl

新建打包命令

"build:h5-dev": "cross-env NODE_ENV=development UNI_PLATFORM=h5 vue-cli-service uni-build",
"build:h5-test": "cross-env NODE_ENV=test UNI_PLATFORM=h5 vue-cli-service uni-build",
"build:h5-pre": "cross-env NODE_ENV=pre UNI_PLATFORM=h5 vue-cli-service uni-build",
"build:h5-pro": "cross-env NODE_ENV=production UNI_PLATFORM=h5 vue-cli-service uni-build",

打包之后运行项目,通过 http-server在本地运行打包之后的项目,模拟服务器环境

然后执行不同的脚本文件,查看 NODE_ENV以及 baseUrl

                     

分别打了四个不同环境的包,可以看到一件区分出了不同的 NODE_ENV以及 baseUrl。

jks自动化部署

其实上面的build已经做到了区分多环境,那运维在部署的时候,只需要执行对应的命令就好,但是uni-app在build的时候,有一个问题。打包的时候,会出现一个dist目录,目录下会有一个打包的平台文件,因为uni-app是多平台的,所以这个文件对应的就是打包的这个平台。例如,我做的是h5项目,执行的命令 中 有 UNI_PLATFORM=h5 这一句,就会在 

只有当 NODE_ENV = production,build的时候,会在 dist目录下生成一个 build 文件夹

当 NODE_ENV != production,build的时候,会在 dist目录下生成一个 dev 文件夹.

如果我打包的是h5项目,那就会在 build/dev 目录下生成一个h5的文件夹,文件夹内部就是打包好的文件,也就是运维要部署的文件。

但是运维部署的时候,一般都是一套的,只会取dist根目录下的文件,一般不会去内部找文件,除非你部署的时候,直接更改路径,改成你打包之后的路径,也就是 dist/dev/h5 或者是 dist/build/h5 ,但是这又出现问题了,我打正式包,和 其他环节的包,最后的路径还是不一样的,那运维也是没法判断的,所以我们需要在打包之后,将打包的文件全部提取出来,直接丢到dist根目录下,然后删除掉打包出来的文件以及文件夹。

"build:m": "rm -rf ./dist/ && cross-env NODE_ENV=production UNI_PLATFORM=h5 vue-cli-service uni-build && cp -r ./dist/build/h5/* ./dist/ && cp -r ./dist/build/h5/* ./dev/ && rm -rf ./dist/build",

这里用到了 linux 命令,意识就是

1、打包的时候先删除之前打包的dist文件夹以及内部文件

2、复制build/h5 ,或者 dev/h5 文件夹内部的文件,直接丢到 dist 目录下

3、然后删除 build文件夹以及内部文件或者 dev文件夹以及内部文件

 

其实我还有个想法,就是新增一个环境变量,用来区分环境,然后把 所有的 NODE_ENV 全部设置为 production ,这样打包的时候,全部都是 dist/build/h5 这个目录,运维可以直接部署这个目录。

VUE_APP_ENV:用来区分环境   NODE_ENV:用来定死打包目录,只有 dist/build/xxx平台 ,没有dist/dev/xxx平台,因为是用的是vue-cli3的架子,所以环境变量需要使用 VUE_APP_ 开头

"build:h5-dev": "cross-env VUE_APP_ENV=development NODE_ENV=production UNI_PLATFORM=h5 vue-cli-service uni-build",
"build:h5-test": "cross-env VUE_APP_ENV=test NODE_ENV=production UNI_PLATFORM=h5 vue-cli-service uni-build",
"build:h5-pre": "cross-env VUE_APP_ENV=pre NODE_ENV=production UNI_PLATFORM=h5 vue-cli-service uni-build",
"build:h5-pro": "cross-env VUE_APP_ENV=production  NODE_ENV=productionUNI_PLATFORM=h5 vue-cli-service uni-build",

或者打包的时候前端的npm脚本在改一下就好 ,只需要从 build/h5中取文件,dev/build 文件夹是不会被打包出来的,运维也只需要部署 dist/build/xxx

"build:m": "rm -rf ./dist/ && cross-env NODE_ENV=production UNI_PLATFORM=h5 vue-cli-service uni-build && cp -r ./dist/build/h5/* ./dist/ &&  rm -rf ./dist/build",

 

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用内容,uni-app项目可以通过HBuilderX可视化界面或vue-cli命令行两种方式创建。在HBuilderX中,选择项目->发行->原生App-本地打包,然后进行编译和导出步骤,最终生成本地打包App资源。 在实名认证后,可以进行项目的打包。通过云打包或本地生成安装包的方式进行打包,具体时间取决于打包队列和项目的复杂性。 另外,也可以使用HBuilderX的离线打包功能。具体的打包步骤可以参考uni-app的文档或使用HBuilderX的App cli自动化打包功能。 总结起来,uni-app项目的打包可以通过HBuilderX的可视化界面或命令行方式进行,打包过程涉及编译、导出和生成安装包等步骤,具体时间取决于打包队列和项目的复杂性。此外,也可以使用HBuilderX的离线打包功能或App cli自动化打包功能进行打包。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [用uniapp开发打包多端应用完整指南](https://blog.csdn.net/xjbx/article/details/128114077)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【uni-app系列】uni-app之App打包](https://blog.csdn.net/u012069313/article/details/126544128)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值