From 1bfad8f108c706ff8661db22b7ebb3234a96f3cb Mon Sep 17 00:00:00 2001 From: MichaelCook Date: Tue, 8 Nov 2016 22:38:58 +0000 Subject: [PATCH 1/3] Added debugIncludes param to echo included filenames to console --- CHANGELOG.md | 3 +++ README.md | 18 ++++++++++++------ index.js | 13 ++++++++++++- package.json | 2 +- 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c99789b..5d21c56 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +#### 2.3.2 +* Added `debugIncludes` param + #### 2.3.1 * Isolated include to solve some scoping issues that happens when running multiple includes in parallel. diff --git a/README.md b/README.md index fd2a31e..f3a98d2 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ #gulp-include [![NPM version][npm-image]][npm-url] ![Travis build][travis-image] ->Makes inclusion of files a breeze. +>Makes inclusion of files a breeze. Enables functionality similar to that of snockets / sprockets or other file insertion compilation tools. > Made for gulp 3 @@ -37,13 +37,13 @@ gulp.task("default", ["scripts"]); ## Options - `extensions` (optional) - * Takes a `String` or an `Array` of extensions. + * Takes a `String` or an `Array` of extensions. eg: `"js"` or `["js", "coffee"]` - * If set, all directives that does not match the extension(s) will be ignored + * If set, all directives that does not match the extension(s) will be ignored - `includePaths` (optional) - * Takes a `String` or an `Array` of paths. + * Takes a `String` or an `Array` of paths. eg: `__dirname + "/node_modules"` or `[__dirname + "/assets/js", __dirname + "/bower_components"]` * If set, `gulp-include` will use these folders as base path when searching for files. @@ -54,6 +54,11 @@ gulp.task("default", ["scripts"]); an include directive. * If set to `false` gulp include will not fail, but display warnings in the console. + +- `debugIncludes` (optional) + * Boolean, `false` by default + * Set this to `true` if you want `gulp-include` to output included filenames to the console. + #### Example options usage: ```js gulp.src("src/js/main.js") @@ -63,7 +68,8 @@ gulp.src("src/js/main.js") includePaths: [ __dirname + "/bower_components", __dirname + "/src/js" - ] + ], + debugIncludes: true })) .pipe(gulp.dest("dist/js")); ``` @@ -90,7 +96,7 @@ Example directives: The contents of the referenced file will replace the file. ### `require` vs. `include` -A file that is included with `require` will only be included if it has not been included before. Files included with `include` will _always_ be included. +A file that is included with `require` will only be included if it has not been included before. Files included with `include` will _always_ be included. For instance, let's say you want to include `jquery.js` only once, and before any of your other scripts in the same folder. ```javascript //=require vendor/jquery.js diff --git a/index.js b/index.js index b82001b..607793d 100644 --- a/index.js +++ b/index.js @@ -15,7 +15,8 @@ module.exports = function (params) { var extensions = null, // The extension to be searched after includedFiles = [], // Keeping track of what files have been included includePaths = false, // The paths to be searched - hardFail = false; // Throw error when no match + hardFail = false, // Throw error when no match + debugIncludes = false; // Check for includepaths in the params if (params.includePaths) { @@ -33,6 +34,11 @@ module.exports = function (params) { hardFail = params.hardFail; } + // Toggle echoing of included filenames + if (params.debugIncludes != undefined) { + debugIncludes = params.debugIncludes; + } + if (params.extensions) { extensions = typeof params.extensions === 'string' ? [params.extensions] : params.extensions; } @@ -137,6 +143,11 @@ module.exports = function (params) { // Split the directive and the path var includeType = split[0]; + // Echo filenames of includes if debugIncludes is true + if (debugIncludes) { + console.log(gutil.colors.cyan('Including: ') + gutil.colors.blue.bold(split[1])); + } + // Use glob for file searching var fileMatches = []; var includePath = ""; diff --git a/package.json b/package.json index 475be89..417cf7b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gulp-include", - "version": "2.3.1", + "version": "2.3.2", "description": "Makes inclusion of files a breeze. Enables functionality similar to that of snockets / sprockets or other file insertion compilation tools.", "homepage": "http://github.com/wiledal/gulp-include", "repository": { From 1add77c10bfb70237e726df95de284cb81de6799 Mon Sep 17 00:00:00 2001 From: Ken Eucker Date: Sun, 7 Apr 2019 20:20:27 -0700 Subject: [PATCH 2/3] Readme and changelog updates for 2.4.0 --- CHANGELOG.md | 3 +++ README.md | 25 ++++++++++++++++++++----- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 63cf6d4..1dd66bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ #### 2.4.0 * Lots of community fixes graceously assembled and merged by [KenEucker](https://github.com/KenEucker) +* Dependencies update after three years. +* The plugin now supports both gulp 3 and gulp version 4. +* Merged support for separated includes between files, by [PFight](https://github.com/PFight) #### 2.3.1 * Isolated include to solve some scoping issues that happens when running multiple includes in parallel. diff --git a/README.md b/README.md index 74d7aa5..fadecbf 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,23 @@ -#gulp-include [![NPM version][npm-image]][npm-url] ![Travis build][travis-image] ->Makes inclusion of files a breeze. -Enables functionality similar to that of snockets / sprockets or other file insertion compilation tools. - -> Made for gulp 3 +# gulp-include [![NPM version][npm-image]][npm-url] ![Travis build][travis-image] + + + + + + + + + + + + + + + + +
Packagegulp-include
DescriptionMakes inclusion of files a breeze. Enables functionality similar to that of snockets / sprockets or other file insertion compilation tools.
Node Version>= 6.0.0
Gulp Version>= 3.0.0
+ +> Works with gulp 3 and gulp 4 ## Features * Concatenate files with full control From 104db04741cf4bbc19e847bebd2ccf9ce7c3e2a8 Mon Sep 17 00:00:00 2001 From: Ken Eucker Date: Sun, 7 Apr 2019 20:36:18 -0700 Subject: [PATCH 3/3] From tabs back to spaces. --- index.js | 646 +++++++++++++++++++++++++-------------------------- package.json | 72 +++--- 2 files changed, 359 insertions(+), 359 deletions(-) diff --git a/index.js b/index.js index 2e6ab60..4c34a54 100644 --- a/index.js +++ b/index.js @@ -1,327 +1,327 @@ var fs = require('fs'), - path = require('path'), - es = require('event-stream'), - glob = require('glob'), - PluginError = require('plugin-error'), - colors = require('ansi-colors'), - applySourceMap = require('vinyl-sourcemaps-apply'), - stripBom = require('strip-bom'); + path = require('path'), + es = require('event-stream'), + glob = require('glob'), + PluginError = require('plugin-error'), + colors = require('ansi-colors'), + applySourceMap = require('vinyl-sourcemaps-apply'), + stripBom = require('strip-bom'); module.exports = function (params) { - params = params || {}; - - var SourceMapGenerator = require('source-map').SourceMapGenerator; - var SourceMapConsumer = require('source-map').SourceMapConsumer; - - var extensions = null, // The extension to be searched after - globalIncludedFiles = [], // For track of what files have been included over all files - includePaths = false, // The paths to be searched - hardFail = false, // Throw error when no match - separateInputs = false; // Process each input file separately when using `require` logic. - - // Check for includepaths in the params - if (params.includePaths) { - if (typeof params.includePaths == "string") { - // Arrayify the string - includePaths = [params.includePaths]; - } else if (Array.isArray(params.includePaths)) { - // Set this array to the includepaths - includePaths = params.includePaths; - } - } - - if (params.separateInputs) { - separateInputs = true; - } - - // Toggle error reporting - if (params.hardFail != undefined) { - hardFail = params.hardFail; - } - - if (params.extensions) { - extensions = typeof params.extensions === 'string' ? [params.extensions] : params.extensions; - } - - function include(file, callback) { - var includedFiles = separateInputs ? [] : globalIncludedFiles; - - if (file.isNull()) { - return callback(null, file); - } - - if (file.isStream()) { - throw new PluginError('gulp-include', 'stream not supported'); - } - - if (file.isBuffer()) { - var result = processInclude(String(file.contents), file.path, file.sourceMap, includedFiles); - file.contents = new Buffer(result.content); - - if (file.sourceMap && result.map) { - if (Object.prototype.toString.call(result.map) === '[object String]') { - result.map = JSON.parse(result.map); - } - - // relative-ize the paths in the map - result.map.file = path.relative(file.base, result.map.file); - result.map.sources.forEach(function (source, q) { - result.map.sources[q] = path.relative(file.base, result.map.sources[q]); - }); - - applySourceMap(file, result.map); - } - } - - callback(null, file); - } - - function processInclude(content, filePath, sourceMap, includedFiles) { - var matches = content.match(/^(\s+)?(\/\/|\/\*|\#|\<\!\-\-)(\s+)?=(\s+)?(include|require)(.+$)/mg); - var relativeBasePath = path.dirname(filePath); - - if (!matches) return { - content: content, - map: null - }; - - // Apply sourcemaps - var map = null, - mapSelf, lastMappedLine, currentPos, insertedLines; - if (sourceMap) { - map = new SourceMapGenerator({ - file: unixStylePath(filePath) - }); - lastMappedLine = 1; - currentPos = 0; - insertedLines = 0; - - mapSelf = function (currentLine) { // maps current file between matches and after all matches - var currentOrigLine = currentLine - insertedLines; - - for (var q = (currentLine - lastMappedLine); q > 0; q--) { - map.addMapping({ - generated: { - line: currentLine - q, - column: 0 - }, - original: { - line: currentOrigLine - q, - column: 0 - }, - source: filePath - }); - } - - lastMappedLine = currentLine; - }; - } - - for (var i = 0; i < matches.length; i++) { - var leadingWhitespaceMatch = matches[i].match(/^\s*/); - var leadingWhitespace = null; - if (leadingWhitespaceMatch) { - leadingWhitespace = leadingWhitespaceMatch[0].replace("\n", ""); - } - - // Remove beginnings, endings and trim. - var includeCommand = matches[i] - .replace(/\s+/g, " ") - .replace(/(\/\/|\/\*|\#|)$/g, "") - .replace(/['"]/g, "") - .trim(); - - var split = includeCommand.split(" "); - - var currentLine; - if (sourceMap) { - // get position of current match and get current line number - currentPos = content.indexOf(matches[i], currentPos); - currentLine = currentPos === -1 ? 0 : content.substr(0, currentPos).match(/^/mg).length; - - // sometimes the line matches the leading \n and sometimes it doesn't. wierd. - // in case it does, increment the current line counter - if (leadingWhitespaceMatch[0][0] == '\n') currentLine++; - - mapSelf(currentLine); - } - - // SEARCHING STARTS HERE - // Split the directive and the path - var includeType = split[0]; - - // Use glob for file searching - var fileMatches = []; - var includePath = ""; - - if (includePaths != false) { - // If includepaths are set, search in those folders - for (var y = 0; y < includePaths.length; y++) { - includePath = includePaths[y] + "/" + split[1]; - - var globResults = glob.sync(includePath, { - mark: true - }); - fileMatches = fileMatches.concat(globResults); - } - } else { - // Otherwise search relatively - includePath = relativeBasePath + "/" + split[1]; - var globResults = glob.sync(includePath, { - mark: true - }); - fileMatches = globResults; - } - - if (fileMatches.length < 1) fileNotFoundError(includePath); - - var replaceContent = ''; - for (var y = 0; y < fileMatches.length; y++) { - var globbedFilePath = fileMatches[y]; - - // If directive is of type "require" and file already included, skip to next. - if (includeType == "require" && includedFiles.indexOf(globbedFilePath) > -1) continue; - - // If not in extensions, skip this file - if (!inExtensions(globbedFilePath)) continue; - - // Get file contents and apply recursive include on result - // Unicode byte order marks are stripped from the start of included files - var fileContents = stripBom(fs.readFileSync(globbedFilePath)); - - var result = processInclude(fileContents.toString(), globbedFilePath, sourceMap, includedFiles); - var resultContent = result.content; - - if (sourceMap) { - var lines = resultContent.match(/^/mg).length; //count lines in result - - if (result.map) { // result had a map, merge mappings - if (Object.prototype.toString.call(result.map) === '[object String]') { - result.map = JSON.parse(result.map); - } - - if (result.map.mappings && result.map.mappings.length > 0) { - var resultMap = new SourceMapConsumer(result.map); - resultMap.eachMapping(function (mapping) { - if (!mapping.source) return; - - map.addMapping({ - generated: { - line: mapping.generatedLine + currentLine - 1, - column: mapping.generatedColumn + (leadingWhitespace ? leadingWhitespace.length : 0) - }, - original: { - line: mapping.originalLine, - column: mapping.originalColumn - }, - source: mapping.source, - name: mapping.name - }); - }); - - if (result.map.sourcesContent) { - result.map.sourcesContent.forEach(function (sourceContent, i) { - map.setSourceContent(result.map.sources[i], sourceContent); - }); - } - } - } else { // result was a simple file, map whole file to new location - for (var q = 0; q < lines; q++) { - map.addMapping({ - generated: { - line: currentLine + q, - column: leadingWhitespace ? leadingWhitespace.length : 0 - }, - original: { - line: q + 1, - column: 0 - }, - source: globbedFilePath - }); - } - - if (sourceMap.sourcesContent) { - map.setSourceContent(globbedFilePath, resultContent); - } - } - - // increment/set map line counters - insertedLines += lines; - currentLine += lines; - lastMappedLine = currentLine; - } - - if (includedFiles.indexOf(globbedFilePath) == -1) includedFiles.push(globbedFilePath); - - // If the last file did not have a line break, and it is not the last file in the matched glob, - // add a line break to the end - if (!resultContent.trim().match(/\n$/) && y != fileMatches.length - 1) { - resultContent += "\n"; - } - - if (leadingWhitespace) resultContent = addLeadingWhitespace(leadingWhitespace, resultContent); - - replaceContent += resultContent; - } - - // REPLACE - if (replaceContent.length) { - // sometimes the line matches the leading \n and sometimes it doesn't. wierd. - // in case it does, preserve that leading \n - if (leadingWhitespaceMatch[0][0] === '\n') { - replaceContent = '\n' + replaceContent; - } - - content = content.replace(matches[i], function () { - return replaceContent - }); - insertedLines--; // adjust because the original line with comment was removed - } - } - - if (sourceMap) { - currentLine = content.match(/^/mg).length + 1; - - mapSelf(currentLine); - } - - return { - content: content, - map: map ? map.toString() : null - }; - } - - function unixStylePath(filePath) { - return filePath.replace(/\\/g, '/'); - } - - function addLeadingWhitespace(whitespace, string) { - return string.split("\n").map(function (line) { - return whitespace + line; - }).join("\n"); - } - - function fileNotFoundError(includePath) { - if (hardFail) { - throw new PluginError('gulp-include', 'No files found matching ' + includePath); - } else { - console.warn( - colors.yellow('WARN: ') + - colors.cyan('gulp-include') + - ' - no files found matching ' + includePath - ); - } - } - - function inExtensions(filePath) { - if (!extensions) return true; - for (var i = 0; i < extensions.length; i++) { - var re = extensions[i] + "$"; - if (filePath.match(re)) return true; - } - return false; - } - - return es.map(include) + params = params || {}; + + var SourceMapGenerator = require('source-map').SourceMapGenerator; + var SourceMapConsumer = require('source-map').SourceMapConsumer; + + var extensions = null, // The extension to be searched after + globalIncludedFiles = [], // For track of what files have been included over all files + includePaths = false, // The paths to be searched + hardFail = false, // Throw error when no match + separateInputs = false; // Process each input file separately when using `require` logic. + + // Check for includepaths in the params + if (params.includePaths) { + if (typeof params.includePaths == "string") { + // Arrayify the string + includePaths = [params.includePaths]; + } else if (Array.isArray(params.includePaths)) { + // Set this array to the includepaths + includePaths = params.includePaths; + } + } + + if (params.separateInputs) { + separateInputs = true; + } + + // Toggle error reporting + if (params.hardFail != undefined) { + hardFail = params.hardFail; + } + + if (params.extensions) { + extensions = typeof params.extensions === 'string' ? [params.extensions] : params.extensions; + } + + function include(file, callback) { + var includedFiles = separateInputs ? [] : globalIncludedFiles; + + if (file.isNull()) { + return callback(null, file); + } + + if (file.isStream()) { + throw new PluginError('gulp-include', 'stream not supported'); + } + + if (file.isBuffer()) { + var result = processInclude(String(file.contents), file.path, file.sourceMap, includedFiles); + file.contents = new Buffer(result.content); + + if (file.sourceMap && result.map) { + if (Object.prototype.toString.call(result.map) === '[object String]') { + result.map = JSON.parse(result.map); + } + + // relative-ize the paths in the map + result.map.file = path.relative(file.base, result.map.file); + result.map.sources.forEach(function (source, q) { + result.map.sources[q] = path.relative(file.base, result.map.sources[q]); + }); + + applySourceMap(file, result.map); + } + } + + callback(null, file); + } + + function processInclude(content, filePath, sourceMap, includedFiles) { + var matches = content.match(/^(\s+)?(\/\/|\/\*|\#|\<\!\-\-)(\s+)?=(\s+)?(include|require)(.+$)/mg); + var relativeBasePath = path.dirname(filePath); + + if (!matches) return { + content: content, + map: null + }; + + // Apply sourcemaps + var map = null, + mapSelf, lastMappedLine, currentPos, insertedLines; + if (sourceMap) { + map = new SourceMapGenerator({ + file: unixStylePath(filePath) + }); + lastMappedLine = 1; + currentPos = 0; + insertedLines = 0; + + mapSelf = function (currentLine) { // maps current file between matches and after all matches + var currentOrigLine = currentLine - insertedLines; + + for (var q = (currentLine - lastMappedLine); q > 0; q--) { + map.addMapping({ + generated: { + line: currentLine - q, + column: 0 + }, + original: { + line: currentOrigLine - q, + column: 0 + }, + source: filePath + }); + } + + lastMappedLine = currentLine; + }; + } + + for (var i = 0; i < matches.length; i++) { + var leadingWhitespaceMatch = matches[i].match(/^\s*/); + var leadingWhitespace = null; + if (leadingWhitespaceMatch) { + leadingWhitespace = leadingWhitespaceMatch[0].replace("\n", ""); + } + + // Remove beginnings, endings and trim. + var includeCommand = matches[i] + .replace(/\s+/g, " ") + .replace(/(\/\/|\/\*|\#|)$/g, "") + .replace(/['"]/g, "") + .trim(); + + var split = includeCommand.split(" "); + + var currentLine; + if (sourceMap) { + // get position of current match and get current line number + currentPos = content.indexOf(matches[i], currentPos); + currentLine = currentPos === -1 ? 0 : content.substr(0, currentPos).match(/^/mg).length; + + // sometimes the line matches the leading \n and sometimes it doesn't. wierd. + // in case it does, increment the current line counter + if (leadingWhitespaceMatch[0][0] == '\n') currentLine++; + + mapSelf(currentLine); + } + + // SEARCHING STARTS HERE + // Split the directive and the path + var includeType = split[0]; + + // Use glob for file searching + var fileMatches = []; + var includePath = ""; + + if (includePaths != false) { + // If includepaths are set, search in those folders + for (var y = 0; y < includePaths.length; y++) { + includePath = includePaths[y] + "/" + split[1]; + + var globResults = glob.sync(includePath, { + mark: true + }); + fileMatches = fileMatches.concat(globResults); + } + } else { + // Otherwise search relatively + includePath = relativeBasePath + "/" + split[1]; + var globResults = glob.sync(includePath, { + mark: true + }); + fileMatches = globResults; + } + + if (fileMatches.length < 1) fileNotFoundError(includePath); + + var replaceContent = ''; + for (var y = 0; y < fileMatches.length; y++) { + var globbedFilePath = fileMatches[y]; + + // If directive is of type "require" and file already included, skip to next. + if (includeType == "require" && includedFiles.indexOf(globbedFilePath) > -1) continue; + + // If not in extensions, skip this file + if (!inExtensions(globbedFilePath)) continue; + + // Get file contents and apply recursive include on result + // Unicode byte order marks are stripped from the start of included files + var fileContents = stripBom(fs.readFileSync(globbedFilePath)); + + var result = processInclude(fileContents.toString(), globbedFilePath, sourceMap, includedFiles); + var resultContent = result.content; + + if (sourceMap) { + var lines = resultContent.match(/^/mg).length; //count lines in result + + if (result.map) { // result had a map, merge mappings + if (Object.prototype.toString.call(result.map) === '[object String]') { + result.map = JSON.parse(result.map); + } + + if (result.map.mappings && result.map.mappings.length > 0) { + var resultMap = new SourceMapConsumer(result.map); + resultMap.eachMapping(function (mapping) { + if (!mapping.source) return; + + map.addMapping({ + generated: { + line: mapping.generatedLine + currentLine - 1, + column: mapping.generatedColumn + (leadingWhitespace ? leadingWhitespace.length : 0) + }, + original: { + line: mapping.originalLine, + column: mapping.originalColumn + }, + source: mapping.source, + name: mapping.name + }); + }); + + if (result.map.sourcesContent) { + result.map.sourcesContent.forEach(function (sourceContent, i) { + map.setSourceContent(result.map.sources[i], sourceContent); + }); + } + } + } else { // result was a simple file, map whole file to new location + for (var q = 0; q < lines; q++) { + map.addMapping({ + generated: { + line: currentLine + q, + column: leadingWhitespace ? leadingWhitespace.length : 0 + }, + original: { + line: q + 1, + column: 0 + }, + source: globbedFilePath + }); + } + + if (sourceMap.sourcesContent) { + map.setSourceContent(globbedFilePath, resultContent); + } + } + + // increment/set map line counters + insertedLines += lines; + currentLine += lines; + lastMappedLine = currentLine; + } + + if (includedFiles.indexOf(globbedFilePath) == -1) includedFiles.push(globbedFilePath); + + // If the last file did not have a line break, and it is not the last file in the matched glob, + // add a line break to the end + if (!resultContent.trim().match(/\n$/) && y != fileMatches.length - 1) { + resultContent += "\n"; + } + + if (leadingWhitespace) resultContent = addLeadingWhitespace(leadingWhitespace, resultContent); + + replaceContent += resultContent; + } + + // REPLACE + if (replaceContent.length) { + // sometimes the line matches the leading \n and sometimes it doesn't. wierd. + // in case it does, preserve that leading \n + if (leadingWhitespaceMatch[0][0] === '\n') { + replaceContent = '\n' + replaceContent; + } + + content = content.replace(matches[i], function () { + return replaceContent + }); + insertedLines--; // adjust because the original line with comment was removed + } + } + + if (sourceMap) { + currentLine = content.match(/^/mg).length + 1; + + mapSelf(currentLine); + } + + return { + content: content, + map: map ? map.toString() : null + }; + } + + function unixStylePath(filePath) { + return filePath.replace(/\\/g, '/'); + } + + function addLeadingWhitespace(whitespace, string) { + return string.split("\n").map(function (line) { + return whitespace + line; + }).join("\n"); + } + + function fileNotFoundError(includePath) { + if (hardFail) { + throw new PluginError('gulp-include', 'No files found matching ' + includePath); + } else { + console.warn( + colors.yellow('WARN: ') + + colors.cyan('gulp-include') + + ' - no files found matching ' + includePath + ); + } + } + + function inExtensions(filePath) { + if (!extensions) return true; + for (var i = 0; i < extensions.length; i++) { + var re = extensions[i] + "$"; + if (filePath.match(re)) return true; + } + return false; + } + + return es.map(include) }; \ No newline at end of file diff --git a/package.json b/package.json index 6821451..0b6245c 100644 --- a/package.json +++ b/package.json @@ -1,38 +1,38 @@ { - "name": "gulp-include", - "version": "2.4.0", - "description": "Makes inclusion of files a breeze. Enables functionality similar to that of snockets / sprockets or other file insertion compilation tools.", - "homepage": "http://github.com/wiledal/gulp-include", - "repository": { - "type": "git", - "url": "git://github.com/wiledal/gulp-include.git" - }, - "main": "index.js", - "scripts": { - "test": "mocha" - }, - "keywords": [ - "gulpplugin" - ], - "author": { - "name": "Hugo Wiledal" - }, - "license": "MIT", - "devDependencies": { - "gulp": "^4.0.0", - "gulp-sourcemaps": "^2.6.5", - "mocha": "^6.0.2", - "should": "^13.2.3", - "stream-assert": "^2.0.3" - }, - "dependencies": { - "ansi-colors": "^3.2.4", - "event-stream": "^4.0.1", - "glob": "^7.1.3", - "plugin-error": "^1.0.1", - "source-map": "^0.7.3", - "strip-bom": "^2.0.0", - "vinyl": "^2.2.0", - "vinyl-sourcemaps-apply": "^0.2.1" - } + "name": "gulp-include", + "version": "2.4.0", + "description": "Makes inclusion of files a breeze. Enables functionality similar to that of snockets / sprockets or other file insertion compilation tools.", + "homepage": "http://github.com/wiledal/gulp-include", + "repository": { + "type": "git", + "url": "git://github.com/wiledal/gulp-include.git" + }, + "main": "index.js", + "scripts": { + "test": "mocha" + }, + "keywords": [ + "gulpplugin" + ], + "author": { + "name": "Hugo Wiledal" + }, + "license": "MIT", + "devDependencies": { + "gulp": "^4.0.0", + "gulp-sourcemaps": "^2.6.5", + "mocha": "^6.0.2", + "should": "^13.2.3", + "stream-assert": "^2.0.3" + }, + "dependencies": { + "ansi-colors": "^3.2.4", + "event-stream": "^4.0.1", + "glob": "^7.1.3", + "plugin-error": "^1.0.1", + "source-map": "^0.7.3", + "strip-bom": "^2.0.0", + "vinyl": "^2.2.0", + "vinyl-sourcemaps-apply": "^0.2.1" + } }