Как развернуть одностраничное приложение. записано в ClojureScript / Figwheel на статический сервер?


Я играю с Figwheel и пишу простое одностраничное приложение, которое не требует никакого серверного интеллекта.

В принципе, это приложение. может быть размещен на любом статическом веб-сервере.

Но как мне его развернуть? Он выглядит как главный.js, который находится в моей среде разработки Figwheel, настраивает соединение figwheel.

Какие js и html файлы мне на самом деле нужно поместить на мой статический сервер? Создал ли их Figwheel, или мне нужно создать новый главный.js и индекс.HTML-код? И где я могу найти примеры?

Документация отлично подходит для того, как начать использовать Figwheel, но удивительно сдержанна в том, что делать после завершения разработки.

2 6

2 ответа:

Шаг 1: Сделайте производственную сборку: lein do clean, cljsbuild once min

Шаг 2: Поместите все в resources/public в общедоступное место.

Вот сценарий, который я использую для этого в примере проекта: https://github.com/timothypratley/whip/blob/master/deploy.sh

Ресурсы HTML не меняются между локальной разработкой и развертыванием. Единственное, что отличается-это скомпилированные артефакты. Вы также можете развернуть фактически скомпилированные артефакты разработки. Единственная причина этого рекомендуется делать "производственную сборку", чтобы при локальной разработке промежуточные файлы JS не сшивались вместе, потому что быстрее загружать только измененный код в браузер. Для развертывания лучше иметь один скомпилированный артефакт. Этот единственный скомпилированный JS может иметь расширенные оптимизации или просто простые оптимизации в зависимости от того, как вы настраиваете сборки в своем проекте.клдж. Тебе действительно не нужно беспокоиться об этом, я просто объясняю, потому что ты спросила. конкретно, что меняется.

Может показаться странным, что HTML-страница вообще не меняется, поэтому давайте объясним это немного подробнее. HTML-страница включает в себя скомпилированный JS, когда вы запускаете figwheel, если вы откроете этот JS, вы увидите, что он в свою очередь просто загружает другие файлы JS. Но если вы выйдете из figwheel и сделаете чистую" производственную " сборку, вы увидите, что весь код идет в один js-файл. Довольно хитро, да?

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

Он использует страницы github и цель развертывания, но опять же вам просто нужно все в resources / public directory, размещенном где-то. Таким образом, вы можете использовать очень похожий сценарий с любой целью развертывания.

Наконечник шляпы к Тимофею Pratley для его ответа.

Я построил на нем с большим количеством деталей. См. https://github.com/deg/clojure-then-you-think/wiki/Static-website-deploy-to-GitHub

Но, поскольку модераторы переполнения стека справедливо обеспокоены устареванием ответов за пределами сайта, вот полная копия, правильная на данный момент:


(кончик шляпы Тимоти Пратли! Идеи здесь основаны на его, из его проекта хлыста и переполнения стека ответ ).

Многие проекты ClojureScript не нуждаются в явной поддержке сервера. Либо они делают все в браузере, либо используют существующее облачное решение для своего бэк-энда. Примером может служить мойTrilystro игрушечный проект, который представляет собойre-frame браузерное приложение на интерфейсе и используетFirebase приложение для постоянного хранения.

Для такого рода проектов очень простой метод развертывания заключается в создании страницы проекта GitHub Pages. Стоимость это ноль, и доступность сайта кажется хорошей (в моем очень легком тестировании).

Настройка

Конфигурация GitHub

Подробные инструкции GitHub находятся на этой странице, но шаги действительно удивительно просты: - На GitHub перейдите в Настройки|Параметры ваших проектов. - Включите GitHub Pages (в нижней части страницы опций). - Разверните скомпилированный проект в ветке gh-pages вашего проекта. (смотрите ниже!) - Ваш проект теперь будет доступен по адресу http://YOUR-GITHUB-ID .github.io/YOUR-GitHub-REPOSITORY - При необходимости настройка пользовательского домена - Добавьте ваш новый URL в качестве пользовательского домена в настройках - В вашем DNS-провайдере добавьте запись CNAME, указывающую ваш-GitHub-ID. github.io важно: не следует включать здесь имя репозитория. (CNAME должен указывать на хост, а не на URL). - Добавьте файл с именем CNAME в корень развернутого проекта, содержащий только URL

Клоджюр развертывание

Мы коснулись одной критической ступени выше. Вы должны скомпилировать свой проект ClojureScript и поместить его в ветвь gh-pages вашего репозитория GitHub.

В общих чертах это очень просто: просто сделайте lein cljsbuild и отправьте результаты на GitHub. Как всегда, дьявол кроется в деталях. Основываясь на идеях Тимоти Пратли, я создал два сценария, которые использую в Trilystro. Последние версии находятся здесь:

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

Трилистро все еще жестко закодировано в этих сценариях в нескольких местах. Вам нужно будет найти и заменить для вашего собственного проекта. first-deploy.sh
  • создайте структуру каталогов снаружи местное РЕПО. Именно здесь мы будем хранить нашу рабочую копию развернутого сайта.
  • инициализировать РЕПО git локально
  • добавьте файл CNAME
  • свяжите это РЕПО с веткой gh-pages на GitHub

``

#!/bin/bash

DEPLOYDIR=../trilystro-website
mkdir $DEPLOYDIR
pushd $DEPLOYDIR

git init

cat > CNAME <<EOF
trilystro.vuagain.com
EOF

git add .
git commit -m "Initial deploy to GitHub Pages"
git push --force --quiet "git@github.com:deg/trilystro.git" master:gh-pages

git branch gh-pages
git checkout gh-pages

popd

``

deploy.sh
  • проверьте, что проект полностью зафиксирован. Мы будем отмечать развертывание с помощью A git commit SHA, поэтому мы хотим избежать захвата любых случайных изменений.
  • очистите и постройте проект. Прервать, если возникнут какие-либо ошибки.
  • очистите каталог развертывания, затем восстановите файл CNAME и скопируйте результаты компиляции.
  • также скопируйте информацию о сборке в развертывание, в файл с именем git-describe.txt
  • зафиксируйте новую версию на GitHub с комментарием, описывающим версию

``

#!/bin/bash
# Adapted from https://github.com/timothypratley/whip/blob/master/deploy.sh
# See also https://stackoverflow.com/questions/37667931/how-do-i-deploy-a-single-page-app-written-in-clojurescript-figwheel-to-a-stat
set -e

DEPLOYDIR=../trilystro-website

RED='\033[0;31m'
NOCOLOR='\033[0m'

function die(){
  echo -e ${RED}"$1"${NOCOLOR}
  exit 1
}

if [ -n "$(git status --untracked-files=no --porcelain)" ]; then
  die "Aborting deploy. There are uncommited changes.";
fi


lein clean
lein cljsbuild once min || die "Lein cljsbuild failed!"

GIT_COMMIT=$(git show -s --oneline HEAD)

pushd $DEPLOYDIR
rm -rf *
cp -r ../trilystro/resources/public/* .
cat > CNAME <<EOF
trilystro.vuagain.com
EOF
popd

git describe --always               > $DEPLOYDIR/git-describe.txt
git log -1 --format=%cd --date=iso >> $DEPLOYDIR/git-describe.txt

pushd $DEPLOYDIR
git add .
git commit -m "Deploy $GIT_COMMIT"
git push "git@github.com:deg/trilystro.git" gh-pages:gh-pages

popd

``