Package Exports
- uglify-save-license
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (uglify-save-license) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
uglify-save-license
A support module for UglifyJS to detect and preserve license comments
// 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) {
//...
↓
// 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. (Make sure you have installed Node.)
npm install --save-dev uglify-save-license
Usage
First of all, load uglify-save-license
module.
var saveLicense = require('uglify-save-license');
Use with UglifyJS
Pass this module to the comments
option.
var result = UglifyJS.minify('file1.js', {
output: {
comments: saveLicense
}
});
Use with grunt-contrib-uglify
Pass this module to the preserveComments
option.
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 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:
- The comment is in the first line of a file.
- The regexp for license statement matches the string of the comment. It matches, for example,
MIT
andCopyright
. - There is a comment at the previous line, and it matches 1. 2. or 3.
Examples
CLI tool example
Main script (uglify-example.js
)
#!/usr/bin/env node
var 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
// 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 <target filename>
Output
// 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 example
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 and I used it as reference. Thanks, kyo-ago.
License
Copyright (c) 2013 - 2014 Shinnosuke Watanabe
Licensed under the MIT license.