kkt
Version:
Create React apps with no build configuration, Cli tool for creating react apps.
238 lines (235 loc) • 12.6 kB
JavaScript
;
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;