#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
anddata-files
таким образом для своего проекта.)2. Я хотел избежать этого, но, похоже, это будет мой лучший вариант, спасибо.
Ответ №1:
Вы можете использовать file-embed
пакет для использования шаблона Haskell для встраивания содержимого файлов или каталогов непосредственно в ваш исполняемый файл. wai-app-static
использует это, например, для создания автономного статического файлового сервера по запросу.