gulp-strip-comments
Version:
Strip comments from code
148 lines (95 loc) • 5.77 kB
Markdown
# [gulp](http://gulpjs.com)-strip-comments
[](https://coveralls.io/github/RnbWd/gulp-strip-comments?branch=master)
[](https://www.npmjs.com/package/gulp-strip-comments)
[](https://github.com/vitaly-t/decomment)
> [decomment](https://github.com/vitaly-t/decomment) - removes comments from JSON, JavaScript, CSS, HTML, etc.
[](https://nodei.co/npm/gulp-strip-comments/)
## Features
- Removes both single and multi-line comments from JSON, JavaScript and CSS/Text
- Automatically recognizes HTML and removes all `<!-- comments -->` from it
- Does not change layout / formatting of the original document
- Removes lines that have only comments on them
- Compatible with CSS3, JSON5 and ECMAScript 6
The library does not support mixed content - HTML with JavaScript or CSS in it.
Once the input code is recognized as HTML, only the HTML comments will be removed from it.
## Performance
For JSON and JavaScript this library uses [esprima] to guarantee correct processing for regular expressions.
As an example, it can process [AngularJS 1.5 Core](https://code.angularjs.org/1.5.0/angular.js)
in under 100ms, which is 1.1MB ~ 30,000 lines of JavaScript.
## Install
```sh
$ npm install --save-dev gulp-strip-comments
```
## Usage
```js
var gulp = require("gulp");
var strip = require("gulp-strip-comments");
gulp.task("default", function () {
return gulp.src("template.js").pipe(strip()).pipe(gulp.dest("dist"));
});
```
## API
See [decomment](https://github.com/vitaly-t/decomment#api) for examples and more information.
```
let strip = require('gulp-strip-comments') // == decomment
```
### [strip(options)](https://github.com/vitaly-t/decomment#decommentcode-options--string)
This method first checks if the code starts with `<`, as an HTML, and if so, all `<!-- comment -->` entries
are removed, according to the `options`.
When the `code` is not recognized as HTML, it is assumed to be either JSON or JavaScript. It is then parsed
through [esprima] for ECMAScript 6 compliance, and to extract details about regular expressions.
If [esprima] fails to validate the code, it will throw a parsing error. When successful, this method will remove
`//` and `/**/` comments according to the `options` (see below).
##### options.safe ⇒ Boolean
- `false (default)` - remove all multi-line comments
- `true` - keep special multi-line comments that begin with:
- `<!--[if` - for conditional comments in HTML
- `/*!` - for everything else (other than HTML)
##### options.ignore ⇒ RegExp | [RegExp,...]
Takes either a single or an array of regular expressions to match against.
All matching blocks are then skipped, as well as any comment-like content inside them.
Examples:
- CSS may contain Base64-encoded strings with comment-like symbols:
```css
src: url(data:font/woff;base64,d09GRg//ABAAAAAAZ);
```
You can isolate all `url(*)` blocks by using:
```js
{
ignore: /url\([\w\s:\/=\-\+;,]*\)/g;
}
```
- If you want to isolate jsDoc blocks (start with `/**`, followed by a line break, end with `*/`),
you can use the following:
```js
{
ignore: /\/\*\*\s*\n([^\*]|(\*(?!\/)))*\*\//g;
}
```
##### options.space ⇒ Boolean
- `false (default)` - remove comment blocks entirely
- `true` - replace comment blocks with white spaces where needed, in order to preserve the original line + column position of every code element.
NOTE: When this option is enabled, option `trim` is ignored.
##### options.trim ⇒ Boolean
- `false (default)` - do not trim comments
- `true` - remove empty lines that follow removed full-line comments
NOTE: This option has no effect when option `space` is enabled.
##### options.tolerant ⇒ Boolean
- `false (default)` - perform strict JavaScript parsing (parser throws on invalid JavaScript)
- `true` - pass `tolerant` flag to [esprima] parser (the parser _may_ choose to continue parsing and produce a syntax tree).
Usefull for parsing Angular/TypeScript code, for example.
### [strip.text(options)](https://github.com/vitaly-t/decomment#decommenttexttext-options--string)
Unlike the default **strip** method, it instructs the library that `text` is not a JSON, JavaScript or HTML, rather a plain text that needs no parsing or validation, only to remove `//` and `/**/` comments from it according to the `options`.
This method is good for any text file that uses syntax `//` and `/**/` for comments, such as: `.CSS`, `.CPP`, `.H`, etc.
Please note that while the same rules apply for the text blocks (`''`, `""` and \`\`), you should not use this method for JSON or JavaScript, as it can break your regular expressions.
### [strip.html(options)](https://github.com/vitaly-t/decomment#decommenthtmlhtml-options--string)
Unlike the default **strip** method, it instructs the library not to parse
or validate the input in any way, rather assume it to be HTML, and remove all
`<!-- comment -->` entries from it according to the `options`.
### [strip.getEOL()](https://github.com/vitaly-t/decomment#decommentgeteoltext--string)
Returns End-of-Line string used within the `text`, based on the occurrence frequency:
- `\n` - for Unix-encoded text
- `\r\n` - for Windows-encoded text
When impossible to conclude (the same or 0 occurrence), it returns the default End-of-Line for the current OS.
---
[](https://opensource.org/licenses/MIT)