UNPKG

@craco/craco

Version:

Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.

210 lines (209 loc) 8.75 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.test = exports.build = exports.start = exports.overrideJestConfigProvider = exports.loadJestConfigProvider = exports.overrideDevServerUtils = exports.loadDevServerUtils = exports.overrideDevServerConfigProvider = exports.loadDevServerConfigProvider = exports.overrideWebpackProdConfig = exports.loadWebpackProdConfig = exports.overrideWebpackDevConfig = exports.loadWebpackDevConfig = exports.overrideCraPaths = exports.getCraPaths = exports.getCraPathsPath = exports.getReactScriptVersion = void 0; var path_1 = __importDefault(require("path")); var semver_1 = __importDefault(require("semver")); var logger_1 = require("./logger"); var paths_1 = require("./paths"); var envLoaded = false; var CRA_LATEST_SUPPORTED_MAJOR_VERSION = '5.0.0'; /************ Common ************/ function resolveConfigFilePath(cracoConfig, fileName) { if (!envLoaded) { // Environment variables must be loaded before the CRA paths, otherwise they will not be applied. require(resolveConfigFilePathInner(cracoConfig, 'env.js')); envLoaded = true; } return resolveConfigFilePathInner(cracoConfig, fileName); } function resolveConfigFilePathInner(cracoConfig, fileName) { var _a; return require.resolve(path_1.default.join((_a = cracoConfig.reactScriptsVersion) !== null && _a !== void 0 ? _a : 'react-scripts', 'config', fileName), { paths: [paths_1.projectRoot] }); } function resolveScriptsFilePath(cracoConfig, fileName) { var _a; return require.resolve(path_1.default.join((_a = cracoConfig.reactScriptsVersion) !== null && _a !== void 0 ? _a : 'react-scripts', 'scripts', fileName), { paths: [paths_1.projectRoot] }); } function resolveReactDevUtilsPath(fileName) { return require.resolve(path_1.default.join('react-dev-utils', fileName), { paths: [paths_1.projectRoot], }); } function overrideModule(modulePath, newModule) { if (!require.cache[modulePath]) { throw new Error("Module not found: ".concat(modulePath)); } require.cache[modulePath].exports = newModule; (0, logger_1.log)("Overrode require cache for module: ".concat(modulePath)); } function resolvePackageJson(cracoConfig) { var _a; return require.resolve(path_1.default.join((_a = cracoConfig.reactScriptsVersion) !== null && _a !== void 0 ? _a : 'react-scripts', 'package.json'), { paths: [paths_1.projectRoot] }); } function getReactScriptVersion(cracoConfig) { var reactScriptPackageJsonPath = resolvePackageJson(cracoConfig); var version = require(reactScriptPackageJsonPath).version; return { version: version, isSupported: semver_1.default.gte(version, CRA_LATEST_SUPPORTED_MAJOR_VERSION), }; } exports.getReactScriptVersion = getReactScriptVersion; /************ Paths ************/ var _resolvedCraPaths = null; function getCraPathsPath(cracoConfig) { return resolveConfigFilePath(cracoConfig, 'paths.js'); } exports.getCraPathsPath = getCraPathsPath; function getCraPaths(cracoConfig) { if (!_resolvedCraPaths) { _resolvedCraPaths = require(getCraPathsPath(cracoConfig)); } return _resolvedCraPaths; } exports.getCraPaths = getCraPaths; function overrideCraPaths(cracoConfig, newConfig) { overrideModule(getCraPathsPath(cracoConfig), newConfig); (0, logger_1.log)('Overrode CRA paths config.'); } exports.overrideCraPaths = overrideCraPaths; /************ Webpack Dev Config ************/ function getWebpackDevConfigPath(cracoConfig) { try { return { filepath: resolveConfigFilePath(cracoConfig, 'webpack.config.js'), isLegacy: false, }; } catch (e) { return { filepath: resolveConfigFilePath(cracoConfig, 'webpack.config.dev.js'), isLegacy: true, }; } } function loadWebpackDevConfig(cracoConfig) { var result = getWebpackDevConfigPath(cracoConfig); (0, logger_1.log)('Found Webpack dev config at: ', result.filepath); if (result.isLegacy) { return require(result.filepath); } return require(result.filepath)('development'); } exports.loadWebpackDevConfig = loadWebpackDevConfig; function overrideWebpackDevConfig(cracoConfig, newConfig) { var result = getWebpackDevConfigPath(cracoConfig); if (result.isLegacy) { overrideModule(result.filepath, newConfig); } else { overrideModule(result.filepath, function () { return newConfig; }); } (0, logger_1.log)('Overrode Webpack dev config.'); } exports.overrideWebpackDevConfig = overrideWebpackDevConfig; /************ Webpack Prod Config ************/ function getWebpackProdConfigPath(cracoConfig) { try { return { filepath: resolveConfigFilePath(cracoConfig, 'webpack.config.js'), isLegacy: false, }; } catch (e) { return { filepath: resolveConfigFilePath(cracoConfig, 'webpack.config.prod.js'), isLegacy: true, }; } } function loadWebpackProdConfig(cracoConfig) { var result = getWebpackProdConfigPath(cracoConfig); (0, logger_1.log)('Found Webpack prod config at: ', result.filepath); if (result.isLegacy) { return require(result.filepath); } return require(result.filepath)('production'); } exports.loadWebpackProdConfig = loadWebpackProdConfig; function overrideWebpackProdConfig(cracoConfig, newConfig) { var result = getWebpackProdConfigPath(cracoConfig); if (result.isLegacy) { overrideModule(result.filepath, newConfig); } else { overrideModule(result.filepath, function () { return newConfig; }); } (0, logger_1.log)('Overrode Webpack prod config.'); } exports.overrideWebpackProdConfig = overrideWebpackProdConfig; /************ Dev Server Config ************/ function getDevServerConfigPath(cracoConfig) { return resolveConfigFilePath(cracoConfig, 'webpackDevServer.config.js'); } function getDevServerUtilsPath() { return resolveReactDevUtilsPath('WebpackDevServerUtils.js'); } function loadDevServerConfigProvider(cracoConfig) { var filepath = getDevServerConfigPath(cracoConfig); (0, logger_1.log)('Found dev server config at: ', filepath); return require(filepath); } exports.loadDevServerConfigProvider = loadDevServerConfigProvider; function overrideDevServerConfigProvider(cracoConfig, configProvider) { var filepath = getDevServerConfigPath(cracoConfig); overrideModule(filepath, configProvider); (0, logger_1.log)('Overrode dev server config provider.'); } exports.overrideDevServerConfigProvider = overrideDevServerConfigProvider; function loadDevServerUtils() { var filepath = getDevServerUtilsPath(); (0, logger_1.log)('Found dev server utils at: ', filepath); return require(filepath); } exports.loadDevServerUtils = loadDevServerUtils; function overrideDevServerUtils(newUtils) { var filepath = getDevServerUtilsPath(); overrideModule(filepath, newUtils); (0, logger_1.log)('Overrode dev server utils.'); } exports.overrideDevServerUtils = overrideDevServerUtils; /************ Jest Config ************/ function getCreateJestConfigPath(cracoConfig) { return resolveScriptsFilePath(cracoConfig, 'utils/createJestConfig.js'); } // https://github.com/facebook/create-react-app/blob/main/packages/react-scripts/scripts/utils/createJestConfig.js function loadJestConfigProvider(cracoConfig) { var filepath = getCreateJestConfigPath(cracoConfig); (0, logger_1.log)('Found jest config at: ', filepath); return require(filepath); } exports.loadJestConfigProvider = loadJestConfigProvider; function overrideJestConfigProvider(cracoConfig, configProvider) { var filepath = getCreateJestConfigPath(cracoConfig); overrideModule(filepath, configProvider); (0, logger_1.log)('Overrode Jest config provider.'); } exports.overrideJestConfigProvider = overrideJestConfigProvider; /************ Scripts *******************/ function start(cracoConfig) { var filepath = resolveScriptsFilePath(cracoConfig, 'start.js'); (0, logger_1.log)('Starting CRA at: ', filepath); require(filepath); } exports.start = start; function build(cracoConfig) { var filepath = resolveScriptsFilePath(cracoConfig, 'build.js'); (0, logger_1.log)('Building CRA at: ', filepath); require(filepath); } exports.build = build; function test(cracoConfig) { var filepath = resolveScriptsFilePath(cracoConfig, 'test.js'); (0, logger_1.log)('Testing CRA at: ', filepath); require(filepath); } exports.test = test;