При использовании монорепозитория
По поводу монорепозитория. Я считаю, что они должны быть ограничены развертываемыми модулями и/или подключенными библиотеками. Конечно, если все проекты в монорепозитории будут развернуты вместе. Конечно, если все они являются расширениями одной библиотеки/фреймворка. В противном случае разбейте их по своему усмотрению.
Совместное использование конфигураций
Что касается совместного использования сведений о конфигурации (JSON), я предпочитаю отдельный проект ПРОСТО для сведений о конфигурации (см. @tracker1/config-merge
в npm). В рамках моего конвейера выпуска я буду выводить последние версии в дистрибутив как часть пакета выпуска. Мне становится легче. Другими вариантами могут быть клонирование по запросу или иное включение.
Стоит отметить, что приведенный выше модуль является лишь частью моих проектов конфигурации, я также добавляю шаблоны в свой вывод, а затем использую преобразования как часть выпуска/развертывания.
Несколько языков
Что касается нескольких языков, используйте то, что вам нужно. За исключением сообщества JS, я редко вижу проекты, использующие только один язык/инструмент. Часто даже это make
скрипта, даже тогда обычно есть bash
, cmd.exe
или powershell
как часть конвейера сборки.
В наши дни я часто просто склоняюсь к тому, чтобы скрипты узлов использовались в качестве дополнительных инструментов, независимо от основного языка. Слишком просто npm init
и использовать shelljs
для создания кросс-платформенных скриптов, которые работают везде, где мне это нужно (windows, linux, macos).
Для справки, я использую следующее для вызова внешних процессов из сценариев моего узла...
const exec = (command, args = []) => {
const { status } = cp.spawnSync(command, args, { stdio: 'inherit' });
if (status) {
const cmd = `${command} ${args.map(a => `"${a}"`).join(' ')}`;
console.error(`\n\nSTATUS ${status} on: ${cmd}`);
process.exit(status);
}
};
person
Tracker1
schedule
20.07.2018