DEV Community

Cover image for Environment Variables (i.e hiding variables) in react-native-typescript
Chukwunazaekpere
Chukwunazaekpere

Posted on • Updated on

Environment Variables (i.e hiding variables) in react-native-typescript

With some understanding about ethical-hacking, it should be made obvious, as to how much sensitive information should be guarded, as developers, in our codes. Environment variables are hence, conceptualised, on this basis. In react-native-typescript (typescript basically), the presence of a variable in a code, must be intentionally thought about. This defines the type and consequently, the type of operation permissible on such variable.
In this post, I'll be showing you how to hide a dummy API-key. Onwards then, let's install react-natve-dotenv library, with the command below:

yarn add react-native-dotenv
or npm install react-native-dotenv
Enter fullscreen mode Exit fullscreen mode

In our src folder, create a "types" folder. Create a file: "env.d.ts".
In this file, we'd define the variable name as will be used in our code and its type as well:

decalre module "react-native-dotenv" {
    export const API_KEY: string;
    export const REMOTE_BASE_URL: string;
    export const LOCAL_BASE_URL: string;
    .....
}
Enter fullscreen mode Exit fullscreen mode

In our babel.config.js file, we'll add the following

module.exports = {
    presets: [
    'module:metro-react-native-babel-preset', // present by default
  ],
plugins: ["module:react-native-dotenv", {
    moduleName: "react-native-dotenv",
    allowUndefined: false
}]
}
Enter fullscreen mode Exit fullscreen mode

In our tsconfig.json we'll add:

{
    ...
    "typeRoots": ["./src/types"], 
    ...
}
Enter fullscreen mode Exit fullscreen mode

Then we'll define our variables and values in our ".env" file. Hence, create a ".env" file, this must sit outside your src folder i.e where your package.json file is located. In here define the variables and corresponding values;

    API_KEY = something##anything
    ...
Enter fullscreen mode Exit fullscreen mode

With all these in place, one last step:
I'd create a config folder in my src folder and then add an env.ts file in the config folder. The reason for this is that; react-native has a "DEV" variable that tells if the app is in production or development mode.
Therefore, in our env.ts file, we'd do the following;

import {
    API_KEY,
    REMOTE_BASE_URL,
    LOCAL_BASE_URL
    ...
} from "react-native-dotenv;

const devEnvVariables = {
   API_KEY,
   LOCAL_BASE_URL
}

const prodEnvVariables = {
   API_KEY,
   REMOTE_BASE_URL
}

export interface EnvsInterface {
    API_KEY,
    REMOTE_BASE_URL,
    LOCAL_BASE_URL
}

// If we're in dev use "devEnvVariables" otherwise, use "prodEnvVariables"
export default __DEV__ ? devEnvVariables : prodEnvVariables;
Enter fullscreen mode Exit fullscreen mode

in our code, say loginScreen.tsx, we'll do the following;

import envs, { EnvsInterface } from "./config/envs"; const { BASE_URL, API_KEY } = envs; // as preffered const handleSubmitForm = async () => { await axios.post(${BASE_URL}/login, {...loginData}, {headers... API_KEY) }

Discussion (0)