#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
. Я начну выпуск, когда получу более четкое представление о том, что необходимо и каковы ограничения.