Node.js env变量(使用dotenv)未提交更改--是否缓存?
我正在从事一个KeystoneJS项目,目前在NodeJS 12.14.0上以开发模式运行。大约一周或十天前,我注意到,尽管我在Node.js env变量(使用dotenv)未提交更改--是否缓存?,node.js,typescript,environment-variables,keystonejs,dotenv,Node.js,Typescript,Environment Variables,Keystonejs,Dotenv,我正在从事一个KeystoneJS项目,目前在NodeJS 12.14.0上以开发模式运行。大约一周或十天前,我注意到,尽管我在.env中更改了一些环境变量,但这些更改并没有在运行时反映出来。实际上,我必须引入新的变量,以使更改生效 我已经在代码中搜索(使用WebStorm和VSC)旧信息,但它只出现在调试日志中。也就是说,如果我的env varANIMAL的旧值是'rooster',并且我已经将其更改为'lizard',那么我的代码中的任何地方都不会出现“rooster”。然而,ANIMAL在
.env
中更改了一些环境变量,但这些更改并没有在运行时反映出来。实际上,我必须引入新的变量,以使更改生效
我已经在代码中搜索(使用WebStorm和VSC)旧信息,但它只出现在调试日志中。也就是说,如果我的env varANIMAL
的旧值是'rooster',并且我已经将其更改为'lizard',那么我的代码中的任何地方都不会出现“rooster”。然而,ANIMAL
在运行时仍然具有值rooster
。因此,我必须引入一个新变量,new_ANIMAL=lizard
,以使任何更改生效
并非所有env变量都会出现这种情况——例如,我刚刚添加了一个新变量,TEST=1
,运行应用程序,停止,将其更改为TEST=2
,更改工作正常。我看不出什么样的变量会受到影响
我通过Keystone的启动脚本启动该项目,并使用TypeScript。我的启动脚本是
“dev”:“tsc&&cross-env NODE\u env=development DISABLE\u LOGGING=true keystone--entry=tsout/index.js dev--port=4545”
dotenv
正在加载到项目入口点的顶部,/index.ts
require('dotenv').config();
每次项目重新启动时都会运行它(作为记录,我使用Babel能够在整个项目中使用import
,而不是require
,但我无法想象这有什么关系)
我刚刚花了半个小时和另一个开发人员一起讨论这个问题,我们两人都没有弄明白(实际上我们试图追踪一个奇怪的bug,结果是因为即使.env
变量已更改,应用程序仍在读取旧值)
如果有人以前遇到过类似的事情——或者有任何线索可以找到——我将非常感激
我在下面包括了我的包.json
。我正在运行MacOS 10.14.x和NodeJS 12.14.0,这是值得的
{
"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"
}
}
}
dotenv
不监视.env
文件中的更改,只有在调用config()
或在使用preload
时启动应用程序时,才会解析该文件。那么,如果您更改了.env
,如何重新加载配置?您使用什么应用程序编辑.env
文件?有时候,WebStorm的智能保存(或者不管它实际上叫什么)功能在您运行时不会将更改写入磁盘expect@Cerulean是的,我一辈子都记不起它叫什么了。我现在正在翻阅我的设置,看看我是否能找到它,因为我记得我曾在上面绊倒过once@Cerulean我不完全确定这是否是我记得在过去看到的,但这可能与您的同步(首选项->外观和行为->系统设置)设置有关(更多详细信息和)对我来说,这听起来像是一个棘手的问题。不知道在哪里,或者做什么。因为新的值确实出现了,所以它向我表明文件保存正确,所以系统的某些部分必须记住旧的状态。可能是cross env,或者keystone本身缓存了一些东西?dotenv
不监视.env
文件中的更改,只有在调用config()
时才会解析该文件,或者在使用preload
时才会启动应用程序。那么,如果您更改了.env
,如何重新加载配置?您使用什么应用程序编辑.env
文件?有时候,WebStorm的智能保存(或者不管它实际上叫什么)功能在您运行时不会将更改写入磁盘expect@Cerulean是的,我一辈子都记不起它叫什么了。我现在正在翻阅我的设置,看看我是否能找到它,因为我记得我曾在上面绊倒过once@Cerulean我不完全确定这是否是我记得在过去看到的,但这可能与您的同步(首选项->外观和行为->系统设置)设置有关(更多详细信息和)对我来说,这听起来像是一个棘手的问题。不知道在哪里,或者做什么。因为新的值确实出现了,所以它向我表明文件保存正确,所以系统的某些部分必须记住旧的状态。也许是cross env,或者keystone本身缓存了什么?