Node.js 将节点应用程序的deploy dist文件夹打包到Heroku

Node.js 将节点应用程序的deploy dist文件夹打包到Heroku,node.js,git,heroku,github,gulp,Node.js,Git,Heroku,Github,Gulp,我对node、git、github和Heroku相当陌生,我正在努力找出将我的应用程序发送到Heroku的最佳方式,而不让我编译的小型应用程序扰乱回购,也不让Heroku做太多事情 我的node.js项目看起来有点像这样: - client ... code - server ... code - node_modules - package.json - gulpfile.js - dist - client - server 除了node\u模块和dis

我对node、git、github和Heroku相当陌生,我正在努力找出将我的应用程序发送到Heroku的最佳方式,而不让我编译的小型应用程序扰乱回购,也不让Heroku做太多事情

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

- client
     ... code
- server
     ... code
- node_modules
- package.json
- gulpfile.js
- dist
    - client
    - server
除了
node\u模块
dist
之外的所有内容都进入github

gulpfile编译、缩小并连接准备在
dist
中发布的所有内容。 如何只将
dist
文件夹推送到Heroku,而不将其放入github?什么是最佳实践?我不想把我的gulpfile发送给Heroku,因为这意味着在package.json中移动devdependences并使用更新后脚本,因为它将项目与Heroku绑定的程度超出了我的想象


这两篇文章很好地总结了不使用post钩子的原因:&不幸的是,它们没有提供一个易于理解的替代方案。

继续,在heroku上设置一个post钩子,它可以构建你的应用程序并将文件复制到服务的地方。这是一种相当正常的做法,一旦设置好了,你所需要做的就是用git推送来部署你的应用程序,这真的很方便。另一种选择是拥有一个单独的存储库,您可以手动将文件复制到该存储库并从中推送出去,但这对我来说并不容易,更大的可能性是由于混淆了依赖项而导致人为错误,或者忘记删除不再需要的生成文件等等。

Heroku现在有一个静态内置开发包来处理此问题(请参阅)

创建一个static.json文件以使用dist/with.html后缀中的文件,并将所有调用重新路由回SPA 例如,扩展package.json脚本以确保构建dist/目录 以便安装package.json中的开发依赖项 多个构建包,因此您可以构建和部署
heroku构建包:添加heroku/nodejs--app
heroku构建包:添加https://github.com/heroku/heroku-buildpack-static.git --应用程序

在这种情况下,您的procfile可能是空的。

我也遇到过同样的问题,只将dist文件夹推送到heroku应用程序,现在我正在使用不同的方法,不确定空闲的方法,但它对我有效。我创建了一个部署文件并添加了以下代码

  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构建任务后运行这个。所以这会把我的新版本推给heroku。即使删除了.git inside dist,它也会处理它。

在依赖项管理或清理方面没有人为错误,因为gulpfile为我做了这件事。这两篇文章很好地总结了不使用post钩子的原因:&不幸的是,它们没有提供一个易于理解的替代方案。也许你应该编写一个gulp任务来完成部署。您可以像往常一样构建应用程序,然后在完成后执行与第二个链接中的脚本类似的操作。
"scripts": {
  ...
  "heroku-postbuild": "gulp"
}
heroku config:set NPM_CONFIG_PRODUCTION=false --app
heroku buildpacks:add heroku/nodejs --app <app_name>
heroku buildpacks:add https://github.com/heroku/heroku-buildpack-static.git --app <app_name>
  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)
 }