我是一名Java脚本全栈开发人员。 在vue js中,我在根目录中创建了两个文件。
在我的main.js
文件中,我可以访问像这样的环境变量
process.env.VUE_APP_MY_VARIABLE_X
vue js的生产和开发有何不同, 如果我使用 npm run serve 项目加载了开发环境变量。如果我使用 npm run build ,它将使用生产环境变量。就这些了。</ p>
但是在我的expressjs
项目中,
"start": "nodemon server.js --exec babel-node -e js",
此命令将始终负责运行项目。我找不到Vue中的两个命令。我看过每个人说的教程都使用名为 dotenv 的软件包。
我不知道这个软件包如何识别生产环境和开发环境。
最后,我想在本地计算机上将数据库密码设置为123456,在服务器中将root设置为root @ 123456。我该如何实现?
答案 0 :(得分:3)
Vue.js根据命令自动处理模式(例如serve
设置NODE_ENV=development
,而build
设置NODE_ENV=production
)。
根据模式的不同,它还会自动从磁盘加载带有变量的文件。
但是,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
文件构建或加载到机器中的app目录中。
注意:
.env
或配置文件提交到存储库中最好的解决方法是使用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
...
答案 1 :(得分:0)
const config = {
"development":{
"host":"localhost",
"dbport":"27017",
"port":"",
"username":"",
"password":"",
"userdb":"",
"passworddb":"123456",
"authSource":"",
"database":"devDB"
},
"staging":{
"host":"",
"dbport":"",
"port":"",
"username":"",
"password":"",
"passworddb":"@123456",
"database":"stageDB",
},
"production":{
"host":"",
"dbport":"",
"port":"",
"userdb":"",
"passworddb":"@123456",
"username":"",
"password":"",
"database":"prodDB",
}
};
module.exports = config;
然后在.env文件中设置一个变量,例如NodeENV = 'prod'
然后将其导入到您的文件中,例如
var config = require('./config')["process.env.NodeENV"];
最后一件事dotenv仅用于将环境变量从.env文件加载到process.env。