Скрыть переменные среды в вашем проекте StenCiljs
В предыдущем Статья Я описал, как я реализовал переменные среды в своем Трафарет Проекты или в моих проектах, созданных с помощью Ионический PWA Toolkit Анкет
С момента этой публикации мы начали активно работать над нашим предстоящим редактором для презентаций PWA, DeckDeckgo и как проект открыт и опубликован на GitHub , мы подумали, что, возможно, было бы неплохой идеей не публиковать наши ключи API и Другое Firebase токены онлайн в нашем публичном репо 😉
По этой причине мне пришлось пойти на шаг дальше, чем мой предыдущий пост соответственно, мне пришлось найти и разработать решение, чтобы сэкономить отдельно наши ключи. Поэтому я рад поделиться своим решением с этим новым сообщением в блоге 😃
Примечание
Да, мы знаем, что наши переменные окружающей среды будут содержаться в нашем клиентском пакете и, следовательно, подвергаются воздействию любого с небольшим количеством ретро -инженерии Но мы подумали, что было бы немного чище, чтобы не толкать их в нашем репо.
Начиная
Проекты трафарета опираются на RULLUP Поэтому мы не собираемся заново изобретать колесо, мы просто собираемся использовать плагин Rollup’s Rollup Plagin-Replace который мы устанавливаем, выполняя следующую командную строку:
npm install rollup-plugin-replace --save-dev
Этот плагин позволит нам заменить значения во время пакета.
Настройка сред
После установки плагина мы могли бы редактировать нашу конфигурацию в наших классах начальной загрузки соответственно, мы могли бы редактировать наш app.ts
Файл, чтобы заменить значения, которые мы хотим скрыть. В этом конкретном посте мы собираемся скрыть URL -адрес API. Для этого мы собираемся заменить значения уникальным селектором (который будет автоматически заменен реальными значениями в течение времени объединения, как только мы реализовали все решение):
import {setupConfig} from '../app/services/environment/environment-config'; setupConfig({ url: '<@API_URL@>', production: true });
В моей предыдущей статье мы определили две разные среды, и поэтому я все равно буду предполагать, что наша цель – обрабатывать две среды соответственно Производство
и Развитие
Анкет
То же мы собираемся заменить URL -адрес API с помощью нашего селектора в конфигурации разработки, соответственно, в app-dev.ts
файл:
import {setupConfig} from '../app/services/environment/environment-config'; setupConfig({ url: '<@API_URL@>', production: false });
Обратите внимание, что мы используем <@ а также @> сделать наш селектор действительно уникальным. Эти атрибуты не статичны, если вы предпочитаете использовать других, это абсолютно для вас, без проблем. Затем вы должны просто подумать позже в этом уроке, ваши модификации, когда вы настраиваете плагин.
Определение значений селекторов
Чтобы завершить конфигурацию, теперь мы должны создать «где -то» некоторые файлы, которые будут содержать реальные значения для наших селекторов. Лично я выбрал решение, в котором я обрабатываю значения в json
Файлы, размещенные в корне моего проекта и исключенные из GIT (я добавил их в список git .INGINER
файлы). Поэтому мы могли бы, например, создать новый файл config.prod.json
в корне проекта и отредактируйте его с помощью нашего селектора и реальных значений:
{ "API_URL": "https://api.production.com" }
Конечно, теперь мы также должны создать еще один файл конфигурации config.dev.json
Для селектора и ценностей или нашей среды разработки:
{ "API_URL": "http://localhost:3002" }
Запуск приложения
Теперь, когда наша конфигурация готова, мы должны просто настроить и использовать плагин, который мы установили ранее, чтобы заменить селектор на реальные значения во время пакета. Для этой цели мы собираемся редактировать stencil.config.ts
Как следующее:
import replace from 'rollup-plugin-replace'; // See my previous article for development detection const dev: boolean = process.argv && process.argv.indexOf('--dev') > -1; import devConfig from './config.dev.json'; import prodConfig from './config.prod.json'; const configValues = dev ? devConfig : prodConfig; export const config: Config = { ... plugins: [ replace({ exclude: 'node_modules/**', delimiters: ['<@', '@>'], values: configValues }), ... };
Вуаля, не более, не меньше 🎉 С этого момента каждый раз, когда вы будете в комплекте, значения конфигурации, которые вы сохраняли отдельно, или вы не совершали в своем репо, будут введены во время пакета, легкий Peasy 👻
Вишня на торте 🍒🎂
Как я уже говорил во введении, это решение реализовано в нашем будущем редакторе PWA Presentations DeckDeckgo, и, поскольку этот проект является открытым исходным кодом, вам наиболее приятно взглянуть на решение, которое я реализовал. Вы заметите, что я реализовал тот же код и конфигурацию, что и выше, но вы не найдете ни одного config.prod.json
или config.dev.json
в нашем репо 😉
https://github.com/deckgo/deckdeckgo/tree/master/studio
К бесконечности и за пределами 🚀
Дэйвид
Оригинал: “https://dev.to/daviddalbusco/hide-environment-variables-in-your-stenciljs-project-56ge”