流星应用程序如何知道它是否在开发,测试或生产环境中运行?

时间:2012-06-25 04:08:47

标签: deployment meteor

当meteor应用程序作为开发,测试或生产环境运行时,我需要使用不同的帐户提供程序配置。

6 个答案:

答案 0 :(得分:56)

自Meteor 1.3以来,这些标志开箱即用:

Meteor.isDevelopment
Meteor.isProduction
Meteor.isTest
Meteor.isAppTest

答案 1 :(得分:32)

在服务器上:

var inDevelopment = function () {
  return process.env.NODE_ENV === "development";
};

var inProduction = function () {
  return process.env.NODE_ENV === "production";
};

当您运行meteor时,Meteor将环境变量NODE_ENV设置为“development”。在生产中,您可以将变量设置为您想要的任何值,否则它将默认为“生产”。

更新:我创建了一个智能包,允许它在客户端和服务器上运行。

mrt add allow-env

只需在服务器文件中设置权限规则。

allowEnv({
 NODE_ENV: 1
});

答案 2 :(得分:18)

您可以使用Meteor.settings以及运行--settingsmeteor run时使用的meteor deploy选项。

例如,要在dev模式下运行,请创建一个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”)仅在服务器上可用。

然后,您可以为不同的环境提供不同的配置文件。

答案 3 :(得分:4)

很简单。我在五个(是的,五个!)不同的环境中运行我的应用程序。我只是在ROOT_URL上使用switch语句,如下所示,适用于四种不同的环境。当然,如果您只有两个环境,则可以使用if-else。适用于服务器。只需创建一个名为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,并增加了额外的功能。请参阅docs

答案 4 :(得分:1)

在github上有一个开放的pull request可以允许这样做。评论/投票,因此更有可能被包括在内!

答案 5 :(得分:0)

实现此目的的一种非常混乱的方式

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

注意:界面没问题恕我直言,执行情况很乱