2

我花了几个小时试图弄清楚这一点,欢迎提出任何建议。这里的目标是组装一个构建后脚本,该脚本将在运行反应客户端的 nodeJS 应用程序上运行。

React 在 3000 后,节点在 5000。所以它需要并发库。以下是两次尝试do-postbuildheroku-postbuild(均失败)。

  "scripts": {

    "server": "nodemon server.js --ignore client",
    "client": "npm start --prefix ../client",
    "dev": "concurrently \"npm run server\" \"npm run client\" ",
    "do-postbuild": "NPM_CONFIG_PRODUCTION=false npm install --prefix && npm run build --prefix client",
    "heroku-postbuild": "cd ../client && npm install && npm install --only=dev --no-shrinkwrap && npm run build" 
  },

文件夹结构

client
server
   |_package.json (above)
   |_server.js

npm run dev - 完美

当我尝试npm run heroku-postbuild 它产生以下结果:

npm ERR! errno 1
npm ERR! ver1.02@1.0.0 heroku-postbuild: `cd client && npm install && npm install --only=dev --no-shrinkwrap && npm run build`
npm ERR! Exit status 1

尝试写入时会引发错误,例如在服务器文件夹npm run do-postbuild中搜索客户端

npm ERR! errno -2
npm ERR! enoent ENOENT: no such file or directory, open '/Users/sites/server/client/package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent 
4

3 回答 3

3

这不是 HEROKU 解决方案,它适用于具有 root 访问权限的通用 UBUNTU 服务器。

这里的解决方案是您不必将应用程序作为捆绑包(客户端和服务器一起)进行 dockerize。

对我有用的是将客户端和服务器视为两个不同的应用程序。

客户端:

  • npm run build本地来自与您的 package.json 文件相同的文件夹
  • 然后build folder使用 HTML CSS Javascript 将应用程序发布为非常直接的客户端应用程序

服务器端:

  • 上传server文件(不包括 node_modules 文件夹)
  • 运行npm i(从带有 package.json 文件的文件夹)
  • 我设置了反向代理以将端口映射到服务器上的特定位置,以便反应到达它
  • 设置 cron 作业以启动服务器端(并定期检查以确保它正在运行)

就是这样-完美运行。

于 2020-03-02T11:12:23.883 回答
0

在你的脚本中添加这个

 "client-install": "npm install --prefix client",
于 2021-05-11T19:25:19.300 回答
0

请添加以下脚本并尝试,它将 100% 工作。

 "scripts": { 

 "client-install": "npm install --prefix client",
      "start": "node server.js",
      "server": "nodemon server.js",
      "client": "npm start --prefix client",
      "dev": "concurrently \"npm run server\" \"npm run client\"",
      "heroku-postbuild": "NPM_CONFIG_PRODUCTION=false npm install --prefix client && npm run build --prefix client"
    } 
于 2021-05-11T19:39:44.200 回答