React 多环境运行打包配置(版本区分)

这篇具有很好参考价值的文章主要介绍了React 多环境运行打包配置(版本区分)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

前后端分离的项目中,前端会有很多环境:本地开发,测试环境,预发布环境,正式上线环境等等,我们的项目有多套基本相同的项目,处于多种环境,当每个环境都需要打包的时候,手动修改配置就很繁琐而且难免出错,比如每个环境对应的服务器地址不同,项目名称不同,专门定制的功能。


一、环境变量

制定环境变量:

  1. 在根目录添加.env文件,配置所有情况下都会用到的配置(不知道这个存在的意义,所有的都需要的也就不需要配置了吧)。
  2. 在根目录添加.env.local 文件,配置所有情况下都会用到的配置,与.env的区别是只会在本地,该文件不会被git跟踪。
  3. 在根目录添加.env.[mode] 文件,配置对应某个模式下的配置,比如:.env.development来配置开发环境的配置。
  4. 在根目录添加.env.[mode].local文件,配置对应某个模式下的配置,与.env.[mode]的区别也只是会在本地生效,该文件不会被git跟踪

Git忽略.env.[mode].local文件:
.gitignore文件里处理

二、.gitignore的用法

Git忽略文件.gitignore详解
在工程中,并不是所有文件都需要保存到版本库中的,例如“target”目录及目录下的文件就可以忽略。在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件或目录。
React 多环境运行打包配置(版本区分)

# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.js

# /public

# testing
/coverage

# production
/build

# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
.env.sz.local
.env.zj.local

npm-debug.log*
yarn-debug.log*
yarn-error.log*

/build.rar

三、使用步骤

1.在项目中安装 dotenvdotenv、dotenv-expand

代码如下(示例):

dotenv、dotenv-expand详情

npm install dotenv
npm install dotenv-expand

1.dotenv

React 多环境运行打包配置(版本区分)
React 多环境运行打包配置(版本区分)
基本常用的方法场景就这些了,更完整的用法可以直接查阅文档
dotenv

2.dotenv-expand

React 多环境运行打包配置(版本区分)
React 多环境运行打包配置(版本区分)
基本常用的方法场景就这些了,更完整的用法可以直接查阅文档
dotenv-expand
使用 dotenv 、dotenv-expand可以让我们免于在各个文件中引入配置文件,也可以很好的解决敏感信息的泄漏,利于后期代码维护

2.根目录下创建 .env 文件

HOST=localhost
//本地运行端口
PORT=3008

React 多环境运行打包配置(版本区分)

根目录下 env.js 下引入 dotenv 并使用(简单示例):
React 多环境运行打包配置(版本区分)

require('dotenv').config({ path: '.env' })

// 使用
console.log(process.env.HOST) // localhost
console.log(process.env.PORT) // 3000

3.根目录下多环境 .env.xxx 文件

在根目录下创建.env.xxx文件,例如.env.development,.env.test,env.sz(sz是我的项目标识)等等
React 多环境运行打包配置(版本区分)
React 多环境运行打包配置(版本区分)
请注意,只有 NODE_ENV,BASE_URL 和以REACT_APP_开头的变量将通过 webpack.DefinePlugin 静态地嵌入到客户端侧的代码中。这是为了避免意外公开机器上可能具有相同名称的私钥。
如果需要自定义:
在·config·文件目录下 的env.js文件更改(建议统一使用):

// Grab NODE_ENV and REACT_APP_* environment variables and prepare them to be
// injected into the application via DefinePlugin in Webpack configuration.
const REACT_APP = /^REACT_APP_/i;

React 多环境运行打包配置(版本区分)
.env.sz代码:

PORT=3008
//不加`REACT_APP_`无效
Version_Code=ShenZhenYouLian //无效
//项目标识
REACT_APP_Titlee=xxxx项目管理系统

REACT_APP_Version_Code=ShenZhenYouLian
//接口地址
REACT_APP_MOCK_API='http://172.17.17.17:8080/api'  
//等等

注意:
如果使用React/TypeScript要在react-app-env.d.ts类型声明文件,声明上述(REACT_APP_Version_Code)类型
React 多环境运行打包配置(版本区分)
当项目编译时将会根据tsconfig.json中include指定的目录去找代码所需要的类型声明文件,而react-app-env.d.ts会告诉编译器含有哪些类型声明,里面含有一些常用的类型声明,比如react、react-dom的一些API类型声明,图片、样式模块类型声明等等。
react-app-env.d.ts的作用以及如何生成的(删除后再次生成)?

package.json配置打包命令:
React 多环境运行打包配置(版本区分)
config/paths.js文件配置:
React 多环境运行打包配置(版本区分)config/env.js文件配置:
config/env.js文件配置:
process.argv简单了解一下
React 多环境运行打包配置(版本区分)

//nodejs模块——fs模块:fs模块用于对系统文件及目录进行读写操作
const fs = require('fs');
//path模块是nodejs官方提供的、用来处理路径的模块。它提供了一系列的方法和属性,用来满足用户对路径的处理需求
const path = require('path');
 //上述配置config/paths.js
const paths = require('./paths');

//获取命令行参数,例如打包时(npm run build:sz)获取:sz
//npm run build:sz在--package.json配置:"scripts": { "build:sz": "node scripts/build.js version=sz"}等等相同
function findVERSION() {
  try {
 // process 对象是一个全局变量,它提供当前 Node.js 进程的有关信息,以及控制当前 Node.js 进程。
 // 因为是全局变量,所以无需使用 require()。
 //process.argv 属性返回一个数组,这个数组包含了启动Node.js进程时的命令行参数
 //其中:
 //数组的第一个元素process.argv[0]——返回启动Node.js进程的可执行文件所在的绝对路径
 //第二个元素process.argv[1]——为当前执行的JavaScript文件路径
 //剩余的元素为其他命令行参数

    const list = process.argv.slice(2); //log:version=sz
    for (let index = 0; index < list.length; index++) {
      const str = list[index].split("=");
      if (str.length === 2 && str[0] === "version") {
        return str[1];
      }
    }
  } catch (e) {
    return false;
  }
}
const VERSION = findVERSION();
// 命令控制面板上去进行单文件调试
// 比如: node config/evn.js version=sz
console.log('调试',VERSION);

// https://github.com/bkeepers/dotenv#what-other-env-files-can-i-use
//判断
const dotenvFiles = [
  VERSION && `${paths.dotenv}.${VERSION}.local`,//env.sz.local
  VERSION && `${paths.dotenv}.${VERSION}`,
  `${paths.dotenv}.${NODE_ENV}.local`,
  `${paths.dotenv}.${NODE_ENV}`,
  // Don't include `.env.local` for `test` environment
  // since normally you expect tests to produce the same
  // results for everyone
  NODE_ENV !== 'test' && `${paths.dotenv}.local`,
  paths.dotenv,
].filter(Boolean);

dotenvFiles.forEach(dotenvFile => {
  //fs.existsSync- Check whether the directory exists synchronously.
  if (fs.existsSync(dotenvFile)) {
    require('dotenv-expand')(
      // 包含环境变量的文件位于其他位置,则可以指定自定义路径require('dotenv').config({ path: dotenvFile })
      require('dotenv').config({
        path: dotenvFile,
      })
    );
  }
});

如何对上述配置文件方法进行调试(只能命令行调试–只有执行命令时脚本(env.js或start.js、build.js)才执行):
如果保存查看报错原因:或在config/start.js内打断点或return---命令(node scripts/start.js version=zj)
React 多环境运行打包配置(版本区分)

执行命令(可多命令打包-需要配置):

//打包build
npm run build:sz
//运行项目start
cnpm run start:sz


总结

这样就可以执行不同版本项目,例如:
配置接口基地址:

export const MOCK_API = process.env.REACT_APP_MOCK_API ;

或进行逻辑判断:文章来源地址https://www.toymoban.com/news/detail-407593.html

if(process.env.REACT_APP_Version_Code === 'ShenZhenYouLian'){
...
}else if(process.env.REACT_APP_Version_Code === 'xxx'){
...
}else{
...
}
等等

到了这里,关于React 多环境运行打包配置(版本区分)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • macOS搭建PHP开发环境(brew安装nginx、mysql 和多版本php,并配置多个php同时运行的环境)

    由于homebrew主库中没有PHP7.2 之前的版本,并且7.2,7.3版本也被标记成过时版本;所以需要先挂在第三方的扩展,具体操作如下: php5.6 php7.3 php7.4 php8.2 默认新版8以上直接安装 sudo vim /usr/local/etc/php/5.6/php-fpm.conf  下的: 注意:5.6版本的配置文件路径和其他版本不一样 listen = 127

    2024年02月04日
    浏览(52)
  • react、Vue打包直接运行index.html不空白方法

    在根目录下创建 vue.config.js 文件,写入

    2024年01月21日
    浏览(30)
  • Webpack开启本地服务器;HMR热模块替换;devServer配置;开发与生成环境的区分与配置

    目前开发的代码,为了运行需要有两个操作: 操作一:npm run build,编译相关的代码; 操作二:通过live server或者直接通过浏览器,打开index.html代码,查看效果; 这个过程经常操作会影响的开发效率,希望可以做到,当文件发生变化时,可以自动的完成 编译 和 展示; 为了

    2024年02月14日
    浏览(31)
  • 使用node搭建服务器,前端自己写接口,将vue或react打包后生成的dist目录在本地运行

    vue项目打包后生成的dist目录如果直接在本地打开index.html,在浏览器中会报错,无法运行起来。 通常我是放到后端搭建的服务上面去运行,当时前端自己也可以是node,nuxt搭建服务器,写接口等等 如果想在本地运行,我们可以借助node.js+express搭建一个服务器,将打包后的文件部

    2024年02月03日
    浏览(29)
  • Unity2022.2 版本 Android 打包环境踩坑

    最近项目用到了Unity 2022.2版本,在打Android包时遇到了一些问题:用UnityHub下载的 Android JDK, SDK, NDK 在unity编辑器中都不支持, 原因是当前hub下载的jdk版本是老版本8.0, 而此unity版本需要的是OpenJDK version 11 和 NDK r23b,参考官网:Android 环境设置 - Unity 手册 (unity3d.com) 所以这里

    2024年02月08日
    浏览(57)
  • 新环境打包后运行报错java.lang.reflect.InvocationTargetException

    业务场景:MySQL数据库定期从Oracle数据库中同步少量数据,几分钟一次 版本信息:服务器jdk1.8.0_171,开发编译环境jdk1.8.0_181 idea2023.1.2 技术框架:用了maven管理依赖,未发现spring等框架痕迹 将代码少量改动后,本地编译外加依赖打成jar包。 部署到远程服务器时,运行出错,系

    2024年02月04日
    浏览(45)
  • react项目运行卡在编译:您当前运行的TypeScript版本不受@TypeScript eslint/TypeScript estree的官方支持

    错误信息具体如下: 搜索了一下,是typescript版本的问题,提示我版本需要在3.3.0和4.5.0中间,我查看了package.json,显示版本为4.1.3,然后一直给我提示我的版本是4.9.5,全局搜索一下,发现package-lock.json文件中typescript版本是4.9.5,那么两个文件有什么区别呢,如下: 两个都是依

    2024年01月24日
    浏览(38)
  • 详细区分react与vue

    React和Vue都是目前最流行的JavaScript框架之一,它们是构建交互式用户界面的强大工具。虽然二者都有相似的用例,但它们在某些方面也有很大的不同。 React与Vue的共同点: Virtual DOM:两者都使用Virtual DOM来优化性能,使得页面只更新必要的部分而不是全量渲染。 组件化:Rea

    2024年02月08日
    浏览(21)
  • Windows Java JavaFX IntelliJ IDEA 开发环境搭建 创建工程 编译运行 打包分发 自定义运行时

    博文目录 JavaFX 官网 官网 Getting Started with JavaFX JavaFX 是一个开源的下一代客户端应用程序平台,适用于基于 Java 构建的桌面、移动和嵌入式系统。它是许多个人和公司的协作成果,目标是为开发富客户端应用程序生成一个现代、高效且功能齐全的工具包。 JavaFX 主要致力于富

    2024年02月05日
    浏览(92)
  • tauri+vite+vue3开发环境下创建、启动运行和打包发布

    目录  1.创建项目  2.安装依赖   3.启动项目  4.打包生成windows安装包   5.安装打包生成的安装包  运行下面命令创建一个tauri项目 我创建该项目时的node版本为16.15.0  兼容性注意 Vite 需要 Node.js 版本 14.18+,16+。然而,有些模板需要依赖更高的 Node 版本才能正常运行,当你

    2024年01月19日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包