开启左侧

Taro中如何在运转时代码中注入node编译时环境变量

[复制链接]
在线会员 折梅问雪 发表于 2023-4-3 22:10:38 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
整、布景介绍

起首咱们瞅瞅taro民网的一弛截图

Taro中怎样正在运行时期码中注进node编译时情况变质-1.jpg

编译时变质正在运行时中使用

以前正在使用那个框架的时候呢,不竭便很好奇,那里毕竟是怎样完毕,其时尔设想了二个标的目的:

  • 两次编译——那个是尔开端的设法现在瞅是毛病的
  • babel插件——那个是尔前端时间进修开辟babel-plugin时的设法,实践上能够完毕,可是那里用的没有是
1、process.env.TARO_ENV的完毕道理是甚么呢?

taro 是一个跨仄台的前端开辟框架,它可让开辟者使用一套代码,编译成差别仄台的使用,好比微疑女伶 href="https://www.taojin168.com/cloud/" target="_blank">小法式、付出宝小法式、baidu小法式、H五、React Native 等。
为了完毕这类跨仄台的才气,taro 需要按照差别的目标仄台,天生差别的设置文献战代码。那便需要一个情况变质去标记目前的目标仄台,那个情况变质即是 process.env.TARO_ENV。
process.env.TARO_ENV 是一个正在编译时注进的情况变质,它的值与决于施行编译号令时传进的参数。好比,

  • 假设施行 taro build --type weapp,那末 process.env.TARO_ENV 的值即是 weapp。
  • 假设施行 taro build --type h5,那末 process.env.TARO_ENV 的值即是 h5。
如许,taro 就能够按照 process.env.TARO_ENV 的值,挑选响应的编译器战插件,天生对于应仄台的代码战设置文献。
使用办法:
  1. if (process.env.TARO_ENV === 'weapp') {
  2.   // 微疑小法式独有的逻辑
  3. } else if (process.env.TARO_ENV === 'alipay') {
  4.   //领取 宝小法式独有的逻辑
  5. } else if (process.env.TARO_ENV === 'h5') {
  6.   // H5特有
  7. }
复造代码
而如许的功用,道理很简朴,主要使用了webpack的DefinePlugin插件。
2、webpack DefinePlugin的完毕道理

webpack DefinePlugin 的完毕道理是正在编译时将代码中的变质交流为其余值或者表示式。如许能够按照差别的情况或者设置去定造代码的举动,比方启开或者封闭某些特征,切换差别的效劳 URL,大概按照 process.env.NODE_ENV 辨别开辟战消耗情势。
DefinePlugin 的用法是正在 webpack 设置文献中创立一个插件真例,并传进一个工具,工具的每一个键皆是一个标记符或者多个以 . 跟尾的标记符,工具的每一个值皆是一个字符串、一个布我值、一个数字、一个工具或者一个函数。假设值是一个字符串,它会被当作代码片断去使用;假设值没有是字符串,它会被变换成字符串(包罗函数)。假设值是一个工具,它的统统键城市使用差异的办法界说。假设键有 typeof 前缀,它不过对于 typeof 挪用界说的。
以process.env.TARO_ENV为例上面的设置文献界说了一点儿全部变质:
  1. // webpack.config.js
  2. const webpack = require('webpack');
  3. module.exports = {
  4.   // ...
  5.   plugins: [
  6.     new webpack.DefinePlugin({
  7.       'process.env.TARO_ENV': JSON.stringify(process.env.TARO_ENV),
  8.     }),
  9.   ],
  10. };
复造代码
如许,正在代码中使用process.env.TARO_ENV时编译时
  1. //方才的代码假定 process.env.TARO_ENV的值是weapp
  2. if (process.env.TARO_ENV === 'weapp') {
  3.   // 微疑小法式独有的逻辑
  4. } else if (process.env.TARO_ENV === 'alipay') {
  5.   //领取 宝小法式独有的逻辑
  6. } else if (process.env.TARO_ENV === 'h5') {
  7.   // H5特有
  8. }
  9. //编译后的成果
  10. if ( 'weapp' === 'weapp') {
  11.   // 微疑小法式独有的逻辑
  12. } else if ( 'weapp' === 'alipay') {
  13.   //领取 宝小法式独有的逻辑
  14. } else if ( 'weapp' === 'h5') {
  15.   // H5特有
  16. }
复造代码
3、归纳

process.env.TARO_ENV。那个变质是Taro正在编译时使用webpack DefinePlugin注进到代码中的,用去暗示目前的目标仄台。颠末那个变质,咱们能够正在代码中截至一点儿前提鉴别,完毕差别仄台的差别化处置。
道理仍是相称简朴的,假设对于您有辅佐,省事面赞减存眷吧,以后会连续分享前端手艺的。
您需要登录后才可以回帖 登录 | 立即注册 qq_login

本版积分规则

发布主题
阅读排行更多+
用专业创造成效
400-778-7781
周一至周五 9:00-18:00
意见反馈:server@mailiao.group
紧急联系:181-67184787
ftqrcode

扫一扫关注我们

Powered by 职贝云数A新零售门户 X3.5© 2004-2025 职贝云数 Inc.( 蜀ICP备2024104722号 )