@gdjiami/cli
Version:
CLI for build front end project.
94 lines (93 loc) • 3.08 kB
JavaScript
;
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;