You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ambar2/FrontEnd/config/index.js

133 lines
3.8 KiB
JavaScript

/* eslint key-spacing:0 spaced-comment:0 */
import path from "path";
import _debug from "debug";
import { argv } from "yargs";
import ip from "ip";
const localip = ip.address();
const debug = _debug("app:config");
debug("Creating default configuration.");
// ========================================================
// Default Configuration
// ========================================================
const config = {
env: process.env.NODE_ENV || "production",
// ----------------------------------
// Project Structure
// ----------------------------------
path_base: path.resolve(__dirname, ".."),
dir_client: "src",
dir_dist: "dist",
dir_server: "server",
dir_test: "tests",
// ----------------------------------
// Server Configuration
// ----------------------------------
server_host: process.env.FRONTEND_HOST || localip, // use string 'localhost' to prevent exposure on local network
server_port: process.env.PORT || 3000,
// ----------------------------------
// Compiler Configuration
// ----------------------------------
compiler_css_modules: true,
compiler_devtool: "source-map",
compiler_hash_type: "hash",
compiler_fail_on_warning: false,
compiler_quiet: false,
compiler_public_path: "/",
compiler_stats: {
chunks: false,
chunkModules: false,
colors: true,
},
compiler_vendor: [
"babel-polyfill",
"history",
"react",
"react-redux",
"react-router",
"react-router-redux",
"redux",
],
// ----------------------------------
// Test Configuration
// ----------------------------------
coverage_reporters: [
{ type: "text-summary" },
{ type: "lcov", dir: "coverage" },
],
};
/************************************************
-------------------------------------------------
All Internal Configuration Below
Edit at Your Own Risk
-------------------------------------------------
************************************************/
// ------------------------------------
// Environment
// ------------------------------------
// N.B.: globals added here must _also_ be added to .eslintrc
config.globals = {
"process.env": {
NODE_ENV: JSON.stringify(config.env),
},
NODE_ENV: config.env,
__DEV__: config.env === "development",
__PROD__: config.env === "production",
__TEST__: config.env === "test",
__DEBUG__: config.env === "development" && !argv.no_debug,
__COVERAGE__: !argv.watch && config.env === "test",
__BASENAME__: JSON.stringify(process.env.BASENAME || ""),
};
// ------------------------------------
// Validate Vendor Dependencies
// ------------------------------------
const pkg = require("../package.json");
config.compiler_vendor = config.compiler_vendor.filter((dep) => {
if (pkg.dependencies[dep]) return true;
debug(
`Package "${dep}" was not found as an npm dependency in package.json; ` +
`it won't be included in the webpack vendor bundle.
Consider removing it from vendor_dependencies in ~/config/index.js`
);
});
// ------------------------------------
// Utilities
// ------------------------------------
const resolve = path.resolve;
const base = (...args) =>
Reflect.apply(resolve, null, [config.path_base, ...args]);
config.utils_paths = {
base: base,
client: base.bind(null, config.dir_client),
dist: base.bind(null, config.dir_dist),
};
// ========================================================
// Environment Configuration
// ========================================================
debug(`Looking for environment overrides for NODE_ENV "${config.env}".`);
const environments = require("./environments").default;
const overrides = environments[config.env];
if (overrides) {
debug("Found overrides, applying to default configuration.");
Object.assign(config, overrides(config));
} else {
debug("No environment overrides found, defaults will be used.");
}
export default config;