Если монорепозиторий должен содержать только один языковой проект?

Мне интересно... Должны ли монорепозитории содержать проекты, написанные на одном языке? Я планирую перенести свои интерфейсные и PHP-проекты в монорепозиторий, чтобы обмениваться конфигурациями JSON между ними.

Стоит ли так делать или проекты, написанные на определенном языке, нужно размещать в разных монорепозиториях?


person kodipe    schedule 20.07.2018    source источник
comment
связанные: stackoverflow.com/questions/808052/   -  person ospider    schedule 08.10.2019


Ответы (1)


При использовании монорепозитория

По поводу монорепозитория. Я считаю, что они должны быть ограничены развертываемыми модулями и/или подключенными библиотеками. Конечно, если все проекты в монорепозитории будут развернуты вместе. Конечно, если все они являются расширениями одной библиотеки/фреймворка. В противном случае разбейте их по своему усмотрению.

Совместное использование конфигураций

Что касается совместного использования сведений о конфигурации (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