встряхните сборку без создания файла для каждого входного файла

#shake-build-system

#встряхните-build-system

Вопрос:

Создавая .html файлы из .md файлов для веб-сайта, у меня есть некоторые .md файлы, которые не должны выдавать выходные данные .html (например, потому что не готовы к публикации). Каков наилучший способ достичь этого с помощью shake ?

У меня есть want для html-файлов и правило, которое выполняет поиск в соответствующем .md файле, но некоторые из них не выдают .html и shake останавливаются с ошибкой Error, rule finished running but did not produce file: .

Каков наилучший способ справиться с этим случаем?

Ответ №1:

Текущее ограничение заключается в том, что каждый файл должен выдавать результат. Некоторые другие системы сборки немного более небрежны в этом отношении, но мой опыт показывает, что это почти всегда источник ошибок, хотя в некоторых случаях это полезно (например, у вас). Параметры следующие:

  • Если вы можете легко определить, что файл не требует создания выходных данных для него, вы можете сделать это до want , а именно, превратив want в action который вызывает need , но только для подмножества выходных данных.
  • Если обнаружение того, что вам не нужно ничего создавать, обходится дорого, вы можете создать правило, которое всегда создает файл, но иногда создает пустой файл, а затем отдельное правило, которое зависит от этого файла и копирует только те, которые содержат содержимое.

К сожалению, ни одна из этих ситуаций не идеальна. В какой-то момент у Shake была возможность сделать сбой при создании файла допустимым результатом, который можно было бы повторно ввести, если бы был достаточный спрос.

Комментарии:

1. Я ожидал где-нибудь флаг или смягченную команду, позволяющую правилу не создавать файл. Будет ли это сложно добавить? Я думаю, что создавать пустые файлы немного неаккуратно, но это возможно. — Я понимаю, что shake хранит входные данные, и кажется возможным добраться до этого; Я думаю, что видел некоторую документацию, но не могу найти ее снова. Где это?

2. Я перечитал вашу оригинальную академическую статью и теперь понимаю, какие данные вы храните. Я ожидал какого-то общего механизма кэширования, но это должен быть другой пакет.

3. Я думаю, что не требовать создания файла возможно, это просто пример того, как вы предоставляете его как API. Я предлагаю вам создать заявку на github.com/ndmitchell/shake/issues и мы обсудим это там.

4. В настоящее время я перестраиваю код и применяю shake к аналогичному приложению и надеюсь узнать больше о том, как использовать shake . Я начну выпуск, когда получу более четкое представление о том, что необходимо и каковы ограничения.