我是一名 Java 脚本全栈开发人员。 在 vue js 中,我在根目录中创建了两个文件。
- 环境发展
- 环境生产
在我的 main.js
文件中,我可以像这样访问环境变量
process.env.VUE_APP_MY_VARIABLE_X
vue js 中的生产和开发有何不同, 如果我使用npm run serve 项目加载开发环境变量。如果我使用 npm run build 它需要生产环境变量。这一切都在 vue 中。
但是在我的expressjs
项目中,
"start": "nodemon server.js --exec babel-node -e js",
此命令将始终负责运行项目。我找不到像在 vue 中那样的两个命令。我浏览了每个人都说使用名为 dotenv 的包的教程。
我不明白这个包如何识别这是生产环境还是开发环境。
一天结束时,我想在我的本地机器上将我的数据库密码设置为 123456,在服务器上设置为 root@123456。我怎样才能做到这一点?
最佳答案
Vue.js 根据命令自动处理模式(例如 serve
设置 NODE_ENV=development
,而 build
设置 NODE_ENV=production
)。
根据模式,它还会自动从磁盘加载带有变量的文件。
Node.JS 中的环境变量
但是,Node.JS 默认情况下不会这样做,您必须设置您的应用程序来处理环境变量。
在 Node.JS 中,您可以通过 shell 命令传递变量,例如:
MY_VARIABLE=x node myapp.js
(通过在命令前加上变量),这会给你 process.env.MY_VARIABLE
在你的里面 myapp.js
应用。
遵循此行为,就使用 NODE_ENV
达成共识用于设置环境模式的变量。
对于生产用途,您将使用 NODE_ENV=production node myapp.js
启动您的应用程序,同时进行开发NODE_ENV=development node myapp.js
.
当然,如果您的机器已经设置了这些环境变量(例如在 .bash_profile
中),则无需在命令前加上它们。
作为一种实践,在开发机器中,您已经在机器上设置了这些变量,而生产机器(例如 docker 容器等)会干净地启动,并在启动应用程序时传递环境变量。 例如,Heroku(和其他部署服务)允许您设置在机器启动时设置的环境变量。
还有将变量存储在文件(例如 .env 或其他文件)中的方法,但您必须在应用程序启动时从磁盘读取这些变量。
这就是 dotenv
的地方(和 config
包)发挥作用。
什么dotenv
是吗,是不是写着.env
文件存储在您的应用程序执行路径(应用程序的根目录)中,并将其中定义的任何变量设置为 process.env
供 Node.JS 使用。
这对于开发机器非常有用,但在生产环境中,建议不要使用在变量中存储敏感信息的文件,而是使用系统环境变量。
对于生产机器,还可以选择构建或加载到机器中 .env
在机器设置时将文件放入应用程序目录。
注意:
- 永不提交
.env
或将密码和敏感信息存储到您的存储库的配置文件 - 永远不要将开发和生产变量存储在同一个文件中
dotenv 方法
最好的方法是使用 dotenv
, 并且有不同的 .env
文件,一个在您的开发机器上,另一个在您的生产机器上。这样,当您的应用程序启动时,它会读取存储在相邻 .env
中的变量。 .这是最安全可靠的方式,因为没有办法将环境变量从机器管理应用程序/界面传递到您的生产机器。
使用 dotenv
设置应用程序的最简单方法将设置您的 start
命令类似:
"start": "nodemon --exec \"node -r dotenv/config\" server.js"
然后在 .env
文件存储在你的本地/开发机器上,你会有类似的东西:
DATABASE_PASSWORD=1235
DATABASE_USERNAME=joe-dev
...
并且在 .env
生产机器(服务器)上的文件:
DATABASE_PASSWORD=root@1235
DATABASE_USERNAME=root
...
关于node.js - node js express项目如何添加环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54141567/