mirror of
https://github.com/qlik-oss/nebula.js.git
synced 2025-12-19 17:58:43 -05:00
111 lines
3.0 KiB
JavaScript
111 lines
3.0 KiB
JavaScript
/* eslint global-require: 0, no-param-reassign: 0 */
|
|
const fs = require('fs');
|
|
|
|
const defaultFilename = 'nebula.config.js';
|
|
const RX = new RegExp(`${defaultFilename.replace(/\./g, '\\.')}$`);
|
|
|
|
const options = {
|
|
config: {
|
|
type: 'string',
|
|
description: 'Path to a JavaScript config file',
|
|
default: defaultFilename,
|
|
alias: 'c',
|
|
},
|
|
watch: {
|
|
description: 'Rebuild the bundle when its source files change on disk',
|
|
alias: 'w',
|
|
choices: ['umd', 'systemjs', true],
|
|
},
|
|
sourcemap: {
|
|
description: 'Generate source maps',
|
|
type: 'boolean',
|
|
alias: 'm',
|
|
default: true,
|
|
},
|
|
mode: {
|
|
description: 'Explicitly set mode ("development"|"production")',
|
|
type: 'string',
|
|
default: undefined,
|
|
},
|
|
systemjs: {
|
|
description: 'Enable to transpile a systemjs format for release',
|
|
type: 'boolean',
|
|
default: true,
|
|
},
|
|
core: {
|
|
description: 'Set a core build target to compile an ES Module for release',
|
|
type: 'string',
|
|
default: undefined,
|
|
},
|
|
typescript: {
|
|
description: 'Enable typescript parsing',
|
|
type: 'boolean',
|
|
default: false,
|
|
},
|
|
preferBuiltins: {
|
|
description:
|
|
'In Rollup, preferBuiltins is a configuration option that specifies whether to use Node.js built-in modules (such as fs or path) when bundling for Node.js environment.',
|
|
type: 'boolean',
|
|
default: true,
|
|
},
|
|
browser: {
|
|
description:
|
|
'In Rollup, the browser option is a configuration option that specifies whether the bundle is intended to run in a browser environment.',
|
|
type: 'boolean',
|
|
default: true,
|
|
},
|
|
codeSplit: {
|
|
description:
|
|
'Sets output.dir instead of output.file for code-splitting builds. Sets inlineDynamicImports for umd builds to avoid throwing errors.',
|
|
type: 'boolean',
|
|
default: false,
|
|
},
|
|
inlineDynamic: {
|
|
description: 'Sets inlineDynamicImports to true for all builds to help with certain dependencies',
|
|
type: 'boolean',
|
|
default: false,
|
|
},
|
|
};
|
|
|
|
// nebula build --watch - watch umd bundle
|
|
// nebula build --watch umd - watch umd bundle
|
|
// nebula build --watch systemjs - watch systemjs bundle
|
|
// nebula build - watch disabled
|
|
const watchMiddleware = (argv) => {
|
|
let value = false;
|
|
|
|
if (argv.watch === true) {
|
|
value = 'umd';
|
|
} else if (typeof argv.watch === 'string') {
|
|
value = argv.watch;
|
|
}
|
|
|
|
argv.watch = value;
|
|
argv.w = value;
|
|
|
|
return argv;
|
|
};
|
|
|
|
module.exports = (yargs) => {
|
|
yargs.parserConfiguration({
|
|
'dot-notation': false, // To avoid parsing "replacementStrings" with dot-notation into objects
|
|
});
|
|
|
|
return yargs
|
|
.options(options)
|
|
.config('config', (configPath) => {
|
|
if (configPath === null) {
|
|
return {};
|
|
}
|
|
if (!fs.existsSync(configPath)) {
|
|
if (RX.test(configPath)) {
|
|
// do nothing if default filename doesn't exist
|
|
return {};
|
|
}
|
|
throw new Error(`Config ${configPath} not found`);
|
|
}
|
|
return require(configPath).build || {};
|
|
})
|
|
.middleware(watchMiddleware);
|
|
};
|