Google App Engine: изменение среды запуска в облаке - PullRequest
1 голос
/ 28 апреля 2019

Я пытаюсь развернуть приложение Next.js, которое использует собственный сервер Node.js.

Я хочу добавить пользовательские переменные сборки в приложение:

next.config.js

const NODE_ENV = process.env.NODE_ENV;
const envType = NODE_ENV === `production` ? `production` : `staging`;

const envPath = `./config/${envType}`;
const { env } = require(envPath);

module.exports = {
  env: { ...env },
};

Приведенный выше файл запускается во время сборки (yarn build),

Проблема в том, что Google App Engine использует Cloud Build за кулисами.Там NODE_ENV всегда установлен на development.Как я могу переопределить NODE_ENV там;т.е. как я могу настроить Cloud Build, используемый для Google App Engine gcloud app deploy?

Я не могу просто использовать Docker из-за этой проблемы .

package.json

{
  "name": "blah",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "dev": "NODE_ENV=staging node server.js",
    "build": "rm -rf node_modules/ && yarn && rm -rf .next/ && next build",
    "start": "node server.js",
    "lint": "eslint . --ext .js",
    "gcp-build": "yarn build"
  },
  "dependencies": {
    "body-parser": "^1.18.3",
    "dotenv": "^7.0.0",
    "dotenv-webpack": "^1.7.0",
    "express": "^4.16.4",
    "express-session": "^1.16.1",
    "firebase": "^5.10.0",
    "firebase-admin": "^7.3.0",
    "isomorphic-unfetch": "^3.0.0",
    "lodash": "^4.17.11",
    "next": "^8.1.0",
    "now": "^15.0.6",
    "react": "^16.8.6",
    "react-dom": "^16.8.6",
    "session-file-store": "^1.2.0",
    "styled-components": "^4.2.0",
    "yenv": "^2.1.0"
  },
  "devDependencies": {
    "babel-eslint": "^10.0.1",
    "eslint": "^5.16.0",
    "eslint-config-airbnb": "^17.1.0",
    "eslint-plugin-import": "^2.17.2",
    "eslint-plugin-jsx-a11y": "^6.2.1",
    "eslint-plugin-react": "^7.12.4"
  },
  "engines": {
    "node": "10.x.x"
  }
}

app.yaml

runtime: nodejs10

image

Ниже представлен результат передачи переменной DOGE_ENV из app.yaml.Как видите, это undefined.Однако NODE_ENV - это development.

То есть добавление следующего к app.yaml не работает.

env_variables:
  DOGE_ENV: production

enter image description here

1 Ответ

0 голосов
/ 30 апреля 2019

Не используйте NODE_ENV, создайте собственную переменную окружения и используйте это:

app.yaml

env_variables:
  ST_ENV: Production

next.config.js

const environment = process.env.ST_ENV;
const envType = environment === `production` ? `production` : `staging`;

const envPath = `./config/${envType}`;
const { env } = require(envPath);

module.exports = {
  env: { ...env },
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...