Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js env变量(使用dotenv)未提交更改--是否缓存?_Node.js_Typescript_Environment Variables_Keystonejs_Dotenv - Fatal编程技术网

Node.js env变量(使用dotenv)未提交更改--是否缓存?

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在

我正在从事一个KeystoneJS项目,目前在NodeJS 12.14.0上以开发模式运行。大约一周或十天前,我注意到,尽管我在
.env
中更改了一些环境变量,但这些更改并没有在运行时反映出来。实际上,我必须引入新的变量,以使更改生效

我已经在代码中搜索(使用WebStorm和VSC)旧信息,但它只出现在调试日志中。也就是说,如果我的env var
ANIMAL
的旧值是'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本身缓存了什么?