Shake build: что делать, если нужный файл обнаруживается позже

Я использую встряхивание для создания веб-сайта (с pandoc). Когда файлы конвертируются в pandoc, могут понадобиться другие файлы (css, библиография, шаблоны и т.д.), но шейк этого не знает, потому что это внутренняя функция вызова pandoc и информация находится в используемых файлах и только постепенно видимый.

У меня сложилось впечатление от чтения документов, что функция, вызываемая встряхиванием, просит вернуть список используемых файлов и, после функции, вызванной встряхиванием, использовать возвращенный список файлов для вызова need. Правильно ли, что порядок, в котором вызывается need, имеет значение?

Альтернативно,

(1) Я могу создавать функции только для того, чтобы находить нужные другие файлы (выполняя работу почти дважды) и вызывать их в первую очередь. Или,

(2), чтобы разбить процесс на шаги, каждый из которых приводит к файлу, а затем запустить новое правило, чтобы перейти от этого файла (и дополнительных файлов) и добавить туда needs. Второе решение создает промежуточные файлы и прерывает логический процесс преобразования из pandoc в html.

Что лучше?


person user855443    schedule 09.02.2019    source источник


Ответы (1)


Ответ зависит от деталей файлов, от которых зависят (например, css, библиография):

  • Если это исходные файлы, вы можете добавить зависимость после их использования, используя требуется.
  • Если они генерируются самим Shake, вы не можете использовать needed без предварительной проверки их наличия. Если вы можете статически предсказать расширенный набор файлов, с которыми консультируются зависимости, вы можете использовать orderOnly, чтобы убедиться, что все файлы, от которых может зависеть правило, созданы, а затем используйте needed после, чтобы объявить, какие из них действительно необходимы.
  • Наконец, если вы не можете предсказать, какие файлы являются зависимостями, и вы можете их генерировать, то проще всего выполнить часть вычислений дважды.
person Neil Mitchell    schedule 10.02.2019