Gulp将Node应用程序的dist文件夹部署到Heroku

我对节点,git,github和Heroku来说都是新手,我正在努力找出将我的应用程序发送到Heroku的最佳方式,而不会使用我编译的缩小的应用程序来回放,而且在Heroku中没有太多的工作。

我的node.js项目看起来有点像这样:

- client ... code - server ... code - node_modules - package.json - gulpfile.js - dist - client - server 

除了node_modulesdist之外的所有东西都会进入github。

gulp文件编译,缩小和连接准备发布的所有东西。 如何将dist文件夹推送到Heroku,而不将它放到github中? 什么是最佳做法? 我宁愿不把我的大文件发送给Heroku,因为这意味着移动package.json中的devDependencies并使用post更新脚本,因为它将项目与Heroku联系起来比我想要的更多。

不使用post hook的原因在这两个post里总结得很好: https : //stackoverflow.com/a/15050864/344022&https : //stackoverflow.com/a/21056644/344022 ,不幸的是他们没有提供容易理解的select。

Heroku现在有一个静态的buildpack来处理这个问题(请参阅https://github.com/heroku/heroku-buildpack-static

创build一个static.json文件以使用dist / .html后缀中的文件并将所有调用重新路由回SPA

 { "root": "dist/", "clean_urls": true, "routes": { "/**": "index.html" } } 

例如,扩展package.json脚本以确保构builddist /目录

 "scripts": { ... "heroku-postbuild": "gulp" } 

这样就可以安装package.json的开发依赖

 heroku config:set NPM_CONFIG_PRODUCTION=false --app 

多个构build包,以便您可以构build和部署

 heroku buildpacks:add heroku/nodejs --app <app_name> heroku buildpacks:add https://github.com/heroku/heroku-buildpack-static.git --app <app_name> 

在这种情况下,你的proc文件可以是空的。

继续,在heroku上build立一个贴子,build立你的应用程序,并将文件复制到他们将被提供的位置。 这是相当正常的做法,一旦build立起来,所有你需要做的就是推动部署你的应用程序,这真的很方便。 另一种方法是有一个单独的存储库,您可以手动将文件复制到另一个存储库,但是这对我来说看起来并不那么光滑,通过混淆依赖关系或者忘记删除生成的文件需要时间更长

我有同样的问题推送dist文件夹到heroku应用程序,现在我正在使用一种不同的方法,不确定闲置的,但它适用于我。 我创build了一个部署文件并添加了下面的代码

  import {spawnSync} from 'child_process'; function deploy(){ options = { cwd: path.resolve(__dirname, './dist') }; //push dist folder to deploy repo console.log('Initialising Repository'); spawnSync('git',['init'],options); console.log('Adding remote url'); spawnSync('git',['remote','add', remote.name, remote.gitPath],options) console.log('Add all files'); spawnSync('git',['add','.','--all'],options) console.log(`Commit with v${version}`); spawnSync('git', ['commit','-m',`v${version}`], options) console.log('Push the changes to repo'); spawnSync('git', ['push', '-f', remote.name, 'master'],options) } 

package.json保存了repo iformation,并在这里阅读,我在webpack构build任务之后运行这个。 所以这会把我的新版本推到heroku。 即使dist内的.git被删除,它也会照顾它。