Сложные приложения, разработанные с использованием реагирующих, vue, angular или других основанных на javascript инфраструктур, имеют ту же проблему или требование, что и серверные приложения (java, nodejs, python и т. Д.): Как читать конфигурации?
[ 1137] Здесь я перечислю некоторые подходы к работе с конфигурациями для фреймворков javascritpt, от простых до управляемых решений. Некоторые из них используются для серверных приложений.
Поскольку мы говорим об инфраструктурах JavaScript, просто создайте глобальную переменную при запуске вашего приложения, и это будет доступно для всех ваших сценариев:
This is title
Hello world
Конечно, запрограммированный URL в исходном коде не вариант, но следует понимать, что это точка входа в следующие подходы. Почти все они основаны на этом подходе или делают что-то подобное.
Webpack предоставляет нам несколько механизмов, таких как DefinePlugin
new webpack.DefinePlugin({
API_BASE_URL: JSON.stringify(process.env.API_BASE_URL)
})
DefinePlugin является прямым текстом замена . Webpack найдет идентификатор и заменит его на заданную строку. Следующий пример иллюстрирует, как это работает.
Вы можете использовать эту переменную, как если бы она была глобальной переменной:
$.ajax({
type: "GET",
url: API_BASE_URL+'/odds?date=2019-01-19',
dataType: 'json',
success: function (data) {
...
}
});
}
Вот больше механизмов веб-пакета: https://stackoverflow.com/a/40416826/3957754 [ 1143]
Преимущества: - Простой способ установить или определить несколько переменных и использовать их во всем приложении. - Используя CI-сервер, такой как jenkins, вы можете установить все свои конфигурации и построить свой артефакт, а затем развернуть его:
export API_BASE_URL=http://awesome.api.com
export ENDPOINT_DETAIL=/detail
export ENDPOINT_FAVOURITE=/favourite
export MODULES=user,guest,admin,configure
npm run build
Недостатки
Проверьте этот ответ:
Основная идея заключается в том, чтобы поместить все ваши конфигурации, настройки или свойства в один сайт, и все ваши приложения должны получить эти значения в безопасный способ. В настоящее время наиболее распространенным методом получения этой конфигурации из конечного приложения является выполнение http-запроса к API-интерфейсу, опубликованному платформой.
Такие платформы являются идеальными партнерами для микросервисной архитектуры. Также я смог использовать его для микро-интерфейсов.
Вот несколько платформ:
Вы можете использовать одну из этих платформ в сочетании с подходом webpack. Поэтому вместо ручного экспорта переменных среды вы можете использовать остальные API на этапе сборки в веб-пакете или на вашем сервере C.I, например, на jenkins.
Преимущества
Недостатки
Если предположить, что ваша сеть обслуживается по адресу http://myapp.com , вы можете опубликовать другую конечную точку, такую как http : //myapp.com/settings . Эта конечная точка вернет все настройки, требуемые вашим микро-интерфейсом или веб-приложением на СТОРОНА КЛИЕНТА с использованием AJAX .
В вашем приложении javascript, в точке входа (обычно это App.js в реакции, vue и т. Д.), Я имею в виду, что перед механизмами рендеринга вы можете использовать http://myapp.com / settings и выставить как глобальные переменные для вашего приложения. Вы также можете сохранить его в одном из доступных хранилищ, таких как localStorage, sessionStorage и т. Д.
Преимущества
Недостатки
Иногда более длинного xpath нельзя избежать даже при использовании шаблонов вместо для - eaches (как Вы, должен, если Вы можете). Это особенно верно в XSLT/XPath 2.0:
<xsl:attribute name="tablevel"
select="if (following::*[self::topic | self::part])
then (following::*[self::topic | self::part])[1]/@tablevel
else @tablevel"/>
Я склонен не повреждать "простой" путь через строки, но буду повреждать "больший" путь в операторах или условных выражениях.
Для редактирования я использую Кислород (который является межплатформенным), и это обрабатывает этот вид интервала вполне прилично. Иногда это не предсказывает то, что Вы хотите точно, но это поддержит пространство, после того как это там, даже если Вы повторно располагаете свой код с отступом.
По-моему, длинные xpaths трудно считать и должны избежаться. Существует 2 способа сделать это:
Не используйте длинный xpaths. Угробьте для - каждый и используйте шаблоны соответствия. Сломайте xpath в несколько шаблонов. Намного легче считать набор тривиальных шаблонов соответствия, чем один из них.
Я склонен ломать XSL по-другому, если я испытываю затруднения при чтении xpath операторов (который не является очень часто, но это иногда происходит)... это на самом деле довольно подобно моим методам разбивания синтаксиса для других языков... Таким образом, Ваш пример в вопросе мог бы стать чем-то больше как это:
<xsl:for-each select="/some/very[@test = 'whatever']/long">
<xsl:if test="@another-test = perhaps/another/long/xpath[@goes='here']">
<xsl:for-each select="xpath">
... result xml ....
</xsl:for-each>
</xsl:if>
</xsl:for-each>