node.js - NodeJS .env-variabler (ved bruk av dotenv) blir ikke oppdatert ved endring - bufret?


Jeg jobber med et KeystoneJS-prosjekt, som for øyeblikket kjører i utviklingsmodus på NodeJS 12.14.0. For omtrent en uke eller ti dager siden la jeg merke til at selv om jeg endret noen miljøvariabler i .env, ble ikke endringene reflektert under kjøring. Jeg har faktisk måttet introdusere nye variabler for at endringene skal tre i kraft.

Jeg har søkt (ved hjelp av WebStorm og VSC) i koden min etter den gamle informasjonen, men den dukker bare opp i debug-loggene mine. Det vil si, hvis den gamle verdien av miljøvariabelen min ANIMAL var 'rooster' og jeg har endret den til 'lizard', vises ikke 'rooster' noe sted i koden min. Og likevel beholder ANIMAL verdien rooster under kjøring. Så jeg må introdusere en ny variabel, NEW_ANIMAL=lizard, for at noen endringer skal fungere.

Dette skjer ikke med alle miljøvariabler -- for eksempel, jeg la nettopp til en ny, TEST=1, kjørte appen, stoppet den, endret den til TEST=2, og endringen fungerte fint. Jeg ser ikke noe mønster i hvilke variabler som blir påvirket.

Jeg lanserer prosjektet gjennom Keystones lanseringsskript, og jeg bruker TypeScript. Mitt lanseringsskript er

"dev": "tsc && cross-env NODE_ENV=development DISABLE_LOGGING=true  keystone --entry=tsout/index.js dev --port=4545"

dotenv lastes inn øverst i inngangspunktet til prosjektet, /index.ts,

require('dotenv').config();

som kjøres hver gang prosjektet startes på nytt (for ordens skyld, jeg bruker Babel for å kunne bruke import i stedet for require gjennom hele prosjektet, men jeg kan ikke se for meg at det har betydning).

Jeg tilbrakte akkurat en halvtime med en annen utvikler her for å gå gjennom dette, og ingen av oss klarte å finne ut av det (egentlig prøvde vi å spore opp en merkelig feil, og det viste seg at det var fordi selv om .env-variabelen hadde blitt endret, leste appen fortsatt den gamle verdien).

Hvis noen noen gang har støtt på noe slikt før - eller har noen spor om hvordan man kan finne det ut - ville jeg vært veldig takknemlig.

Jeg inkluderer min package.json nedenfor. Jeg kjører MacOS 10.14.x og NodeJS 12.14.0, for det det måtte være verdt.

{
  "name": "@keystonejs/example-projects-blank",
  "description": "A blank KeystoneJS starter project.",
  "private": true,
  "version": "5.0.0",
  "author": "The KeystoneJS Development Team",
  "repository": "https://github.com/keystonejs/keystone.git",
  "homepage": "https://github.com/keystonejs/keystone",
  "license": "MIT",
  "engines": {
    "node": ">=10.0.0"
  },
  "scripts": {
    "dev": "tsc && cross-env NODE_ENV=development DISABLE_LOGGING=true  keystone --entry=tsout/index.js dev --port=4545",
    "build": "cross-env NODE_ENV=production keystone build",
    "start": "cross-env NODE_ENV=production keystone start",
    "keystone": "keystone upgrade-relationships --index=tsout/index.js"
  },
  "dependencies": {
    "@apollo/react-hooks": "^3.1.5",
    "@arch-ui/fields": "^3.0.1",
    "@arch-ui/layout": "^0.2.13",
    "@arch-ui/typography": "^0.0.17",
    "@emotion/core": "^10.0.28",
    "@emotion/styled": "^10.0.27",
    "@keystonejs/adapter-mongoose": "^8.1.0",
    "@keystonejs/app-admin-ui": "^6.0.0",
    "@keystonejs/app-graphql": "^5.1.7",
    "@keystonejs/app-next": "^5.1.2",
    "@keystonejs/app-static": "^5.1.2",
    "@keystonejs/auth-password": "^5.1.7",
    "@keystonejs/field-content": "^6.0.0",
    "@keystonejs/fields": "^10.0.0",
    "@keystonejs/fields-markdown": "^5.1.10",
    "@keystonejs/fields-wysiwyg-tinymce": "^5.2.7",
    "@keystonejs/file-adapters": "^6.0.2",
    "@keystonejs/keystone": "^9.0.0",
    "@keystonejs/list-plugins": "^5.1.4",
    "@keystonejs/oembed-adapters": "^5.1.4",
    "@tinymce/tinymce-react": "^3.6.0",
    "@zeit/next-sass": "^1.0.1",
    "apollo-boost": "^0.4.8",
    "apollo-cache-inmemory": "^1.6.6",
    "apollo-client": "^2.6.9",
    "apollo-fetch": "^0.7.0",
    "apollo-link-http": "^1.5.17",
    "apollo-upload-client": "^13.0.0",
    "app-root-path": "^3.0.0",
    "axios": "^0.19.2",
    "connect-mongo": "^3.2.0",
    "cron": "^1.8.2",
    "cross-env": "^7.0.0",
    "date-fns": "^1.30.1",
    "disqus-react": "^1.0.7",
    "dotenv": "^8.2.0",
    "express": "^4.17.1",
    "express-fileupload": "^1.1.6",
    "express-session": "^1.17.1",
    "graphql": "^14.6.0",
    "graphql-tag": "^2.10.3",
    "isomorphic-unfetch": "^3.0.0",
    "jsonwebtoken": "^8.5.1",
    "lodash": "^4.17.15",
    "loglevel": "^1.6.7",
    "moment": "^2.24.0",
    "multer": "^1.4.2",
    "next": "^9.3.6",
    "next-with-apollo": "^5.0.1",
    "node-cron": "^2.0.3",
    "node-fetch": "^2.6.0",
    "node-sass": "^4.14.1",
    "normalize-scss": "^7.0.1",
    "ramda": "^0.27.0",
    "react": "^16.13.1",
    "react-apollo": "^3.1.5",
    "react-dom": "^16.13.1",
    "reading-time": "^1.2.0",
    "require-directory": "^2.1.1",
    "sanitize-html": "^1.23.0",
    "string-strip-html": "^4.4.3",
    "ts-node": "^8.10.1",
    "typescript": "^3.8.3",
    "uuid": "^7.0.2",
    "validator": "^13.0.0",
    "winston": "^3.2.1"
  },
  "devDependencies": {
    "@babel/plugin-proposal-optional-chaining": "^7.9.0",
    "@types/express-fileupload": "^1.1.3",
    "@types/node": "^13.13.5",
    "@types/react": "^16.9.35",
    "@types/winston": "^2.4.4",
    "babel-cli": "^6.26.0",
    "babel-preset-env": "^1.7.0",
    "cz-conventional-changelog": "3.2.0",
    "eslint-plugin-react-hooks": "^4.0.0",
    "pino": "^6.2.1",
    "pino-pretty": "^4.0.0"
  },
  "config": {
    "commitizen": {
      "path": "./node_modules/cz-conventional-changelog"
    }
  }
}

Relaterte artikler