- vừa được xem lúc

Cách truyền dữ liệu môi trường động của docker vào dự án Reactjs

0 0 16

Người đăng: Lâm Thái Gia Huy

Theo Viblo Asia

Bài viết này sẽ hướng dẫn mọi người cách đưa dữ liệu môi trường docker vào trong dự án reactjs mà không cần phải rebuild lại image. Do đây là bài viết đầu tiên nên mong mọi người ủng hộ và đồng hành với mình trong quá trình học code

1 Mục tiêu bài viết:

  • Gói image sẽ không cần build lại mỗi khi chạy
  • Yêu cầu chỉnh sửa code thấp nhất
  • Cho phép truy cập đồng bộ các biến môi trường
  • Đơn giản hoá phương thức thực hiện
  • dễ dàng đưa vào 1 project đang phát triễn mà ít gây ảnh hưởng nhất

Module react-inject-env cho phép người dùng ngay lập tức truy cập các dử liệu môi trường sau khi build xong file react

nói vắn tắt là khi ta tạo 1 file env.js trong folder /public thì khi chạy dữ liệu sẽ được xuất ra bởi hàm window

Đây là cách sử dụng

1 cài module react-inject-env

npm install react-inject-env --save-dev hoặc yarn add react-inject-env --dev

2 thêm vào file index.html tạo trong thư mục src

<script src='/env.js'></script>

3 trong thư mục src tạo thêm 1 file env.js

export const env = { ...process.env, ...window.env }

4 giờ ta có thể thay thế tất cả từ khoá window.en hoặc process.env bằng env

import { env } from './env' export const App = () => {
return ( <div style={{backgroundColor: env.REACT_APP_COLOR}}> <span>{env.REACT_APP_MAIN_TEXT}</span> </div> )
}

5 giờ thì build gói react bằng lện npm run build hoặc react-scripts build tuỳ thuộc vào dự án của các bạn như thế nào

6 chạy thử lệnh set giá trị

[trong trường hợp dùng giá trị từ env] npx react-inject-env set

REACT_APP_COLOR=blue REACT_APP_MAIN_TEXT="Blue Background" npx react-inject-env set

nếu dung window set REACT_APP_COLOR=navy&& set REACT_APP_MAIN_TEXT=Navy Background&& npx react-inject-env set

7 giờ thì mở file build/env.js để xem thành quả

nếu xuất hiện đúng giá trị bạn truyền vào thì bạn đã thành công ! chúc mừng bạn

Xong hết rồi , chỉ thế thôi, giờ làm sao để sử dụng nhỉ ? truyền giá trị môi trường vào như thế nào ??

đối với .env / dotenv

react-inject-env sẽ tự động xác định giá trị .env và truyền vào file build xin lưu ý: các giá trị trong file .env sẽ luôn được ưu tiên sử dụng bất kể bạn có set giá trị thế nào đi nữa

Typescript

bạn hãy tạo 1 file env.ts thay vì env.js như ban đầu và chỉ định giá trị truyền vào

declare global { interface Window { env: any }
} // change with your own variables
type EnvType = { REACT_APP_COLOR: string, REACT_APP_MAIN_TEXT: string, REACT_APP_LINK_URL: string, REACT_APP_LOGO_URL: string
}
export const env: EnvType = { ...process.env, ...window.env }

sau khi chạy typescript bạn sẽ có file trong như thế này

(nếu các bạn không chạy được thì thêm dòng "baseUrl": "." nhé)

Docker

có rất nhiều bài viết hướng dẫn truyền vào ARG hay docker-component nhưng điều đó vô cùng bất tiện nếu như bạn muốn build 1 image và đem đi sử dụng ở nhiều thiết bị khác nhau , nên mình sẽ hướng dẫn các bạn build dockerfile

giờ thì build thử thôi

docker build -t test . docker run -d -e REACT_APP_FBOX_IP=172.10.1.241 --name test test docker exec -it test /bin/sh cat /usr/share/nginx/html/env.js

image.png

nếu xuất hiện thì chúc mừng bạn bạn đã làm được rồi đấy, vào trang web chạy thử 1 lệnh console log xem sao (mình sử giá trị lại cho dễ nhìn xíu hen) thành công rồi giá trị gán vào đã được tìm thấy

Kết luận

react-inject-env là 1 module giúp bạn giải quyết các vấn đề truyền giá trị bên ngoài vào trong project react, mong qua bài viết này có thể giúp mọi người hiểu rõ phương thúc và cách thức để làm và thành công, xin cảm ơn

reference

https://dev.to/eslynn/how-to-dynamically-change-your-react-environment-variables-without-re-building-55el https://www.npmjs.com/package/react-dotenv https://www.folkstalk.com/tech/restart-nginx-in-alpine-linix-with-code-examples/

Bình luận

Bài viết tương tự

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 396

- vừa được xem lúc

Phần 1: Giới thiệu về Kubernetes

Kubernetes là gì. Trang chủ: https://kubernetes.io/. Ai cần Kubernetes.

0 0 100

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 1- Lịch sử)

1. Vì sao nên sử dụng. . .

0 0 104

- vừa được xem lúc

Docker - những kiến thức cơ bản phần 1

Giới thiệu. Nếu bạn đang làm ở một công ty công nghệ thông tin, chắc rằng bạn đã được nghe nói về Docker.

0 0 78

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 2 - Dockerfile)

1. Mở đầu.

0 0 67

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 3: Docker-compose)

1. Mở đầu. . .

0 0 121