Menu

Environment Variables in Flex Plugins

We recommend that you manage your Flex application by using multiple accounts to represent different environments. For example: development, staging, and production. Each plugin you build can be deployed to your different environments based on your testing strategy. The Plugins CLI makes this easy by managing profiles to store your Twilio account credentials.

Each environment often has different values for certain parameters: the location of an API server, whether a feature is enabled, or the SID of a necessary resource. Environment Variables are an easy way to integrate these into your plugin.

Setting up Environment Variable support

You will need to modify your webpack configuration to enable environment variables. This will allow you to use a standard .env file for managing your variables.

1. Install dotenv

The dotenv-webpack package is our recommendation for managing environment variables with the Plugins CLI. Combined with webpack, which is natively used within the Plugins CLI, this package will allow you to access environment variables from within your plugin code. To install dotenv-webpack, run the following command from within your plugin directory:

npm install dotenv-webpack --save

In addition to installing dotenv-webpack, this will also add the library as a dependency within your plugin's package.json. If you are attempting a global installation or already have this package installed, make sure to update the package.json for each plugin you are updating.

2. Create .env files

Each Twilio account (i.e., each profile in your CLI) will get mapped to a single .env file. Create a new file in the root directory for your plugin and provide a distinctive name: .env.dev,.env.stage, and .env.prod.

An example of a .env file is shown below:

WORKFLOW_SID=WWXXXXXXX

Storing .env files in source code

Never commit your .env files to your source code repository. These files can contain sensitive information, like secrets and API keys, and you do not want to expose these credentials. Include the .env files in your .gitignore or the appropriate tool for your version control.

Without the .env files, the developers on your team will need to know which environment variables are required for your application. Create and commit a .env.sample file in your repository with variable names and placeholder values. This file can be duplicated and updated by your team members when they pull the source code.

3. Update webpack

Webpack must be customized to map your active CLI profile to one of the .env files you created. In the root directory for your plugin, replace webpack.config.js with the following code:

const DotEnvWebpack = require('dotenv-webpack');
module.exports = (config, { isProd, isDev, isTest }) => {
    /**
     * Customize the webpack by modifying the config object.
     * Consult https://webpack.js.org/configuration for more information
     */
    // We dynamically change the path to the .env that contains the file corresponding to our profile
    let envPath;
    switch (process.env.TWILIO_PROFILE) {
        case 'Dev':
            envPath = '.env.dev';
            break;
        case 'Stage':
            envPath = '.env.stage';
            break;
        case 'Production':
            envPath = '.env.prod';
            break;
    }
    // If path was set, use the dotenv-webpack to inject the variables
    if (envPath) {
        config.plugins.push(new DotEnvWebpack({
            path: envPath
        }));
    }
    return config;
}

Customize the switch statement based on the names of your CLI profiles and the filenames for your .env files.

Reading environment variables

All variables that you define in your .env files will be accessible within your plugin via process.env. Use these variables directly within your code:

console.log(process.env.WORKFLOW_SID);

String Replacement

The dotenv-webpack package works by running a string replacement within your plugin code when the plugin is bundled. This has two side effects:

  • Any sensitive values, like an API key, will be visible to any user or system that has access to the bundled code for your plugin
  • The variables will not be dynamic if the bundled plugin (the final .js file) is shared and deployed to multiple accounts directly

In these situations, it is better to use a remotely-accessed environment variable. One option is adding these variables within the attributes field of your Flex Configuration.

Rate this page:

Need some help?

We all do sometimes; code is hard. Get help now from our support team, or lean on the wisdom of the crowd browsing the Twilio tag on Stack Overflow.

Thank you for your feedback!

We are always striving to improve our documentation quality, and your feedback is valuable to us. How could this documentation serve you better?

Sending your feedback...
🎉 Thank you for your feedback!
Something went wrong. Please try again.

Thanks for your feedback!

Refer us and get $10 in 3 simple steps!

Step 1

Get link

Get a free personal referral link here

Step 2

Give $10

Your user signs up and upgrade using link

Step 3

Get $10

1,250 free SMSes
OR 1,000 free voice mins
OR 12,000 chats
OR more