UNPKG

webpack

Version:

Packs CommonJs/AMD modules for the browser. Allows to split your codebase into multiple bundles, which can be loaded on demand. Support loaders to preprocess files, i.e. json, jsx, es7, css, less, ... and your custom stuff.

73 lines (59 loc) 2.06 kB
/* MIT License http://www.opensource.org/licenses/mit-license.php Authors Simen Brekken @simenbrekken, Einar Löve @einarlove */ "use strict"; /** @typedef {import("./Compiler")} Compiler */ const WebpackError = require("./WebpackError"); const DefinePlugin = require("./DefinePlugin"); const needsEnvVarFix = ["8", "9"].indexOf(process.versions.node.split(".")[0]) >= 0 && process.platform === "win32"; class EnvironmentPlugin { constructor(...keys) { if (keys.length === 1 && Array.isArray(keys[0])) { this.keys = keys[0]; this.defaultValues = {}; } else if (keys.length === 1 && keys[0] && typeof keys[0] === "object") { this.keys = Object.keys(keys[0]); this.defaultValues = keys[0]; } else { this.keys = keys; this.defaultValues = {}; } } /** * @param {Compiler} compiler webpack compiler instance * @returns {void} */ apply(compiler) { const definitions = this.keys.reduce((defs, key) => { // TODO remove once the fix has made its way into Node 8. // Work around https://github.com/nodejs/node/pull/18463, // affecting Node 8 & 9 by performing an OS-level // operation that always succeeds before reading // environment variables: if (needsEnvVarFix) require("os").cpus(); const value = process.env[key] !== undefined ? process.env[key] : this.defaultValues[key]; if (value === undefined) { compiler.hooks.thisCompilation.tap("EnvironmentPlugin", compilation => { const error = new WebpackError( `EnvironmentPlugin - ${key} environment variable is undefined.\n\n` + "You can pass an object with default values to suppress this warning.\n" + "See https://webpack.js.org/plugins/environment-plugin for example." ); error.name = "EnvVariableNotDefinedError"; compilation.warnings.push(error); }); } defs[`process.env.${key}`] = value === undefined ? "undefined" : JSON.stringify(value); return defs; }, {}); new DefinePlugin(definitions).apply(compiler); } } module.exports = EnvironmentPlugin;