我正在玩Figwheel并编写一个简单的单页应用,不需要任何服务器端智能。
原则上,这个应用程序。可以放在任何静态的Web服务器上。
但我该如何实际部署呢?看起来我的Figwheel开发环境中的main.js正在设置图形连接。
我实际需要将哪些js和html文件放在我的静态服务器上? Figwheel是否创建了它们,还是我需要创建一个新的main.js和index.html?我在哪里可以找到例子?
该文档非常适合如何开始使用Figwheel,但令人惊讶的是对完成开发后的操作保持沉默。
答案 0 :(得分:7)
第1步:进行生产构建:
lein do clean, cljsbuild once min
第2步:将resources/public
中的所有内容放在可公开访问的位置。
以下是我在示例项目中使用的脚本: https://github.com/timothypratley/whip/blob/master/deploy.sh
HTML资源在本地开发和部署之间不会更改。唯一不同的是编译的工件。您可以在事实上部署开发编译工件。建议进行“生产构建”的唯一原因是,在本地开发时,中间JS文件不会拼接在一起,因为将更改后的代码加载到浏览器中会更快。对于部署,具有单个编译工件更好。单个编译的JS可以具有高级优化,或者只是简单的优化,具体取决于您在project.clj中配置构建的方式。你真的不需要担心这一点,我只是在解释,因为你具体询问了哪些变化。
HTML页面完全没有变化可能听起来很奇怪,所以让我们再解释一下。 HTML页面包含一个已编译的JS,当你运行figwheel时,如果你打开那个JS,你会看到它依次加载其他JS文件。但是如果您退出figwheel并进行干净的“生产”构建,您将看到所有代码都进入一个JS文件。很狡猾吧?
那个鞭子项目应该提供你正在寻找的例子,如果有任何不清楚的地方,请告诉我。
它使用github页面和部署目标,但是你只需要在某处托管的resources / public目录中的所有内容。因此,您可以使用与任何部署目标非常相似的脚本。
答案 1 :(得分:3)
给蒂莫西·普拉特利提示他的答案。
我在它上面构建了更多细节。见https://github.com/deg/clojure-then-you-think/wiki/Static-website-deploy-to-GitHub
但是,由于Stack Overflow主持人正确地担心场外答案过时,这里是完整副本,截至目前正确:
(给Timothy Pratley提示!这里的想法是基于他的whip project和Stack Overflow answer)。
许多ClojureScript项目不需要显式的服务器支持。他们要么在浏览器中做所有事情,要么为后端使用基于云的现有解决方案。一个例子是我的Trilystro玩具项目,该项目是前端的re-frame浏览器应用,并使用Firebase应用进行持久存储。
对于这种项目,一种非常简单的部署技术是创建GitHub Pages项目页面。成本为零,网站可用性似乎很好(在我非常轻的测试中)。
GitHub的详细说明在该页面上,但步骤非常简单: - 在GitHub上,进入项目设置|选项。 - 打开 GitHub页面(靠近选项页面底部)。 - 将已编译的项目部署到项目的gh-pages分支。 (见下文!) - 您的项目现在可在http://YOUR-GITHUB-ID.github.io/YOUR-GITHUB-REPOSITORY处获得 - (可选)设置自定义域 - 在选项中将新URL添加为自定义域 - 在DNS提供商处,添加指向 YOUR-GITHUB-ID .github.io的CNAME记录。重要提示: not 在此处包含存储库名称。 (CNAME必须指向主机,而不是URL)。 - 在已部署项目的根目录中添加名为CNAME的文件,仅包含URL
我们刷过了上面的一个关键步骤。您必须编译ClojureScript项目并将其放入GitHub存储库的gh-pages分支。
从广义上讲,这非常简单:只需执行lein cljsbuild
并将结果推送到GitHub。一如既往,魔鬼在细节中。根据Timothy Pratley的想法,我创建了两个我在Trilystro中使用的脚本。最新版本在这里:
让我们详细了解它们:(当然,请注意,我将来可能会继续更改这些文件。来源将比下面的副本更准确)
Trilystro仍然在一些地方硬编码到这些脚本中。您需要搜索并替换您自己的项目。
first-deploy.shCNAME
文件```
#!/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.shgit-describe.txt
```
#!/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
```