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
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;
.....
}
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
}]
}
In our tsconfig.json we'll add:
{
...
"typeRoots": ["./src/types"],
...
}
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
...
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;
in our code, say loginScreen.tsx, we'll do the following;
Top comments (0)