UNPKG

@gdjiami/cli

Version:

CLI for build front end project.

94 lines (93 loc) 3.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); /** * 初始化环境变量 */ var fs_extra_1 = tslib_1.__importDefault(require("fs-extra")); var path_1 = tslib_1.__importDefault(require("path")); var paths_1 = tslib_1.__importDefault(require("./paths")); var chalk_1 = tslib_1.__importDefault(require("chalk")); var dotenv_1 = tslib_1.__importDefault(require("dotenv")); var options_1 = tslib_1.__importDefault(require("./options")); // 确保后续require paths, 可以读取到.env加载的环境变量 delete require.cache[require.resolve('./paths')]; var NODE_ENV = process.env.NODE_ENV; if (!NODE_ENV) { console.error("The " + chalk_1.default.blue('NODE_ENV') + " environment variable is required."); process.exit(); } // .env 文件, 优先加载.env.*.local, 再加载.env.*, 最后是.env, .env.local var dotenvsFiles = [ paths_1.default.appDotenv + "." + NODE_ENV + ".local", paths_1.default.appDotenv + ".local", paths_1.default.appDotenv + "." + NODE_ENV, "" + paths_1.default.appDotenv, ]; dotenvsFiles.forEach(function (dotenvFile) { if (fs_extra_1.default.existsSync(dotenvFile)) { // 支持使用${}引用已定义的变量 require('dotenv-expand')(dotenv_1.default.config({ path: dotenvFile, })); } }); var ENV_FILTER = /^JM_/i; var BUILIN_ENVS = [ // common 'VERSION', 'SOURCE_MAP', 'NAME', 'PUBLIC_URL', 'DISABLE_DLL', 'DIST', // development 'PORT', 'HOST', 'ADDRESS', 'HTTPS', 'PROTOCOL', 'EVAL', // other 'CI', 'ELECTRON', ]; var env; function getClientEnvironment(publicUrl) { if (env) { return env; } var pkg = require(paths_1.default.appPackageJson); var options = options_1.default(pkg); var raw = Object.keys(process.env) .filter(function (key) { return ENV_FILTER.test(key) || BUILIN_ENVS.indexOf(key) !== -1; }) .reduce(function (env, key) { env[key] = process.env[key]; return env; }, { VERSION: pkg.version, NAME: pkg.name, PUBLIC_URL: NODE_ENV === 'production' ? publicUrl || process.env.PUBLIC_URL || './' : '/', ELECTRON: !options.electron ? 'true' : '', DIST: path_1.default.basename(paths_1.default.appDist), // NODE_ENV 可能会被篡改,所以固定住 NODE_ENV: NODE_ENV, }); // for DefinePlugin var stringified = Object.keys(raw).reduce(function (env, key) { env["process.env." + key] = JSON.stringify(raw[key]); return env; }, {}); var userDefine = Object.keys(raw) .filter(function (key) { return ENV_FILTER.test(key); }) .reduce(function (prev, cur) { prev[cur] = raw[cur]; return prev; }, {}); return (env = { userDefine: userDefine, raw: raw, stringified: stringified, }); } exports.default = getClientEnvironment;