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 runmeteor 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请求 ,可以这样做。 评论/投票,所以更有可能被纳入!

一个非常混乱的方式来完成这一点

https://github.com/possibilities/meteor-environment-hooks

注意:接口是可以的恕我直言,执行是凌乱的