Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/shinnn/uglify-save-license
A support module for UglifyJS to detect and preserve license comments
https://github.com/shinnn/uglify-save-license
Last synced: 26 days ago
JSON representation
A support module for UglifyJS to detect and preserve license comments
- Host: GitHub
- URL: https://github.com/shinnn/uglify-save-license
- Owner: shinnn
- License: mit
- Created: 2013-12-14T05:47:39.000Z (almost 11 years ago)
- Default Branch: master
- Last Pushed: 2016-10-13T09:53:26.000Z (about 8 years ago)
- Last Synced: 2024-09-19T08:48:44.464Z (about 2 months ago)
- Language: JavaScript
- Homepage:
- Size: 39.1 KB
- Stars: 59
- Watchers: 2
- Forks: 10
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# uglify-save-license
[![NPM version](https://badge.fury.io/js/uglify-save-license.svg)](http://badge.fury.io/js/uglify-save-license)
[![Build Status](https://travis-ci.org/shinnn/uglify-save-license.svg)](https://travis-ci.org/shinnn/uglify-save-license)
[![devDependency Status](https://david-dm.org/shinnn/uglify-save-license/dev-status.svg)](https://david-dm.org/shinnn/uglify-save-license#info=devDependencies)A support module for [UglifyJS](http://lisperator.net/uglifyjs/) to detect and preserve license comments
```javascript
// Backbone.js 1.1.2// (c) 2010-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
// Backbone may be freely distributed under the MIT license.
// For all details and documentation:
// http://backbonejs.org(function(root, factory) {
// Set up Backbone appropriately for the environment. Start with AMD.
if (typeof define === 'function' && define.amd) {
define(['underscore', 'jquery', 'exports'], function(_, $, exports) {
//...
```↓
```javascript
// Backbone.js 1.1.2
// (c) 2010-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
// Backbone may be freely distributed under the MIT license.
// For all details and documentation:
// http://backbonejs.org
!function(a,b){if("function"==typeof define&&define.amd)define(["underscore","jquery","exports"],function(c,d,e){a.Backbone=b(a,e,c,d)});else if("undefined"!=typeof exports){...
```## Overview
This module enables us to preserve license comments when using UglifyJS.
Even if the license statement is in multiple line comments, or the comment has no directive such as `@license` and `/*!`, this module keeps them readable.
## Installation
Install with [npm](https://npmjs.org/). (Make sure you have installed [Node](http://nodejs.org/download/).)
```
npm install --save-dev uglify-save-license
```## Usage
First of all, load `uglify-save-license` module.
```javascript
var saveLicense = require('uglify-save-license');
```### Use with [UglifyJS](https://github.com/mishoo/UglifyJS2)
Pass this module to the [`comments` option](https://github.com/mishoo/UglifyJS2#keeping-comments-in-the-output).
```javascript
var result = UglifyJS.minify('file1.js', {
output: {
comments: saveLicense
}
});
```### Use with [grunt-contrib-uglify](https://github.com/gruntjs/grunt-contrib-uglify)
Pass this module to the [`preserveComments` option](https://github.com/gruntjs/grunt-contrib-uglify#preservecomments).
```javascript
grunt.initConfig({
uglify: {
my_target: {
options: {
preserveComments: saveLicense
},
src: ['src/app.js'],
dest: 'dest/app.min.js'
}
}
});
```## How it works
*uglify-save-license* checks each [comment token](http://lisperator.net/uglifyjs/ast#tokens) of a JavaScript file.
The comment will be regarded as a license statement and preserved after compression, if it meets at least one of the following requirements:1. The comment is in the *first* line of a file.
2. [The regexp for license statement](https://github.com/shinnn/uglify-save-license/blob/451c8b0f549dbb74d62096f00b939f9c35942632/index.js#L7) matches the string of the comment. It matches, for example, `MIT` and `Copyright`.
3. There is a comment at the *previous* line, and it matches 1. 2. or 3.## Used by
* [Blanket.js](https://github.com/alex-seville/blanket) ([Alex Seville](https://github.com/alex-seville))
* [generator-gulp-angular](https://github.com/Swiip/generator-gulp-angular) ([Matthieu Lux](https://github.com/Swiip))
* [gulp plugins](https://github.com/gulpjs/plugins) ([Robin Böhm](https://github.com/robinboehm), [Max Ovsiankin](https://github.com/gratimax))## Examples
### CLI tool example
#### Main script (`uglify-example.js`)
```javascript
#!/usr/bin/env nodevar UglifyJS = require('uglify-js'),
saveLicense = require('uglify-save-license');var minified = UglifyJS.minify(process.argv[2], {
output: {
comments: saveLicense
}
}).code;console.log(minified);
```#### Target file
```javascript
// First line// (c) 2014 John <- contains '(c)'
// The previous line is preserved// This line won't be preserved.
(function(win, doc) {
var str = 'Hello World! :' + doc.title;// This line will not, too.
console.log(str);
}(window, document));
```#### Command
```
node uglify-example.js
```#### Output
```javascript
// First line
// (c) 2014 John <- contains '(c)'
// The previous line is preserved
!function(o,l){var n="Hello World! :"+l.title;console.log(n)}(window,document);
```### [Gruntfile.coffee](http://gruntjs.com/getting-started#the-gruntfile) example
```coffeescript
module.exports = (grunt) ->grunt.loadNpmTasks 'grunt-contrib-uglify'
grunt.loadNpmTasks 'grunt-contrib-concat'
grunt.loadNpmTasks 'grunt-contrib-clean'
grunt.initConfig
uglify:
target:
options:
preserveComments: require 'uglify-save-license'
files: [
expand: true
flatten: true
cwd: 'path/to/src'
src: ['**/*.js']
dest: 'tmp/'
]concat:
js:
src: ['tmp/*.js']
dest: 'path/to/build/app.js'clean:
tmpdir: ['tmp']grunt.registerTask 'default' ['uglify', 'concat', 'clean']
```## Acknowledgements
*uglify-save-license* is inspired by [grunt-license-saver](https://github.com/kyo-ago/grunt-license-saver) and I used it as reference.
Thanks, [kyo-ago](https://github.com/kyo-ago).## License
Copyright (c) 2013 - 2014 [Shinnosuke Watanabe](https://github.com/shinnn)
Licensed under [the MIT license](./LICENSE).