meteor应用程序如何知道它是否在开发,testing或生产环境中运行?
当meteor应用程序作为开发,testing或生产环境运行时,我需要使用不同的帐户提供者configuration。
自Meteor 1.3开始,这些标志开箱即用:
Meteor.isDevelopment Meteor.isProduction Meteor.isTest Meteor.isAppTest
在服务器上:
var inDevelopment = function () { return process.env.NODE_ENV === "development"; }; var inProduction = function () { return process.env.NODE_ENV === "production"; };
当你运行meteor
时,meteor将环境variablesNODE_ENV设置为“开发”。 在生产中,您可以将variables设置为任何您想要的,否则将默认为“生产”。
更新 :我创build了一个智能包,以允许它在客户端和服务器上工作。
mrt add allow-env
只需在服务器文件中设置权限规则。
allowEnv({ NODE_ENV: 1 });
您可以使用Meteor.settings
和在运行meteor run
或meteor deploy
时使用的--settings
选项。
例如,要在dev
模式下运行,创build一个JSON文件,将其称为meteorConfigDev.json,并将以下内容:
{ "public" : { "mode" : "dev" }, "anotherProperty" : "anotherValue" }
运行你的应用程序
meteor --settings meteorConfigDev.json
在服务器和客户端上,您可以使用以下方式访问“模式”:
Meteor.settings.public.mode //in this case it will be "dev"
请注意,“public”中的设置在服务器和客户端上都可用,而其他所有内容(在本例中为“anotherProperty”)仅在服务器上可用。
然后,您可以为不同的环境使用不同的configuration文件。
好简单。 我正在五个(是的,五个!)不同的环境中运行我的应用程序。 我简单地在ROOT_URL上使用switch语句,如下所示,用于四种不同的环境。 当然,如果你只有两个环境,你可以使用if-else。 在服务器上工作。 只需创build一个名为startup.js的新文件,并使用下面的代码示例。 干杯!
switch (process.env.ROOT_URL) { case "http://www.production.com/": BLOCK OF CODE HERE break; case "http://www.staging.com/": BLOCK OF CODE HERE break; case "http://www.development.com/": BLOCK OF CODE HERE break; case "http://localhost:3000/": BLOCK OF CODE HERE break; }
一般来说,javascript中的switch语句的格式是
switch(expression) { case n: code block break; case n: code block break; default: default code block }
更新:请注意,Meteor现在提供了Meteor.absoluteUrl()
,它与process.env.ROOT_URL
类似,但增加了额外的function。 看文档 。
github上有一个公开的pull请求 ,可以这样做。 评论/投票,所以更有可能被纳入!