Реагирование - скрытие переменных среды в производственном файле - PullRequest
0 голосов
/ 21 октября 2019

У меня есть требование, которое требует, чтобы я скрывал переменные окружения и не фиксировал их в git-хранилище.

Например, в ядре ASP.net мы используем заполнители:

{
   "api-key": [placeholder],
   "another-key": [placeholder]
}

ВРеагируйте на файл .env. Можем ли мы использовать заполнители, аналогичные приведенным выше, и, запустив сценарий cmd или powershell, заполнить их?

Будет ли это работать в Javascript? Я предполагаю, что, поскольку до объединения всего, все ключевые значения должны присутствовать и не заполняться позже.

Таким образом, конечный результат, который я ожидаю в .env, должен выглядеть следующим образом:

REACT_APP_API_KEY = [placeholder]
REACT_APP_ANOTHER_KEY = [placeholder]

Тогдаиспользование сценария cmd или powershell во время связывания для замены этих заполнителей фактическими значениями.

Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

Нашел ответ, это реально выполнимо в зависимости от операционной системы

Следуя этой ссылке инструкции.

Чтобы установить его в Windows (cmd.exe)

set "REACT_APP_NOT_SECRET_CODE=abcdef" && npm start

Чтобы установить его в Windows (Powershell)

($env:REACT_APP_NOT_SECRET_CODE = "abcdef") -and (npm start)

И, наконец, в Linux, macOS (Bash)

REACT_APP_NOT_SECRET_CODE=abcdef npm start

Это то, что я искал.

0 голосов
/ 21 октября 2019

Вы можете сделать это во время процесса сборки ..... предположим, что вы создаете сборку с помощью веб-пакета. Мы можем использовать «dotenv» для переменных окружения.

внутри вашего «webpack.config.js ....» *

const webpack = require('webpack');
const dotenv = require('dotenv');

module.exports = () => {
    // call dotenv and it will return an Object with a parsed key 
    const env = dotenv.config().parsed;

    // reduce it to a nice object, the same as before
    const envKeys = Object.keys(env).reduce((prev, next) => {
        // replacing placeholder will be done here....
        if (env[next] === 'placeholder') {            
            prev[`process.env.${next}`] = JSON.stringify("test");
        }
        else {
            prev[`process.env.${next}`] = JSON.stringify(env[next]);
        }
        return prev;
    }, {});

    return {
        plugins: [
            new webpack.DefinePlugin(envKeys)
        ]
    };
}
...