mirror of
https://github.com/remy/inliner.git
synced 2024-08-16 20:00:35 +03:00
Node utility to inline images, CSS and JavaScript for a web page - useful for mobile sites
When doing a request with the node request module with an URL containing UTF-8 chars, some webservers will fail to find the file. Therefore encodeURI on the url before requesting it. Not sure if this is the best way to test it, but it works with all test cases. Example of page which doesn't inline properly: http://hotpoticeland.com/holsgerdislaug/ which links to the image: http://hotpoticeland.com/wp-content/uploads/Hólsgerðislaug-300x225.jpg |
||
---|---|---|
cli | ||
docs | ||
lib | ||
test | ||
.editorconfig | ||
.gitignore | ||
.jscsrc | ||
.jshintrc | ||
.npmignore | ||
.travis.yml | ||
CODE_OF_CONDUCT.md | ||
CONTRIBUTING.md | ||
MIT-LICENSE.TXT | ||
package.json | ||
README.md |
Inliner
Turns your web page to a single HTML file with everything inlined - perfect for appcache manifests on mobile devices that you want to reduce those http requests.
What it does
- Get a list of all the assets required to drive the page: CSS, JavaScript, images, videos and images used in CSS
- Minify JavaScript (via uglify-js)
- Strips white from CSS
- Base64 encode images and videos
- Puts everything back together as a single HTML file with a simplfied doctype
Installation
Install the inliner
utility via npm:
$ npm install -g inliner
Usage
If you have either installed via npm or put the inliner bin directory in your path, then you can use inliner via the command line as per:
inliner http://remysharp.com
This will output the inlined markup with default options. You can see more options on how to disable compression or how not to base64 encode images using the help:
inliner --help
To use inline inside your own script:
var Inliner = require('inliner');
new Inliner('http://remysharp.com', function (error, html) {
// compressed and inlined HTML page
console.log(html);
});
Or:
var inliner = new Inliner('http://remysharp.com');
inliner.on('progress', function (event) {
console.error(event);
}).on('end', function (html) {
// compressed and inlined HTML page
console.log(html);
});
Once you've inlined the crap out of the page, add the manifest="self.appcache"
to the html
tag and create an empty file called self.appcache (read more).
Support
- Collapses all white space in HTML (except inside
<pre>
elements) - Strips all HTML comments
- Pulls JavaScript and CSS inline to HTML
- Compresses JavaScript via uglify (if not compressed already)
- Converts all images and videos to based64 data urls, inline images, video poster images and CSS images
- Imports all @import rules from CSS (recusively)
- Applies media query rules (for print, tv, etc media types)
- Leaves conditional comments in place
- If JavaScript can't be imported (or is Google Analytics), source is not put inline
Limitations / Caveats
- Whitespace compression might get a little heavy handed - all whitespace is collapsed from
n
spaces to 1 space.
Filing issues & PRs
Please see the contributing for guidelines.