UNPKG

usemin

Version:

Replaces references to non-optimized scripts or stylesheets into a set of HTML files (or any templates/views).

233 lines (185 loc) 7.06 kB
# usemin [![Build Status](https://travis-ci.org/nelsyeung/usemin.svg?branch=master)](https://travis-ci.org/nelsyeung/usemin) [![NPM Version](https://img.shields.io/npm/v/usemin.svg)](https://www.npmjs.com/package/usemin) [![Downloads per Month](https://img.shields.io/npm/dm/usemin.svg)](https://www.npmjs.com/package/usemin) > API version of usemin. For _purists_, those who don't use build tools like [Grunt](https://github.com/yeoman/grunt-usemin) and [Gulp](https://github.com/zont/gulp-usemin), but just use node as their build tool. ## Getting started Install with npm: ```sh npm install usemin ``` ## CLI [usemin-cli](https://github.com/nelsyeung/usemin-cli) - Command line interface for this module. ## API ```js var usemin = require('usemin'); ``` ### usemin(filepath, dest, [opts]) Replaces references to non-optimized scripts or stylesheets into a set of HTML files (or any templates/views). #### Parameters: *(string)* **filepath** - HTML input file path. *(string)* **dest** - Directory for where the optimized scripts and stylesheets should go. *(object)* **opts** *Optional* - See below for the available options. #### Returns: *(string)* The content of the final HTML file #### options: ```js var defaults = { output: false, // HTML output path. If false, it will be printed to the console (string) configFile: false, // config file path for UglifyJS, CleanCSS and HTML minifier (string) config: false, // UglifyJS, CleanCSS and HTML minifier configs, // similar format to the config file (object) htmlmin: false, // Whether to minify the input HTML file (Boolean) noprocess: false, // Do not process files, just replace references (Boolean) removeLivereload: false, // Remove livereload script (Boolean) }; ``` #### Examples ```js var html = usemin('src/index.html', 'dist'); usemin('src/index.html', 'dist', { output: 'dist/index.html', htmlmin: true, removeLivereload: true, }); ``` ### usemin.getBlocks(filepath, content, removeLivereload) Extract information from a HTML input file to be processed later. This does not process any files (i.e., it doesn't perform uglify or minify). #### Parameters: *(string)* **filepath** - HTML input file path. *(string)* **content** - Content of the HTML file as a string. (The reason for this is because the main usemin function uses this content multiple times, so to prevent the file being read multiples times it's simply cached into a variable to be passed into these API functions.) *(boolean)* **removeLivereload** - Whether to also extract livereload script. #### Returns: *(object)* An object of the following form: ```js [ { async: false, defer: false, type: 'css', dest: 'css/main.css', indent: '\t', searchPath: ['',], src: [ inputsDir + 'css/foo.css', inputsDir + 'css/bar.css', ], raw: [ '\t<!-- build:css css/main.css -->', '\t<link rel="stylesheet" href="css/foo.css">', '\t<link rel="stylesheet" href="css/bar.css">', '\t<!-- endbuild -->', ], }, ] ``` ### usemin.getConfig(configFile, configOverride) Returns configurations object for UglifyJS, CleanCSS and HTML minifier from a config file. #### Parameters: *(string)* **configFile** - Config file path. (.js extension can be omitted.) *(object)* **configOverride** - Config object to override any previously set configs. #### returns: *(object)* An object of the following form: ```js { uglifyjs: { }, cleancss: { }, htmlminifier: { removeComments: true, collapseWhitespace: true, removeEmptyAttributes: true, removeScriptTypeAttributes: true, removeStyleLinkTypeAttributes: true, minifyJS: true, minifyCSS: true, }, } ``` ### usemin.processBlocks(blocks, dest, config) Uglify javascripts and CSS for a supplied block object from the `usemin.getBlocks` function. #### Parameters: *(object[])* **blocks** - Blocks from the `usemin.getBlocks` function. *(string)* **dest** - Directory for where the optimized scripts and stylesheets should go. *(object)* **config** - Configuration object for UglifyJS, cleanCSS and HTML minifier. #### Returns: *(boolean)* Throws error, otherwise true. ### usemin.getHtml(content, blocks, htmlmin, config) Returns the HTML with replaced references to non-optimized scripts or stylesheets. #### Parameters: *(string)* **content** - Content of the HTML file as a string. (The reason for this is because the main usemin function uses this content multiple times, so to prevent the file being read multiples times it's simply cached into a variable to be passed into these API functions.) *(object[])* **blocks** - Blocks from the `usemin.getBlocks` function. *(boolean)* **htmlmin** - Whether to also minify the HTML. *(object)* **config** - Configuration object for UglifyJS, cleanCSS and HTML minifier. #### Returns: *(string)* The content of the final HTML file ### Example HTML #### Blocks Blocks are expressed as: ```html <!-- build:<pipelineId>(alternate search path) <path> --> ... HTML Markup, list of script / link tags. <!-- endbuild --> ``` - **pipelineId**: pipeline id for options or remove to remove a section - **alternate search path**: (optional) By default the input files are relative to the treated file. Alternate search path allows one to change that - **path**: the file path of the optimized file, the target output ```html <!-- build:css css/main.js --> <link rel="stylesheet" href="css/main.css"> <link rel="stylesheet" href="css/modules.css"> <!-- endbuild --> <!-- build:js js/main.js --> <script src="js/app.js"></script> <script src="js/controllers.js"></script> <!-- endbuild --> <!-- build:js js/main.js --> <script defer async src="js/app.js"></script> <script defer async src="js/controllers.js"></script> <!-- endbuild --> <!-- build:remove --> <script src="js/app.js"></script> <script src="js/controllers.js"></script> <!-- endbuild --> <script>document.write('<script src="http://' + (location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1"></' + 'script>')</script> ``` Running the command with `--rmlr true` will output: ``` <link rel="stylesheet" href="css/main.js"> <script src="js/main.js"></script> <script defer async src="js/main.js"></script> ``` #### Alternate search path ```html <!-- build:js(js) js/main.js --> <script defer async src="app.js"></script> <script defer async src="controllers.js"></script> <!-- endbuild --> <!-- build:js(js,.tmp) js/main.js --> <script defer async src="app.js"></script> <script defer async src="controllers.js"></script> <!-- endbuild --> ``` ### Config file Please check the relevant documentations for the available options: [UglifyJS](https://github.com/mishoo/UglifyJS2), [CleanCSS](https://github.com/jakubpawlowicz/clean-css) and [HTML minifier](https://github.com/kangax/html-minifier). ```JavaScript module.exports = { uglifyjs: { // ... UglifyJS API options }, cleancss: { // ... CleanCSS API options }, htmlminifier: { // ... HTML minifier API options } } ``` ## License [MIT license](http://opensource.org/licenses/MIT.php)