热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

反应配置文件以进行后期部署设置

如何解决《反应配置文件以进行后期部署设置》经验,为你挑选了1个好方法。

我已经建立了一个reactjs网站并试图使其可部署。

现在,所有配置都通过导入到所有模块中的config.js完成。

但是,当我构建应用程序时,它会被编译到部署js中,并且是不可配置的。

我想拥有一个单独的文件,系统管理员可以根据其环境配置各种设置,例如API端点(该应用程序可能与后端未在同一服务器上运行,并且将无法访问DNS )。

有办法做到这一点吗?我也不希望为此使用第三方库。



1> dekauliya..:

不确定Linux的方法,但是我经常使用create-react-app(cra),Docker和kubernetes,并最初遇到类似问题。然后,我受到https://github.com/inloop/cra-docker的启发,能够在运行时在Docker和kubernetes中使用create-react-app找到解决配置文件问题的解决方案。以下是我的解决方案中的步骤:

    config.js准备好您的自定义配置(例如:)。配置文件中的内容应如下所示:

    window.ENV = {
        "ENVIRONMENT":"stg",
        ...other key-value configuration as you'll need
    }
    

您可以通过访问代码的任何位置来访问您的配置window.ENV.your_configuration_key(例如,可以在上方找到上述ENVIRONMENT值window.ENV.ENVIRONMENT

    public目录下,编辑index.html并添加

在身体前的头部。并放在目录config.jspublic

解决cra的外部配置的目标是,您希望将config.js文件放在源目录之外,并将其放在静态public目录下。如果将配置放在源目录下,则配置将在构建时进行编译,因此您将无法在运行时轻松更改配置(当然,模板也可以,但对我而言并不理想)。请注意,从静态目录提供文件需要一台服务器,但是由于我已经在使用nginx静态响应应用程序提供服务了,因此这样做绝对没有问题。

    由于我已经nginx在为我的react应用程序提供静态文件,因此我不需要对Dockerfile进行更改以迎合其他需求,config.js因为它build在编译后将在目录下可用(由于将其放置在public目录下)。我的Dockerfile看起来像这样:

    # Step 1: Build static react app
    FROM node AS builder
    
    # Define working directory and copy source
    WORKDIR /app
    
    COPY . .
    
    # Install dependencies and build whatever you have to build 
    RUN yarn install && yarn build
    
    # Step 2: Run image
    FROM nginx
    
    COPY --from=builder /app/build /usr/share/nginx/html
    RUN rm /etc/nginx/conf.d/default.conf
    
    COPY nginx.conf /etc/nginx # this step is not required, only when you have custom nginx configuration
    

然后,构建您的docker映像: docker build -t [your-docker-image]:latest .

    最后但并非最不重要的一点是,您将需要config.js在运行时替换文件。现在可以很容易地做到这一点。

如果使用docker运行,则可以使用-v命令替换文件。因此,您的docker运行时命令应类似于以下内容:

    docker run --name [app-container-name] -d -p [host_port]:80 \
        -v [path_to_config.js_file_in_certain_environment]:/usr/share/nginx/html/config.js \
[your-docker-image]

如果您使用kubernetes运行,您可以通过使用替代在现有目录中的文件的容器下configMapvolumevolumeMountssubPath

首先将您的config.js放在k8s ConfigMap下:

kubectl create configmap [k8s_config_name] --from-file=config.js=[path_to_config.js_file_in_certain_environment]

在您的k8s部署中挂载configMap:

containers:        
  ...
  volumeMounts:
  - name: [k8s_config_name_volume]
    readOnly: true
    mountPath: "/usr/share/nginx/html/config.js"
    subPath: "config.js"

volumes:
  - name: [k8s_config_name_volume]
    configMap:
      name: [k8s_config_name]

请注意,必须替换mountPathsubPath参数,以替换目录中已有文件的目录下的文件。如果subPath在将卷装入到已经包含一些文件的现有目录的过程中省略了该结果,那么在我们的情况下,结果是不利的,它将通过将新文件复制到该目录中但删除所有其他先前存在的文件来覆盖现有目录。


推荐阅读
  • 1.脚本功能1)自动替换jar包中的配置文件。2)自动备份老版本的Jar包3)自动判断是初次启动还是更新服务2.脚本准备进入ho ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • Firefox火狐浏览器关闭到http://detectportal.firefox.com的流量问题解决办法
    本文介绍了使用Firefox火狐浏览器时出现关闭到http://detectportal.firefox.com的流量问题,并提供了解决办法。问题的本质是因为火狐默认开启了Captive portal技术,当连接需要认证的WiFi时,火狐会跳出认证界面。通过修改about:config中的network.captive-portal-service.en的值为false,可以解决该问题。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 如何利用 Myflash 解析 binlog ?
    本文主要介绍了对Myflash的测试,从准备测试环境到利用Myflash解析binl ... [详细]
  • Dockerfile构建镜像的指令和说明
    本文介绍了Dockerfile是用来构建镜像的文本文件,其中包含了构建镜像所需的指令和说明。通过创建一个Dockerfile文件并编写内容,可以快速创建自定义的镜像。文章还提供了一个示例,展示了如何使用Dockerfile创建一个本地构建的nginx镜像,并通过docker images命令查看镜像的版本。希望本文对大家的学习有所帮助,并希望大家多多支持编程笔记。 ... [详细]
  • Nginx Buffer 机制引发的下载故障
    Nginx ... [详细]
  • IP经常分为内网和外网的,内网IP一般是有路由器分配的,尤其是想公司可能都有各自的内网IP,公用的公网IP。查询内网IP的通用方法是通过doc指令来查询,如ipconfig或者ipconfigall ... [详细]
  • 现在比较流行使用静态网站生成器来搭建网站,博客产品着陆页微信转发页面等。但每次都需要对服务器进行配置,也是一个重复但繁琐的工作。使用DockerWeb,只需5分钟就能搭建一个基于D ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 使用Docker安装和运行Nexus
    本文介绍了使用Docker安装和运行Nexus的方法,包括docker-compose.yml配置和启动时可能出现的权限问题解决方法。同时提供了登录控制台验证安装的地址和登录信息。 ... [详细]
author-avatar
薛薛Sying
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有