From 40857bdaff7ea648145ff1f1defb4ad8020287de Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 8 Mar 2016 17:33:05 -0500 Subject: [PATCH] Propagate meteorEnv subset of process.env from server to client. Fixes #6399. --- packages/meteor-env-dev/client.js | 1 + packages/meteor-env-dev/env.js | 3 --- packages/meteor-env-dev/package.js | 7 +++++-- packages/meteor-env-dev/server.js | 3 +++ packages/meteor-env-prod/client.js | 1 + packages/meteor-env-prod/env.js | 3 --- packages/meteor-env-prod/package.js | 5 ++++- packages/meteor-env-prod/server.js | 3 +++ packages/meteor/client_environment.js | 2 +- packages/meteor/cordova_environment.js | 2 +- packages/meteor/server_environment.js | 2 +- packages/modules/package.js | 1 + packages/modules/process.js | 5 +---- packages/webapp/webapp_server.js | 3 ++- tools/cli/commands.js | 13 +++++++++++++ tools/runners/run-app.js | 2 -- tools/static-assets/server/boot.js | 8 -------- 17 files changed, 37 insertions(+), 27 deletions(-) create mode 100644 packages/meteor-env-dev/client.js delete mode 100644 packages/meteor-env-dev/env.js create mode 100644 packages/meteor-env-dev/server.js create mode 100644 packages/meteor-env-prod/client.js delete mode 100644 packages/meteor-env-prod/env.js create mode 100644 packages/meteor-env-prod/server.js diff --git a/packages/meteor-env-dev/client.js b/packages/meteor-env-dev/client.js new file mode 100644 index 0000000000..c70b05156a --- /dev/null +++ b/packages/meteor-env-dev/client.js @@ -0,0 +1 @@ +meteorEnv = __meteor_runtime_config__.meteorEnv; diff --git a/packages/meteor-env-dev/env.js b/packages/meteor-env-dev/env.js deleted file mode 100644 index 2486ded682..0000000000 --- a/packages/meteor-env-dev/env.js +++ /dev/null @@ -1,3 +0,0 @@ -meteorEnv = { - NODE_ENV: "development" -}; diff --git a/packages/meteor-env-dev/package.js b/packages/meteor-env-dev/package.js index 5bdcec0f13..c64fe74804 100644 --- a/packages/meteor-env-dev/package.js +++ b/packages/meteor-env-dev/package.js @@ -8,6 +8,9 @@ Package.describe({ Package.onUse(function(api) { api.use('meteor', { unordered: true }); - api.addFiles('env.js'); - api.export("meteorEnv"); + + api.addFiles('client.js', 'client'); + api.addFiles('server.js', 'server'); + + api.export('meteorEnv'); }); diff --git a/packages/meteor-env-dev/server.js b/packages/meteor-env-dev/server.js new file mode 100644 index 0000000000..e178071ab1 --- /dev/null +++ b/packages/meteor-env-dev/server.js @@ -0,0 +1,3 @@ +meteorEnv = { + NODE_ENV: process.env.NODE_ENV || "development" +}; diff --git a/packages/meteor-env-prod/client.js b/packages/meteor-env-prod/client.js new file mode 100644 index 0000000000..c70b05156a --- /dev/null +++ b/packages/meteor-env-prod/client.js @@ -0,0 +1 @@ +meteorEnv = __meteor_runtime_config__.meteorEnv; diff --git a/packages/meteor-env-prod/env.js b/packages/meteor-env-prod/env.js deleted file mode 100644 index 06c3d0a779..0000000000 --- a/packages/meteor-env-prod/env.js +++ /dev/null @@ -1,3 +0,0 @@ -meteorEnv = { - NODE_ENV: "production" -}; diff --git a/packages/meteor-env-prod/package.js b/packages/meteor-env-prod/package.js index 5a01ab2d64..13d4f370e3 100644 --- a/packages/meteor-env-prod/package.js +++ b/packages/meteor-env-prod/package.js @@ -8,6 +8,9 @@ Package.describe({ Package.onUse(function(api) { api.use('meteor', { unordered: true }); - api.addFiles('env.js'); + + api.addFiles('client.js', 'client'); + api.addFiles('server.js', 'server'); + api.export("meteorEnv"); }); diff --git a/packages/meteor-env-prod/server.js b/packages/meteor-env-prod/server.js new file mode 100644 index 0000000000..15e49d147b --- /dev/null +++ b/packages/meteor-env-prod/server.js @@ -0,0 +1,3 @@ +meteorEnv = { + NODE_ENV: process.env.NODE_ENV || "production" +}; diff --git a/packages/meteor/client_environment.js b/packages/meteor/client_environment.js index d38608791a..7e3e9b9dd9 100644 --- a/packages/meteor/client_environment.js +++ b/packages/meteor/client_environment.js @@ -17,7 +17,7 @@ Meteor = { * @static * @type {Boolean} */ - isDevelopment: meteorEnv.NODE_ENV === "development", + isDevelopment: meteorEnv.NODE_ENV !== "production", /** * @summary Boolean variable. True if running in client environment. diff --git a/packages/meteor/cordova_environment.js b/packages/meteor/cordova_environment.js index 1e0d151f02..b0cc65a53a 100644 --- a/packages/meteor/cordova_environment.js +++ b/packages/meteor/cordova_environment.js @@ -7,4 +7,4 @@ Meteor.isCordova = true; Meteor.isProduction = meteorEnv.NODE_ENV === "production"; -Meteor.isDevelopment = meteorEnv.NODE_ENV === "development"; +Meteor.isDevelopment = meteorEnv.NODE_ENV !== "production"; diff --git a/packages/meteor/server_environment.js b/packages/meteor/server_environment.js index f06945fbcb..25d8735103 100644 --- a/packages/meteor/server_environment.js +++ b/packages/meteor/server_environment.js @@ -1,6 +1,6 @@ Meteor = { isProduction: meteorEnv.NODE_ENV === "production", - isDevelopment: meteorEnv.NODE_ENV === "development", + isDevelopment: meteorEnv.NODE_ENV !== "production", isClient: false, isServer: true, isCordova: false diff --git a/packages/modules/package.js b/packages/modules/package.js index 79076762ef..14cb659bd6 100644 --- a/packages/modules/package.js +++ b/packages/modules/package.js @@ -6,6 +6,7 @@ Package.describe({ }); Package.onUse(function(api) { + api.use("underscore"); api.use("modules-runtime"); api.mainModule("client.js", "client"); api.mainModule("server.js", "server"); diff --git a/packages/modules/process.js b/packages/modules/process.js index 098caca2f4..ec28b97b19 100644 --- a/packages/modules/process.js +++ b/packages/modules/process.js @@ -24,7 +24,4 @@ if (typeof process.env !== "object") { process.env = {}; } -Object.keys(meteorEnv).forEach(function (key) { - process.env[key] = meteorEnv[key]; -}); - +_.extend(process.env, meteorEnv); diff --git a/packages/webapp/webapp_server.js b/packages/webapp/webapp_server.js index 95c84c743c..e4db550655 100644 --- a/packages/webapp/webapp_server.js +++ b/packages/webapp/webapp_server.js @@ -281,7 +281,8 @@ WebAppInternals.generateBoilerplateInstance = function (arch, var runtimeConfig = _.extend( _.clone(__meteor_runtime_config__), - additionalOptions.runtimeConfigOverrides || {} + additionalOptions.runtimeConfigOverrides || {}, + { meteorEnv } ); var jsCssUrlRewriteHook = bundledJsCssUrlRewriteHook || function (url) { diff --git a/tools/cli/commands.js b/tools/cli/commands.js index 476bd4873c..d88eaa60f6 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -357,6 +357,19 @@ function doRunCommand(options) { webArchs.push("web.cordova"); } + let nodeEnv = process.env.NODE_ENV; + if (options.production) { + // If options.production, make sure $NODE_ENV === "production". + process.env.NODE_ENV = "production"; + } else if (nodeEnv) { + // If $NODE_ENV is set, override options.production according to that. + options.production = nodeEnv === "production"; + } else { + // Otherwise make sure $NODE_ENV is set according to + // options.production. + process.env.NODE_ENV = "development"; + } + var runAll = require('../runners/run-all.js'); return runAll.run({ projectContext: projectContext, diff --git a/tools/runners/run-app.js b/tools/runners/run-app.js index e1a41ef638..b99957bcdf 100644 --- a/tools/runners/run-app.js +++ b/tools/runners/run-app.js @@ -200,8 +200,6 @@ _.extend(AppProcess.prototype, { } env.APP_ID = self.projectContext.appIdentifier; - // Display errors from (eg) the NPM connect module over the network. - env.NODE_ENV = 'development'; // We run the server behind our own proxy, so we need to increment // the HTTP forwarded count. env.HTTP_FORWARDED_COUNT = diff --git a/tools/static-assets/server/boot.js b/tools/static-assets/server/boot.js index 6b7c31bcd6..e81e480c0d 100644 --- a/tools/static-assets/server/boot.js +++ b/tools/static-assets/server/boot.js @@ -36,14 +36,6 @@ if (!process.env.APP_ID) { process.env.APP_ID = configJson.appId; } -// connect (and some other NPM modules) use $NODE_ENV to make some decisions; -// eg, if $NODE_ENV is not production, they send stack traces on error. connect -// considers 'development' to be the default mode, but that's less safe than -// assuming 'production' to be the default. If you really want development mode, -// set it in your wrapper script (eg, run-app.js). -if (!process.env.NODE_ENV) - process.env.NODE_ENV = 'production'; - // Map from load path to its source map. var parsedSourceMaps = {};