diff --git a/e2e-test/default/package.json b/e2e-test/default/package.json index af8d063..f62c942 100644 --- a/e2e-test/default/package.json +++ b/e2e-test/default/package.json @@ -3,12 +3,13 @@ "description": "Test default config in karmatic.", "private": true, "scripts": { - "test:debug": "cross-env NODE_PRESERVE_SYMLINKS_MAIN=1 NODE_PRESERVE_SYMLINKS=1 node ./node_modules/karmatic/dist/cli.js debug" + "test:debug": "cross-env NODE_PRESERVE_SYMLINKS_MAIN=1 NODE_PRESERVE_SYMLINKS=1 node ./node_modules/karmatic/dist/cli.js debug --no-webpack", + "test": "node ./node_modules/karmatic/dist/cli.js --no-webpack" }, "dependencies": { "karmatic": "file:../.." }, "devDependencies": { - "cross-env": "^7.0.2" + "cross-env": "^7.0.3" } } diff --git a/e2e-test/rollup-custom/package.json b/e2e-test/rollup-custom/package.json index f3f15cb..a4f00fc 100644 --- a/e2e-test/rollup-custom/package.json +++ b/e2e-test/rollup-custom/package.json @@ -3,7 +3,8 @@ "description": "Test custom rollup config in karmatic", "private": true, "scripts": { - "test:debug": "cross-env NODE_PRESERVE_SYMLINKS_MAIN=1 NODE_PRESERVE_SYMLINKS=1 node ./node_modules/karmatic/dist/cli.js debug" + "test:debug": "cross-env NODE_PRESERVE_SYMLINKS_MAIN=1 NODE_PRESERVE_SYMLINKS=1 node ./node_modules/karmatic/dist/cli.js debug --no-webpack", + "test": "node ./node_modules/karmatic/dist/cli.js --no-webpack" }, "dependencies": { "@babel/core": "^7.10.3", diff --git a/e2e-test/rollup-default/package.json b/e2e-test/rollup-default/package.json index 57767e5..66b0014 100644 --- a/e2e-test/rollup-default/package.json +++ b/e2e-test/rollup-default/package.json @@ -3,7 +3,8 @@ "description": "Test default rollup config in karmatic. Mildly complex src implementation to verify coverage works", "private": true, "scripts": { - "test:debug": "cross-env NODE_PRESERVE_SYMLINKS_MAIN=1 NODE_PRESERVE_SYMLINKS=1 node ./node_modules/karmatic/dist/cli.js debug" + "test:debug": "cross-env NODE_PRESERVE_SYMLINKS_MAIN=1 NODE_PRESERVE_SYMLINKS=1 node ./node_modules/karmatic/dist/cli.js debug --no-webpack", + "test": "node ./node_modules/karmatic/dist/cli.js --no-webpack" }, "dependencies": { "rollup": "^2.3.0", diff --git a/src/cli.js b/src/cli.js index 806939b..5158113 100644 --- a/src/cli.js +++ b/src/cli.js @@ -24,6 +24,7 @@ prog .option('--headless', 'Run using Chrome Headless', true) .option('--coverage', 'Report code coverage of tests', true) .option('--downlevel', 'Downlevel syntax to ES5') + .option('--webpack', 'Force Webpack usage (--no-webpack disables detection)') .option('--chromeDataDir', 'Save Chrome preferences'); prog @@ -52,6 +53,7 @@ function run(str, opts, isWatch) { opts.files = toArray(str || opts.files).concat(opts._); const b = opts.browsers || opts.browser; opts.browsers = b ? toArray(b) : null; + karmatic(opts) .then((output) => { if (output != null) process.stdout.write(output + '\n'); diff --git a/src/configure.js b/src/configure.js index 3f73c42..397cfe5 100644 --- a/src/configure.js +++ b/src/configure.js @@ -12,6 +12,7 @@ import { addRollupConfig } from './rollup'; * @property {Boolean} [headless=false] - Run in Headless Chrome? * @property {Boolean} [watch=false] - Start a continuous test server and retest when files change * @property {Boolean} [coverage=false] - Instrument and collect code coverage statistics + * @property {Boolean} [webpack] - Override webpack detection (true to force, false to disable) * @property {Object} [webpackConfig] - Custom webpack configuration * @property {Object} [rollupConfig] - Custom rollup configuration * @property {string} [pragma] - JSX pragma to compile JSX with @@ -218,7 +219,10 @@ export default async function configure(options) { }, }; - if (shouldUseWebpack(options)) { + if ( + options.webpack === true || + (options.webpack !== false && shouldUseWebpack(options)) + ) { addWebpackConfig(generatedConfig, pkg, options); } else { await addRollupConfig(generatedConfig, pkg, options); diff --git a/src/rollup.js b/src/rollup.js index 8471d27..5957889 100644 --- a/src/rollup.js +++ b/src/rollup.js @@ -1,13 +1,17 @@ import { babelConfig } from './lib/babel'; import { res, fileExists } from './lib/util'; +/** @type {(t: T)=>T extends { default: any } ? T['default'] : T} */ +const getDefault = (mod) => mod.default || mod; + /** * @param {import('./configure').Options} options + * @returns {import('rollup').RollupOptions} */ function getDefaultConfig(options) { - let babel = require('@rollup/plugin-babel').default; - let commonjs = require('@rollup/plugin-commonjs'); - let nodeResolve = require('@rollup/plugin-node-resolve').default; + let babel = getDefault(require('@rollup/plugin-babel')); + let commonjs = getDefault(require('@rollup/plugin-commonjs')); + let nodeResolve = getDefault(require('@rollup/plugin-node-resolve')); return { output: {