Skip to content

Commit

Permalink
New: Support flags.require config option (closes #108, closes #167) (
Browse files Browse the repository at this point in the history
  • Loading branch information
phated authored Mar 21, 2019
1 parent a4236f2 commit 33e14d7
Show file tree
Hide file tree
Showing 21 changed files with 225 additions and 1 deletion.
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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. Any relative paths will be resolved against the `--cwd` directory (if you don't want that behavior, use absolute paths) |

## Flags

Expand Down Expand Up @@ -147,7 +148,7 @@ __Some flags only work with gulp 4 and will be ignored when invoked against gulp
<tr>
<td>--cwd [path]</td>
<td></td>
<td>Manually set the CWD. The search for the gulpfile, as well as the relativity of all requires will be from here.</td>
<td>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.</td>
</tr>
<tr>
<td>--verify [path (optional)]</td>
Expand Down
4 changes: 4 additions & 0 deletions lib/shared/config/env-flags.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ var copyProps = require('copy-props');
var toFrom = {
configPath: 'flags.gulpfile',
configBase: 'flags.gulpfile',
require: 'flags.require',
};

function mergeConfigToEnvFlags(env, config) {
Expand All @@ -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;
}

Expand Down
109 changes: 109 additions & 0 deletions test/config-flags-require.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
'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('resolves relative requires against cwd', function(done) {
runner
.gulp('--cwd flags/require/with-cwd')
.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, 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);
}
});
});

8 changes: 8 additions & 0 deletions test/fixtures/config/flags/require/array/.gulp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"flags": {
"require": [
"./preload_one",
"./preload_two"
]
}
}
9 changes: 9 additions & 0 deletions test/fixtures/config/flags/require/array/gulpfile.js
Original file line number Diff line number Diff line change
@@ -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();
});
1 change: 1 addition & 0 deletions test/fixtures/config/flags/require/array/preload_one.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
global.preload_one = 'preload one!';
1 change: 1 addition & 0 deletions test/fixtures/config/flags/require/array/preload_two.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
global.preload_two = 'preload two!';
7 changes: 7 additions & 0 deletions test/fixtures/config/flags/require/join-flags/.gulp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"flags": {
"require": [
"./preload_two"
]
}
}
9 changes: 9 additions & 0 deletions test/fixtures/config/flags/require/join-flags/gulpfile.js
Original file line number Diff line number Diff line change
@@ -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();
});
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
global.preload_one = 'preload one!';
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
global.preload_two = 'preload two!';
1 change: 1 addition & 0 deletions test/fixtures/config/flags/require/preload.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
global.preload = 'hello preload!';
5 changes: 5 additions & 0 deletions test/fixtures/config/flags/require/string/.gulp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"flags": {
"require": "./preload"
}
}
8 changes: 8 additions & 0 deletions test/fixtures/config/flags/require/string/gulpfile.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
'use strict';

var gulp = require('gulp');

gulp.task('default', function(done) {
console.log(global.preload);
done();
});
1 change: 1 addition & 0 deletions test/fixtures/config/flags/require/string/preload.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
global.preload = 'hello preload!';
7 changes: 7 additions & 0 deletions test/fixtures/config/flags/require/with-absolute/.gulp.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
var path = require('path');

module.exports = {
flags: {
require: path.join(__dirname, '../preload'),
},
};
8 changes: 8 additions & 0 deletions test/fixtures/config/flags/require/with-absolute/gulpfile.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
'use strict';

var gulp = require('gulp');

gulp.task('default', function(done) {
console.log(global.preload);
done();
});
5 changes: 5 additions & 0 deletions test/fixtures/config/flags/require/with-cwd/.gulp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"flags": {
"require": "../preload"
}
}
8 changes: 8 additions & 0 deletions test/fixtures/config/flags/require/with-cwd/gulpfile.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
'use strict';

var gulp = require('gulp');

gulp.task('default', function(done) {
console.log(global.preload);
done();
});
4 changes: 4 additions & 0 deletions test/fixtures/test-module-2.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
console.log('inside test module 2');
exports = function() {
console.log('inside test module function 2');
};
26 changes: 26 additions & 0 deletions test/flags-require.js
Original file line number Diff line number Diff line change
Expand Up @@ -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')
Expand Down

0 comments on commit 33e14d7

Please sign in to comment.