适用于前后端连载的项目。

这是说的前后端连载指的是:根目录是 node.js 的后端项目,根目录中的 client 文件夹是前端项目。

前端项目 build 完后删除除了 dist/build 目录以外的文件。

在根目录的 server.js 文件添加以下内容。

对于 Vue 项目:

const path = require("path");

if (process.env.NODE_ENV === "production") {
  app.use(express.static("client/dist"));
  app.get("*", (req, res) => {
    res.sendFile(path.resolve(__dirname, "client", "dist", "index.html"));
  });
}

对于 React 项目:

const path = require("path");

if (process.env.NODE_ENV === "production") {
  app.use(express.static("client/dist"));
  app.get("*", (req, res) => {
    res.sendFile(path.resolve(__dirname, "client", "build", "index.html"));
  });
}

对于前后端连载的项目,可以的使用在 heroku 上对前端部分进行 build。首先删除在前端部分的 node_modules,然后在 package.json 文件添加名为 heroku-postbuild 的 script。

"scripts": {
  "start": "node server.js",
  "client-install": "yarn --cwd client install",
  "client": "yarn --cwd client start",
  "server": "nodemon server.js",
  "dev": "concurrently \"yarn server\" \"yarn client\"",
  "heroku-postbuild":" YARN_PRODUCTION=false yarn --cwd client install && yarn --cwd client build"
}

yarn 与 npm 的配置略有不同。

YARN_PRODUCTION=false
NPM_CONFIG_PRODUCTION=false
yarn --cwd client install && yarn --cwd client build
npm install --prefix client && npm run build --prefix client