node.js - Las variables .env de NodeJS (usando dotenv) no se están aplicando al cambiar -- ¿en caché?
Estoy trabajando en un proyecto de KeystoneJS, actualmente ejecutándose en modo de desarrollo en NodeJS 12.14.0. Hace aproximadamente una semana o diez días noté que, aunque cambié algunas variables de entorno en .env, los cambios no se reflejaban en tiempo de ejecución. He tenido que introducir nuevas variables para que los cambios surtan efecto.
He hecho búsquedas (usando WebStorm y VSC) en mi código para la información antigua, pero solo aparece en mis registros de depuración. Es decir, si el valor antiguo de mi variable de entorno ANIMAL era 'rooster' y lo he cambiado a 'lizard', 'rooster' no aparece en ninguna parte de mi código. Y, sin embargo, ANIMAL sigue teniendo el valor rooster en tiempo de ejecución. Así que tengo que introducir una nueva variable, NEW_ANIMAL=lizard, para que cualquier cambio funcione.
Esto no sucede con todas las variables de entorno; por ejemplo, acabo de agregar una nueva, TEST=1, ejecuté la aplicación, la detuve, la cambié a TEST=2, y el cambio funcionó bien. No veo un patrón en qué variables se ven afectadas.
Estoy lanzando el proyecto a través del script de lanzamiento de Keystone, y estoy usando TypeScript. Mi script de lanzamiento es
"dev": "tsc && cross-env NODE_ENV=development DISABLE_LOGGING=true keystone --entry=tsout/index.js dev --port=4545"dotenv se está cargando en la parte superior del punto de entrada del proyecto, /index.ts,
require('dotenv').config();
que se ejecuta cada vez que se reinicia el proyecto (para que conste, estoy usando Babel para poder usar import en lugar de require en todo el proyecto, pero no puedo imaginar que eso importe).
Acabo de pasar media hora con otro desarrollador aquí revisando esto y ninguno de los dos pudo resolverlo (de hecho, estábamos tratando de rastrear un error raro y resultó que era porque, aunque se había cambiado la variable .env, la aplicación todavía estaba leyendo el valor antiguo).
Si alguien alguna vez se ha encontrado con algo así antes, o tiene alguna pista sobre cómo averiguarlo, le estaría muy agradecido.
Incluyo mi package.json a continuación. Estoy usando MacOS 10.14.x y NodeJS 12.14.0, por lo que vale la pena mencionarlo.
{
"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"
}
}
}