我有一个在前端使用带有Aurelia的Node.js的应用程序,我想在Heroku上部署它。
要在本地运行应用程序,我需要执行以下命令:
1. npm start
2. cd public > gulp watch
安装heroku-cli
后,尝试使用git push heroku master
发布。
问题是,当Heroku在云上部署应用时,它只运行npm start
。所以它能够启动服务器。
但是,它对cd public
和gulp watch
一无所知。
我的问题是,一旦启动服务器,我如何告诉Heroku将目录更改为public
并执行gulp watch
命令?
答案 0 :(得分:1)
我忘记了重要的一点。由于你在你的问题中只提到了Aurelia,我(错误地)认为你所拥有的只是。
最终,对于制作应用,您希望拥有一个托管Aurelia应用的合适网络服务器。
示例:
对于我已构建的Aurelia应用程序,我通常会运行3个不同的进程,每个进程都有自己的端口(或主机名):
第三个是将我的Aurelia应用程序作为静态包托管。
这里没有任何相关的东西。服务器甚至没有安装npm,就像任何其他服务器端应用程序一样。这正是我如何部署它的原因;不需要与节点相关的命令。
如果您使用nodejs作为服务器端内容,请使用http-server
来提供静态包。
当您在自己的服务器端应用程序中托管aurelia应用程序时,您可以获得额外的好处,即能够直接发送一些引导配置以及捆绑包,因此您不必对网址进行硬编码等。< / p>
我暗示的内容&#34;不要在heroku上托管静态网站&#34;:捆绑它,让你的网络应用程序托管它。我的原始答案仅适用于没有涉及服务器端的内容。
一般不建议在heroku上托管静态网站,请参阅this blog post。底线是Aurelia网站是静态的,静态网站不需要app服务器。它不必要地昂贵,并且没有大多数CDN那样好的分发。
话虽如此,如果你坚持在Heroku上托管一个静态的Aurelia网站,那么你最好的办法是将你所有的脚本调用合并到一个调用中,正如你所说,已经运行了。因此,请将npm start
脚本调用gulp watch
。
您可能希望npm install
您的依赖项并致电../node_modules/.bin/gulp watch
而不是全局调用gulp。
然而,当谈到Heroku时,gulp watch
本身可能不会起作用,因为这将启动一个在Heroku中没有端口绑定的开发服务器。它将会运行,但它无法从外部访问。
gulp watch
不是你想要在服务器上运行的东西,因为它会监视文件更改(从那里不会发生)并运行像browserync这样没用的东西。只需捆绑您的应用并开始正常http-server
或更好,然后将准备开始的套装上传到正确的文件夹中即可完成。
答案 1 :(得分:0)
您想要构建您的应用程序,然后像部署一个完全编译的静态应用程序一样进行部署。使用Aurelia CLI,它将为au build --env prod
,然后将脚本文件夹,index.html和所有依赖项(如CSS,字体等)复制到单独的文件夹中。 gulp build
的工作方式相同。
从那里,您将如以下medium.com文章中所示将已编译的应用程序发布到Heroku:
下面是文章的主要部分,但这里有一个要点-您正在“诱骗” heroku认为它是一个PHP应用程序。严重!
Head to root directory of the repo that contains index.html which dictates the main HTML page. Run touch composer.json to create a file called composer.json. Add the following line: {} inside. Run touch index.php to create a file called index.php. Add the line: <?php include_once("index.html"); ?> inside. Now update the repo on Github if it’s connected to your account or Heroku command git push heroku master . Wait for the automatic deploy to work its magic and tada!
还有一些其他步骤可将已编译的应用程序制作为存储库(即git init),但这应该对您有用。对我有用。