UNPKG

kkt

Version:

Create React apps with no build configuration, Cli tool for creating react apps.

238 lines (235 loc) 12.6 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"]; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = start; var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime")); var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _fs = _interopRequireDefault(require("fs")); var _path = _interopRequireDefault(require("path")); var _webpack = _interopRequireDefault(require("webpack")); var _evalSourceMapMiddleware = _interopRequireDefault(require("react-dev-utils/evalSourceMapMiddleware")); var _redirectServedPathMiddleware = _interopRequireDefault(require("react-dev-utils/redirectServedPathMiddleware")); var _clearConsole = _interopRequireDefault(require("react-dev-utils/clearConsole")); var _resolveFallback = _interopRequireDefault(require("@kkt/resolve-fallback")); var _noopServiceWorkerMiddleware = _interopRequireDefault(require("react-dev-utils/noopServiceWorkerMiddleware")); var _conf = require("../utils/conf"); var _path2 = require("../utils/path"); var _paths = require("../overrides/paths"); var _openBrowser = require("../overrides/openBrowser"); var _clearConsole2 = require("../overrides/clearConsole"); var _choosePort = require("../overrides/choosePort"); var _printInstructions = require("../overrides/printInstructions"); var _miniCssExtractPlugin = require("../plugins/miniCssExtractPlugin"); var _cacheData = require("../utils/cacheData"); var _checkRequired = require("../overrides/checkRequired"); var _loadSourceMapWarnning = require("../plugins/loadSourceMapWarnning"); var _staticDoc = require("../plugins/staticDoc"); process.env.NODE_ENV = 'development'; var today = function today() { return new Date().toISOString().split('.')[0].replace('T', ' '); }; function start(_x) { return _start.apply(this, arguments); } function _start() { _start = (0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee(argvs) { var _ref, _ref$isNotCheckHTML, isNotCheckHTML, paths, webpackConfigPath, devServerConfigPath, createWebpackConfig, createDevServerConfig, configOverrides, kktrc, overrideDevServerConfig, shouldUseSourceMap, overridesHandle, webpackConf, overrideOption, overrideWebpackConf, configFactory, config, compiler, message; return (0, _regeneratorRuntime2["default"])().wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: _ref = argvs || {}, _ref$isNotCheckHTML = _ref.isNotCheckHTML, isNotCheckHTML = _ref$isNotCheckHTML === void 0 ? false : _ref$isNotCheckHTML; _context.prev = 1; _context.next = 4; return (0, _paths.overridePaths)(argvs, argvs.overridePaths); case 4: paths = _context.sent; _context.next = 7; return (0, _checkRequired.checkRequiredFiles)(paths, isNotCheckHTML); case 7: webpackConfigPath = "".concat(_path2.reactScripts, "/config/webpack.config").concat(!_path2.isWebpackFactory ? '.dev' : ''); devServerConfigPath = "".concat(_path2.reactScripts, "/config/webpackDevServer.config.js"); createWebpackConfig = require(webpackConfigPath); createDevServerConfig = require(devServerConfigPath); require('react-scripts/config/env'); configOverrides = argvs['config-overrides']; _context.next = 15; return (0, _conf.loaderConfig)(argvs.configName || '.kktrc', { /** * Specify the directory where the configuration is located. */ cwd: configOverrides ? _path["default"].resolve(process.cwd(), argvs['config-overrides']) : undefined, ignoreLog: true }); case 15: kktrc = _context.sent; _context.next = 18; return (0, _clearConsole2.overridesClearConsole)(argvs); case 18: _context.next = 20; return (0, _openBrowser.overridesOpenBrowser)(argvs); case 20: /** Override DevServerConfig */ overrideDevServerConfig = { headers: { 'Access-Control-Allow-Origin': '*' } }; // Source maps are resource heavy and can cause out of memory issue for large source files. shouldUseSourceMap = process.env.GENERATE_SOURCEMAP !== 'false'; overridesHandle = kktrc["default"] || argvs.overridesWebpack; webpackConf = createWebpackConfig('development'); _context.next = 26; return (0, _paths.overridePaths)(undefined, { proxySetup: _path2.proxySetup }); case 26: if (kktrc && kktrc.proxySetup && typeof kktrc.proxySetup === 'function') { (0, _cacheData.cacheData)({ proxySetup: kktrc.proxySetup }); } overrideOption = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, argvs), {}, { devServerConfigHandle: createDevServerConfig, shouldUseSourceMap: shouldUseSourceMap, paths: paths, kktrc: kktrc }); webpackConf = argvs.overridesWebpack ? argvs.overridesWebpack(webpackConf, 'development', overrideOption) : webpackConf; webpackConf = (0, _loadSourceMapWarnning.loadSourceMapWarnning)(webpackConf); webpackConf = (0, _miniCssExtractPlugin.miniCssExtractPlugin)(webpackConf, 'development'); webpackConf = (0, _resolveFallback["default"])(webpackConf); if (!(overridesHandle && typeof overridesHandle === 'function')) { _context.next = 48; break; } if (!kktrc["default"]) { _context.next = 39; break; } _context.next = 36; return overridesHandle(webpackConf, 'development', overrideOption); case 36: _context.t0 = _context.sent; _context.next = 40; break; case 39: _context.t0 = webpackConf; case 40: overrideWebpackConf = _context.t0; if (overrideWebpackConf.proxySetup && typeof overrideWebpackConf.proxySetup === 'function') { (0, _cacheData.cacheData)({ proxySetup: overrideWebpackConf.proxySetup }); delete overrideWebpackConf.proxySetup; } if (!overrideWebpackConf.devServer) { _context.next = 47; break; } _context.next = 45; return (0, _choosePort.overridesChoosePort)(Number(overrideWebpackConf.devServer.port)); case 45: overrideDevServerConfig = Object.assign(overrideDevServerConfig, overrideWebpackConf.devServer); delete overrideWebpackConf.devServer; case 47: // override config in memory require.cache[require.resolve(webpackConfigPath)].exports = function (env) { return overrideWebpackConf; }; case 48: // override config in memory require.cache[require.resolve(devServerConfigPath)].exports = function (proxy, allowedHost) { var serverConf = createDevServerConfig(proxy, allowedHost); /** * [DEP_WEBPACK_DEV_SERVER_ON_AFTER_SETUP_MIDDLEWARE] * DeprecationWarning: 'onAfterSetupMiddleware' option is deprecated. Please use the 'setupMiddlewares' option. * (Use `node --trace-deprecation ...` to show where the warning was created) * [DEP_WEBPACK_DEV_SERVER_ON_BEFORE_SETUP_MIDDLEWARE] * DeprecationWarning: 'onBeforeSetupMiddleware' option is deprecated. Please use the 'setupMiddlewares' option. */ delete serverConf.onAfterSetupMiddleware; delete serverConf.onBeforeSetupMiddleware; if (kktrc && kktrc.devServer && typeof kktrc.devServer === 'function') { return kktrc.devServer((0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, overrideDevServerConfig), serverConf), (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, argvs), {}, { paths: paths })); } else { serverConf = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, serverConf), overrideDevServerConfig); } delete serverConf.onAfterSetupMiddleware; delete serverConf.onBeforeSetupMiddleware; var setupMiddlewares = overrideDevServerConfig.setupMiddlewares; serverConf.setupMiddlewares = function (middlewares, devServer) { // Keep `evalSourceMapMiddleware` // middlewares before `redirectServedPath` otherwise will not have any effect // This lets us fetch source contents from webpack for the error overlay devServer.app && devServer.app.use((0, _evalSourceMapMiddleware["default"])(devServer)); if (_fs["default"].existsSync(paths.proxySetup)) { // This registers user provided middleware for proxy reasons require(paths.proxySetup)(devServer.app); } // Configure the `proxySetup` configuration in `.kktrc`. if (_fs["default"].existsSync(_path2.proxySetup)) { require(_path2.proxySetup)(devServer.app); } // Redirect to `PUBLIC_URL` or `homepage` from `package.json` if url not match devServer.app && devServer.app.use((0, _redirectServedPathMiddleware["default"])(paths.publicUrlOrPath)); // This service worker file is effectively a 'no-op' that will reset any // previous service worker registered for the same host:port combination. // We do this in development to avoid hitting the production cache if // it used the same host and port. // https://github.com/facebook/create-react-app/issues/2272#issuecomment-302832432 devServer.app && devServer.app.use((0, _noopServiceWorkerMiddleware["default"])(paths.publicUrlOrPath)); var mds = setupMiddlewares ? setupMiddlewares(middlewares, devServer) : middlewares; return (0, _staticDoc.staticDocSetupMiddlewares)(mds, devServer, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, argvs), {}, { paths: paths, config: webpackConf })); }; return serverConf; }; // For real-time output of JS, For Chrome Plugin if (argvs['watch']) { configFactory = require("".concat(_path2.reactScripts, "/config/webpack.config")); config = configFactory('development'); compiler = (0, _webpack["default"])(config); compiler.watch((0, _objectSpread2["default"])({}, config.watchOptions), function (err, stats) { if (err) { console.log('❌ KKT:\x1b[31;1mERR\x1b[0m:', err); return; } if (stats && stats.hasErrors()) { (0, _clearConsole["default"])(); console.log("\u274C KKT:\x1B[31;1mERR\x1B[0m: \x1B[35;1m".concat(today(), "\x1B[0m\n"), stats.toString()); return; } (0, _clearConsole["default"])(); console.log("\uD83D\uDE80 started! \x1B[35;1m".concat(today(), "\x1B[0m")); }); } else { (0, _printInstructions.overridesPrintInstructions)((0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, argvs), {}, { paths: paths })); // run original script require("".concat(_path2.reactScripts, "/scripts/start")); } _context.next = 58; break; case 52: _context.prev = 52; _context.t1 = _context["catch"](1); message = _context.t1 && _context.t1 instanceof Error && _context.t1.message ? _context.t1.message : ''; console.log('\x1b[31;1m KKT:START:ERROR: \x1b[0m\n', _context.t1); new Error("KKT:START:ERROR: \n ".concat(message)); process.exit(1); case 58: case "end": return _context.stop(); } }, _callee, null, [[1, 52]]); })); return _start.apply(this, arguments); } module.exports = exports.default;