node-hot-loader
Version:
Hot module replacement for Node.js applications
100 lines (99 loc) • 3.7 kB
JavaScript
;
var _path = _interopRequireDefault(require("path"));
var _fs = _interopRequireDefault(require("fs"));
var _yargs = _interopRequireDefault(require("yargs"));
var _loader = require("./loader");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const options = {
config: 'webpack.config.js',
fork: undefined,
args: undefined,
autoRestart: undefined,
inMemory: undefined,
babel: true,
logLevel: undefined
};
const params = _yargs.default.config(options).usage('Usage: $0 [args]').help('help').alias('help', 'h').alias('help', '?').version("1.22.0").alias('version', 'v').options({
config: {
type: 'string',
describe: 'Path to the webpack config file',
defaultDescription: 'webpack.config.js',
requiresArg: false,
coerce: value => {
if (!_path.default.isAbsolute(value)) {
return _path.default.join(process.cwd(), value);
}
return value;
}
},
fork: {
type: 'string',
describe: 'Launch compiled assets in forked process with optional node exec arguments.',
defaultDescription: 'false',
requiresArg: false,
coerce: value => {
if (value === undefined) return false;
if (value.length === 0) return true;
return value.split(',');
}
},
args: {
type: 'string',
describe: 'List of arguments for forked process.',
requiresArg: false,
coerce: value => {
if (value === undefined) return undefined;
if (value.length === 0) return [];
return value.split(',');
}
},
autoRestart: {
type: 'boolean',
describe: 'Auto restart forked process if unaccepted modules discovered.',
defaultDescription: 'false',
requiresArg: false
},
inMemory: {
type: 'boolean',
describe: 'Launch compiled assets in memory fs. Not worked with forked process.',
defaultDescription: 'true',
requiresArg: false
},
babel: {
type: 'boolean',
describe: 'Use "@babel/register".',
defaultDescription: 'true',
requiresArg: false,
coerce: value => {
if (value === '') return true;
if (value === 'true') return true;
if (value === 'false') return false;
return value;
}
},
logLevel: {
type: 'string',
describe: 'Log level related to webpack stats configuration presets names. See presets from https://webpack.js.org/configuration/stats/#stats.',
requiresArg: false,
coerce: value => {
if (value === '') return true;
if (value === 'true') return true;
if (value === 'false') return false;
return value;
}
}
}).example('node-hot --config webpack.config.js', 'Using a specific webpack config file.').example('node-hot', 'Using default webpack config file.').example('node-hot --logLevel minimal', 'Set a specific logLevel for node-hot-loader.').example('node-hot --fork', 'Launch compiled assets in forked process.').example('node-hot --fork=--arg1,--arg2', 'Launch compiled assets in forked process with passing node exec arguments.').example('node-hot --args=--arg1,--arg2', 'Pass arguments to forked process. Available in process.argv.').showHelpOnFail(false, 'Use the --help option to get the list of available options.').check(args => {
if (!_fs.default.existsSync(args.config)) {
throw new Error(`Webpack config file '${args.config}' not found!`);
}
return true;
}).strict().argv;
options.config = params.config;
options.fork = params.fork;
options.args = params.args;
options.autoRestart = params.autoRestart && options.fork;
options.inMemory = params.inMemory && !options.fork;
options.babel = params.babel;
options.logLevel = params.logLevel;
(0, _loader.loadWebpack)(options);