В моем приложении sveltekit я продолжаю делать это в своих файлах +server.js
на протяжении всех своих маршрутов:
import config from '$lib/server/config.js';
где экспортированный объект конфигурации содержит сведения о подключении к базе данных и т. д. (некоторые из которых, в свою очередь, поступают из переменных среды), и эта информация адаптирована к среде, в которой я работаю (dev, prod и т. д.).
У меня есть два вопроса по этому поводу. Во-первых, есть ли каноническое место для размещения такого config.js
файла, кроме того, куда я его помещаю?
Во-вторых, есть ли способ загрузить этот объект конфигурации глобально, чтобы мне не нужно было повторно загружать его в каждый +server.js
файл, которому нужна эта информация? Я мог бы поместить все это в переменные среды (через .env
, например), но тогда я теряю некоторые удобства моего config.js
.
Спасибо @Tholle. На данный момент конфигурация содержит только учетные данные базы данных и сведения о подключении, чтобы данные можно было обслуживать через мои конечные точки API. Конфиденциальные учетные данные загружаются из переменных среды в моем config.js. Может быть, лучше всего использовать переменные среды, полностью пропустив config.js, как это рекомендуется в Приложение «Двенадцать факторов»?
Да, я согласен с вами, что все конфиденциальные данные должны поступать из среды, чтобы вы не контролировали их версии и т. д. Если вы просто экспортируете переменные среды из файла конфигурации более эргономичным способом, вы все равно следуете приложению «Двенадцать факторов». руководящие принципы, так как вы ничего жестко не кодируете в конфигурации, поэтому оба подхода работают.
Судя по комментариям, $lib/server
— хорошее место для файлов конфигурации. Что касается глобальных переменных конфигурации, кажется, что переменные среды — это то, что нужно, и их можно установить через dotconfig — убедившись, что ваша конфиденциальная информация не проверяется в вашем репо, где это применимо (хотя я привык создания шаблона под названием .env.ex
, чтобы напоминать себе или другим, какие переменные он должен содержать).
Наличие конфиденциальной конфигурации в
lib/server
— хорошая идея, так как SvelteKit выдаст ошибку, если вы попытаетесь использовать ее в файле, который попадает в браузер. Что вы делаете с конфигурацией в ваших файлах? Возможно, вы могли бы вместо этого создать серверный хук, если он хорошо подходит для вашего варианта использования.