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日
    浏览(35)
  • react、Vue打包直接运行index.html不空白方法

    react、Vue打包直接运行index.html不空白方法

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

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

    Webpack开启本地服务器;HMR热模块替换;devServer配置;开发与生成环境的区分与配置

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

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

    使用node搭建服务器,前端自己写接口,将vue或react打包后生成的dist目录在本地运行

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

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

    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日
    浏览(22)
  • 新环境打包后运行报错java.lang.reflect.InvocationTargetException

    新环境打包后运行报错java.lang.reflect.InvocationTargetException

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

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

    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日
    浏览(15)
  • 详细区分react与vue

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

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

    Windows Java JavaFX IntelliJ IDEA 开发环境搭建 创建工程 编译运行 打包分发 自定义运行时

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

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

    tauri+vite+vue3开发环境下创建、启动运行和打包发布

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

    2024年01月19日
    浏览(158)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包