37

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

4

6 回答 6

62

从 Meteor 1.3 开始,这些标志开箱即用:

Meteor.isDevelopment
Meteor.isProduction
Meteor.isTest
Meteor.isAppTest
于 2016-03-31T17:29:00.700 回答
33

在服务器上:

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

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

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

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

mrt add allow-env

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

allowEnv({
 NODE_ENV: 1
});
于 2014-06-22T20:00:56.557 回答
18

您可以使用Meteor.settings--settings运行时使用的选项meteor runmeteor 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”)仅在服务器上可用。

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

于 2013-12-12T20:36:48.463 回答
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添加了额外的功能。请参阅文档

于 2014-10-10T09:21:49.033 回答
1

github 上有一个开放的pull request允许这样做。评论/投票,所以它更有可能被收录!

于 2012-09-06T04:16:05.437 回答
0

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

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

注意:接口没问题恕我直言,实现很混乱

于 2012-07-26T17:20:45.060 回答