From 607e10554a8438aa2551827769014882e37fe85f Mon Sep 17 00:00:00 2001 From: Blaine Bublitz Date: Wed, 13 Mar 2019 13:10:34 -0700 Subject: [PATCH 1/4] New: Support `flags.require` config option (closes #108, closes #167) --- README.md | 1 + lib/shared/config/env-flags.js | 4 + test/config-flags-require.js | 93 +++++++++++++++++++ .../config/flags/require/array/.gulp.json | 8 ++ .../config/flags/require/array/gulpfile.js | 9 ++ .../config/flags/require/array/preload_one.js | 1 + .../config/flags/require/array/preload_two.js | 1 + .../flags/require/join-flags/.gulp.json | 7 ++ .../flags/require/join-flags/gulpfile.js | 9 ++ .../flags/require/join-flags/preload_one.js | 1 + .../flags/require/join-flags/preload_two.js | 1 + .../config/flags/require/string/.gulp.json | 5 + .../config/flags/require/string/gulpfile.js | 8 ++ .../config/flags/require/string/preload.js | 1 + 14 files changed, 149 insertions(+) create mode 100644 test/config-flags-require.js create mode 100644 test/fixtures/config/flags/require/array/.gulp.json create mode 100644 test/fixtures/config/flags/require/array/gulpfile.js create mode 100644 test/fixtures/config/flags/require/array/preload_one.js create mode 100644 test/fixtures/config/flags/require/array/preload_two.js create mode 100644 test/fixtures/config/flags/require/join-flags/.gulp.json create mode 100644 test/fixtures/config/flags/require/join-flags/gulpfile.js create mode 100644 test/fixtures/config/flags/require/join-flags/preload_one.js create mode 100644 test/fixtures/config/flags/require/join-flags/preload_two.js create mode 100644 test/fixtures/config/flags/require/string/.gulp.json create mode 100644 test/fixtures/config/flags/require/string/gulpfile.js create mode 100644 test/fixtures/config/flags/require/string/preload.js diff --git a/README.md b/README.md index 0cda70b4..8de4d5e0 100644 --- a/README.md +++ b/README.md @@ -108,6 +108,7 @@ Supported configurations properties: | flags.gulpfile | Set a default gulpfile | | flags.silent | Silence logging by default | | flags.series | Run tasks given on the CLI in series (the default is parallel) | +| flags.require | An array of modules to require before running the gulpfile. | ## Flags diff --git a/lib/shared/config/env-flags.js b/lib/shared/config/env-flags.js index 8af665e2..84fd5bf5 100644 --- a/lib/shared/config/env-flags.js +++ b/lib/shared/config/env-flags.js @@ -6,6 +6,7 @@ var copyProps = require('copy-props'); var toFrom = { configPath: 'flags.gulpfile', configBase: 'flags.gulpfile', + require: 'flags.require', }; function mergeConfigToEnvFlags(env, config) { @@ -16,6 +17,9 @@ function convert(configInfo, envInfo) { if (envInfo.keyChain === 'configBase') { return path.dirname(configInfo.value); } + if (envInfo.keyChain === 'require') { + return [].concat(envInfo.value, configInfo.value); + } return configInfo.value; } diff --git a/test/config-flags-require.js b/test/config-flags-require.js new file mode 100644 index 00000000..88111239 --- /dev/null +++ b/test/config-flags-require.js @@ -0,0 +1,93 @@ +'use strict'; + +var expect = require('expect'); + +var path = require('path'); +var fixturesDir = path.join(__dirname, 'fixtures/config'); + +var headLines = require('gulp-test-tools').headLines; +var eraseTime = require('gulp-test-tools').eraseTime; +var runner = require('gulp-test-tools').gulpRunner().basedir(fixturesDir); + +describe('config: flags.require', function() { + + it('Should configure with an array in a .gulp.* file', function(done) { + runner + .chdir('flags/require/array') + .gulp() + .run(cb); + + function cb(err, stdout, stderr) { + expect(err).toEqual(null); + expect(stderr).toEqual(''); + + var requiring1 = eraseTime(headLines(stdout, 1)); + expect(requiring1).toEqual('Requiring external module ./preload_one'); + var requiring2 = eraseTime(headLines(stdout, 1, 1)); + expect(requiring2).toEqual('Requiring external module ./preload_two'); + var preload1 = eraseTime(headLines(stdout, 1, 4)); + expect(preload1).toEqual('preload one!'); + var preload2 = eraseTime(headLines(stdout, 1, 5)); + expect(preload2).toEqual('preload two!'); + done(err); + } + }); + + it('Should configure with a string in a .gulp.* file', function(done) { + runner + .chdir('flags/require/string') + .gulp() + .run(cb); + + function cb(err, stdout, stderr) { + expect(err).toEqual(null); + expect(stderr).toEqual(''); + var requiring = eraseTime(headLines(stdout, 1)); + expect(requiring).toEqual('Requiring external module ./preload'); + var preload1 = eraseTime(headLines(stdout, 1, 3)); + expect(preload1).toEqual('hello preload!'); + done(err); + } + }); + + it('Combines --require flag with .gulp.* file flags.require', function(done) { + runner + .chdir('flags/require/join-flags') + .gulp('--require ./preload_one') + .run(cb); + + function cb(err, stdout, stderr) { + expect(err).toEqual(null); + expect(stderr).toEqual(''); + + var requiring1 = eraseTime(headLines(stdout, 1)); + expect(requiring1).toEqual('Requiring external module ./preload_one'); + var requiring2 = eraseTime(headLines(stdout, 1, 1)); + expect(requiring2).toEqual('Requiring external module ./preload_two'); + var preload1 = eraseTime(headLines(stdout, 1, 4)); + expect(preload1).toEqual('preload one!'); + var preload2 = eraseTime(headLines(stdout, 1, 5)); + expect(preload2).toEqual('preload two!'); + done(err); + } + }); + + it.skip('missing test for cwd', function(done) { + runner + .gulp('--cwd flags --gulpfile flags/require/array/gulpfile.js') + .run(cb); + + function cb(err, stdout, stderr) { + expect(err).toEqual(null); + expect(stderr).toEqual(''); + expect(eraseTime(stdout)).toEqual( + 'Requiring external module ./preload_one\n' + + 'Requiring external module ./preload_two\n' + + 'preload one!\n' + + 'preload two!\n' + + ''); + done(err); + } + }); +}); + diff --git a/test/fixtures/config/flags/require/array/.gulp.json b/test/fixtures/config/flags/require/array/.gulp.json new file mode 100644 index 00000000..42aaa0da --- /dev/null +++ b/test/fixtures/config/flags/require/array/.gulp.json @@ -0,0 +1,8 @@ +{ + "flags": { + "require": [ + "./preload_one", + "./preload_two" + ] + } +} diff --git a/test/fixtures/config/flags/require/array/gulpfile.js b/test/fixtures/config/flags/require/array/gulpfile.js new file mode 100644 index 00000000..496e068c --- /dev/null +++ b/test/fixtures/config/flags/require/array/gulpfile.js @@ -0,0 +1,9 @@ +'use strict'; + +var gulp = require('gulp'); + +gulp.task('default', function(done) { + console.log(global.preload_one); + console.log(global.preload_two); + done(); +}); diff --git a/test/fixtures/config/flags/require/array/preload_one.js b/test/fixtures/config/flags/require/array/preload_one.js new file mode 100644 index 00000000..f9a04a11 --- /dev/null +++ b/test/fixtures/config/flags/require/array/preload_one.js @@ -0,0 +1 @@ +global.preload_one = 'preload one!'; diff --git a/test/fixtures/config/flags/require/array/preload_two.js b/test/fixtures/config/flags/require/array/preload_two.js new file mode 100644 index 00000000..e9014b3e --- /dev/null +++ b/test/fixtures/config/flags/require/array/preload_two.js @@ -0,0 +1 @@ +global.preload_two = 'preload two!'; diff --git a/test/fixtures/config/flags/require/join-flags/.gulp.json b/test/fixtures/config/flags/require/join-flags/.gulp.json new file mode 100644 index 00000000..61f4f87a --- /dev/null +++ b/test/fixtures/config/flags/require/join-flags/.gulp.json @@ -0,0 +1,7 @@ +{ + "flags": { + "require": [ + "./preload_two" + ] + } +} diff --git a/test/fixtures/config/flags/require/join-flags/gulpfile.js b/test/fixtures/config/flags/require/join-flags/gulpfile.js new file mode 100644 index 00000000..496e068c --- /dev/null +++ b/test/fixtures/config/flags/require/join-flags/gulpfile.js @@ -0,0 +1,9 @@ +'use strict'; + +var gulp = require('gulp'); + +gulp.task('default', function(done) { + console.log(global.preload_one); + console.log(global.preload_two); + done(); +}); diff --git a/test/fixtures/config/flags/require/join-flags/preload_one.js b/test/fixtures/config/flags/require/join-flags/preload_one.js new file mode 100644 index 00000000..f9a04a11 --- /dev/null +++ b/test/fixtures/config/flags/require/join-flags/preload_one.js @@ -0,0 +1 @@ +global.preload_one = 'preload one!'; diff --git a/test/fixtures/config/flags/require/join-flags/preload_two.js b/test/fixtures/config/flags/require/join-flags/preload_two.js new file mode 100644 index 00000000..e9014b3e --- /dev/null +++ b/test/fixtures/config/flags/require/join-flags/preload_two.js @@ -0,0 +1 @@ +global.preload_two = 'preload two!'; diff --git a/test/fixtures/config/flags/require/string/.gulp.json b/test/fixtures/config/flags/require/string/.gulp.json new file mode 100644 index 00000000..3fbb4b37 --- /dev/null +++ b/test/fixtures/config/flags/require/string/.gulp.json @@ -0,0 +1,5 @@ +{ + "flags": { + "require": "./preload" + } +} diff --git a/test/fixtures/config/flags/require/string/gulpfile.js b/test/fixtures/config/flags/require/string/gulpfile.js new file mode 100644 index 00000000..91fc5801 --- /dev/null +++ b/test/fixtures/config/flags/require/string/gulpfile.js @@ -0,0 +1,8 @@ +'use strict'; + +var gulp = require('gulp'); + +gulp.task('default', function(done) { + console.log(global.preload); + done(); +}); diff --git a/test/fixtures/config/flags/require/string/preload.js b/test/fixtures/config/flags/require/string/preload.js new file mode 100644 index 00000000..3b5d0c74 --- /dev/null +++ b/test/fixtures/config/flags/require/string/preload.js @@ -0,0 +1 @@ +global.preload = 'hello preload!'; From 42b9d8bf8f81bdc1fb4f37e53705e8fc5e56fcab Mon Sep 17 00:00:00 2001 From: Blaine Bublitz Date: Mon, 18 Mar 2019 20:04:49 -0700 Subject: [PATCH 2/4] Update docs to reflect require against cwd --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8de4d5e0..ad759e66 100644 --- a/README.md +++ b/README.md @@ -108,7 +108,7 @@ Supported configurations properties: | flags.gulpfile | Set a default gulpfile | | flags.silent | Silence logging by default | | flags.series | Run tasks given on the CLI in series (the default is parallel) | -| flags.require | An array of modules to require before running the gulpfile. | +| flags.require | An array of modules to require before running the gulpfile. Any relative paths will be resolved against the `--cwd` directory (if you don't want that behavior, use absolute paths) | ## Flags @@ -148,7 +148,7 @@ __Some flags only work with gulp 4 and will be ignored when invoked against gulp --cwd [path] - Manually set the CWD. The search for the gulpfile, as well as the relativity of all requires will be from here. + Manually set the CWD. The search for the gulpfile, as well as the relativity of all requires (including the `--require` flag) will be from here. --verify [path (optional)] From 554c6e1ec71d1bccb2f42d809f62eb35ce3ba622 Mon Sep 17 00:00:00 2001 From: Blaine Bublitz Date: Mon, 18 Mar 2019 20:22:57 -0700 Subject: [PATCH 3/4] Add tests for absolute and relative flags.require --- test/config-flags-require.js | 32 ++++++++++++++----- test/fixtures/config/flags/require/preload.js | 1 + .../flags/require/with-absolute/.gulp.js | 7 ++++ .../flags/require/with-absolute/gulpfile.js | 8 +++++ .../config/flags/require/with-cwd/.gulp.json | 5 +++ .../config/flags/require/with-cwd/gulpfile.js | 8 +++++ 6 files changed, 53 insertions(+), 8 deletions(-) create mode 100644 test/fixtures/config/flags/require/preload.js create mode 100644 test/fixtures/config/flags/require/with-absolute/.gulp.js create mode 100644 test/fixtures/config/flags/require/with-absolute/gulpfile.js create mode 100644 test/fixtures/config/flags/require/with-cwd/.gulp.json create mode 100644 test/fixtures/config/flags/require/with-cwd/gulpfile.js diff --git a/test/config-flags-require.js b/test/config-flags-require.js index 88111239..6db4de52 100644 --- a/test/config-flags-require.js +++ b/test/config-flags-require.js @@ -72,20 +72,36 @@ describe('config: flags.require', function() { } }); - it.skip('missing test for cwd', function(done) { + it('resolves relative requires against cwd', function(done) { runner - .gulp('--cwd flags --gulpfile flags/require/array/gulpfile.js') + .gulp('--cwd flags/require/with-cwd') .run(cb); function cb(err, stdout, stderr) { expect(err).toEqual(null); expect(stderr).toEqual(''); - expect(eraseTime(stdout)).toEqual( - 'Requiring external module ./preload_one\n' + - 'Requiring external module ./preload_two\n' + - 'preload one!\n' + - 'preload two!\n' + - ''); + var requiring = eraseTime(headLines(stdout, 1)); + expect(requiring).toEqual('Requiring external module ../preload'); + var preload1 = eraseTime(headLines(stdout, 1, 4)); + expect(preload1).toEqual('hello preload!'); + done(err); + } + }); + + it('works with absolute paths, ignoring cwd', function(done) { + runner + .gulp('--cwd flags/require/with-absolute') + .run(cb); + + function cb(err, stdout, stderr) { + expect(err).toEqual(null); + expect(stderr).toEqual(''); + + var absolute = path.join(__dirname, './fixtures/config/flags/require/preload'); + var requiring = eraseTime(headLines(stdout, 1)); + expect(requiring).toEqual('Requiring external module ' + absolute); + var preload1 = eraseTime(headLines(stdout, 1, 4)); + expect(preload1).toEqual('hello preload!'); done(err); } }); diff --git a/test/fixtures/config/flags/require/preload.js b/test/fixtures/config/flags/require/preload.js new file mode 100644 index 00000000..3b5d0c74 --- /dev/null +++ b/test/fixtures/config/flags/require/preload.js @@ -0,0 +1 @@ +global.preload = 'hello preload!'; diff --git a/test/fixtures/config/flags/require/with-absolute/.gulp.js b/test/fixtures/config/flags/require/with-absolute/.gulp.js new file mode 100644 index 00000000..007b399b --- /dev/null +++ b/test/fixtures/config/flags/require/with-absolute/.gulp.js @@ -0,0 +1,7 @@ +var path = require('path'); + +module.exports = { + flags: { + require: path.join(__dirname, '../preload'), + }, +}; diff --git a/test/fixtures/config/flags/require/with-absolute/gulpfile.js b/test/fixtures/config/flags/require/with-absolute/gulpfile.js new file mode 100644 index 00000000..91fc5801 --- /dev/null +++ b/test/fixtures/config/flags/require/with-absolute/gulpfile.js @@ -0,0 +1,8 @@ +'use strict'; + +var gulp = require('gulp'); + +gulp.task('default', function(done) { + console.log(global.preload); + done(); +}); diff --git a/test/fixtures/config/flags/require/with-cwd/.gulp.json b/test/fixtures/config/flags/require/with-cwd/.gulp.json new file mode 100644 index 00000000..743fb112 --- /dev/null +++ b/test/fixtures/config/flags/require/with-cwd/.gulp.json @@ -0,0 +1,5 @@ +{ + "flags": { + "require": "../preload" + } +} diff --git a/test/fixtures/config/flags/require/with-cwd/gulpfile.js b/test/fixtures/config/flags/require/with-cwd/gulpfile.js new file mode 100644 index 00000000..91fc5801 --- /dev/null +++ b/test/fixtures/config/flags/require/with-cwd/gulpfile.js @@ -0,0 +1,8 @@ +'use strict'; + +var gulp = require('gulp'); + +gulp.task('default', function(done) { + console.log(global.preload); + done(); +}); From 860822dce30638d40a0a6f2435e030c92eb0c2b0 Mon Sep 17 00:00:00 2001 From: Blaine Bublitz Date: Mon, 18 Mar 2019 20:37:05 -0700 Subject: [PATCH 4/4] Add test for --require twice --- test/fixtures/test-module-2.js | 4 ++++ test/flags-require.js | 26 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 test/fixtures/test-module-2.js diff --git a/test/fixtures/test-module-2.js b/test/fixtures/test-module-2.js new file mode 100644 index 00000000..bab74223 --- /dev/null +++ b/test/fixtures/test-module-2.js @@ -0,0 +1,4 @@ +console.log('inside test module 2'); +exports = function() { + console.log('inside test module function 2'); +}; diff --git a/test/flags-require.js b/test/flags-require.js index 32078316..6cfa1d84 100644 --- a/test/flags-require.js +++ b/test/flags-require.js @@ -50,6 +50,32 @@ describe('flag: --require', function() { } }); + it('can require multiple modules before running gulpfile', function(done) { + runner({ verbose: false }) + .gulp('--require ../test-module.js', '--require ../test-module-2.js', '--cwd ./test/fixtures/gulpfiles') + .run(cb); + + function cb(err, stdout, stderr) { + expect(err).toEqual(null); + expect(stderr).toEqual(''); + var insideLog = headLines(stdout, 1); + expect(insideLog).toEqual('inside test module'); + + var requireLog = eraseTime(headLines(stdout, 1, 1)); + expect(requireLog).toEqual( + 'Requiring external module ../test-module.js'); + + var insideLog2 = headLines(stdout, 1, 2); + expect(insideLog2).toEqual('inside test module 2'); + + var requireLog2 = eraseTime(headLines(stdout, 1, 3)); + expect(requireLog2).toEqual( + 'Requiring external module ../test-module-2.js'); + + done(err); + } + }); + it('warns if module doesn\'t exist', function(done) { runner({ verbose: false }) .gulp('--require ./null-module.js', '--cwd ./test/fixtures/gulpfiles')