Возможно ли вывести статический файл в bin при сборке с помощью Cabal или Stack?

#haskell #cabal #haskell-stack

#haskell #cabal #haskell-stack

Вопрос:

Я хочу выводить статические HTML-файлы вместе с выводом моей сборки (предоставляя доступ к этим файлам моей программе Haskell).

Вот моя текущая структура проекта:

 MyProject/FrontEnd -- contains static html, js and css files.
MyProject/Backend -- contains the stack Haskell project
  

Я хочу, чтобы при запуске stack build внутри внутреннего каталога он одновременно создавал мой проект на Haskell, а затем копировал внешний каталог и помещал его в выходные данные сборки вместе с моим исполняемым файлом.

Я не очень хорошо знаком с Cabal или Stack, но я просмотрел в основном документацию cabal и увидел, что там был data-dir параметр, который выглядит так, как будто он делает то, что я хочу, но даже при добавлении: data-dir: ..Frontend в мой файл cabal я получаю это предупреждение: data-dir: ..Frontend' is a relative path outside of the source tree. This will not work when generating a tarball with 'sdist'. и файлы отсутствуют в выходных данных.

Я не видел подобного флага в Stack.

Возможно ли делать то, что я хочу? Или мне придется создать свой собственный скрипт, чтобы сделать это за меня (вызвать stack build, а затем вывести файлы вручную)?

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

1. Перемещение вашего файла cabal в MyProject (и корректировка всех ссылок соответствующим образом) приведет MyProject/Frontend к появлению исходного дерева, что позволит избежать проблемы, указанной в этом сообщении об ошибке. (Я успешно использовал data-dir and data-files таким образом для своего проекта.)

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

Ответ №1:

Вы можете использовать file-embed пакет для использования шаблона Haskell для встраивания содержимого файлов или каталогов непосредственно в ваш исполняемый файл. wai-app-static использует это, например, для создания автономного статического файлового сервера по запросу.