All Projects → probablyup → link-media-html-webpack-plugin

probablyup / link-media-html-webpack-plugin

Licence: MIT license
parses CSS filenames to automatically apply media HTML attribute to link elements

Programming Languages

javascript
184084 projects - #8 most used programming language
HTML
75241 projects
CSS
56736 projects

Projects that are alternatives of or similar to link-media-html-webpack-plugin

Prerender Loader
📰 Painless universal pre-rendering for Webpack.
Stars: ✭ 1,908 (+12620%)
Mutual labels:  html-webpack-plugin
Html Webpack Plugin
Simplifies creation of HTML files to serve your webpack bundles
Stars: ✭ 9,942 (+66180%)
Mutual labels:  html-webpack-plugin
webpack-4-react-bootstrap-starter-template
Starter boilerplate template for webpack 4 with React, Bootstrap 4
Stars: ✭ 16 (+6.67%)
Mutual labels:  html-webpack-plugin
nunjucks-loader
Webpack loader for Nunjucks templates
Stars: ✭ 20 (+33.33%)
Mutual labels:  html-webpack-plugin
interpolate-html-plugin
Webpack plugin for interpolating custom variables into index.html
Stars: ✭ 60 (+300%)
Mutual labels:  html-webpack-plugin
html-webpack-partials-plugin
🛠 Easy HTML partials for Webpack without a custom index!
Stars: ✭ 68 (+353.33%)
Mutual labels:  html-webpack-plugin
css-chunks-html-webpack-plugin
Injecting css chunks extracted using extract-css-chunks-webpack-plugin to HTML for html-webpack-plugin
Stars: ✭ 22 (+46.67%)
Mutual labels:  html-webpack-plugin
html-webpack-exclude-assets-plugin
Add the ability to exclude assets based on RegExp patterns
Stars: ✭ 50 (+233.33%)
Mutual labels:  html-webpack-plugin

Link Media HTML Webpack Plugin

Build Status codecov

This is an extension plugin for the webpack plugin html-webpack-plugin.

It automatically adds the media attribute to generated <link> HTML elements, inferred from the CSS filename according to the pattern media_{base64MediaString}:

style.media_KG1pbi13aWR0aDogNzAwcHgpLCBoYW5kaGVsZCBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUp.css

will be injected into the HTML template as:

<link src="styles.media_KG1pbi13aWR0aDogNzAwcHgpLCBoYW5kaGVsZCBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUp.css" rel="stylesheet" media="(min-width: 700px), handheld and (orientation: landscape)" />

This is useful for print stylesheets or desktop/mobile-specific styles that the browser should only load depending on the @media match.

Installation

You must be running webpack on node 4.x or higher

Install the plugin with npm:

$ npm install --save-dev link-media-html-webpack-plugin

Basic Usage

Load the plugin

const LinkMediaHtmlWebpackPlugin = require('link-media-html-webpack-plugin');

and add it to your webpack config as follows:

plugins: [
    new HtmlWebpackPlugin(),
    new LinkMediaHtmlWebpackPlugin(),
]

you'll probably want to use this in conjunction with extract-text-webpack-plugin to split up the loaded assets so the browser can do its thing. Here's a sample webpack 2.x config:

const path = require('path');
const webpack = require('webpack');
const HTMLPlugin = require('html-webpack-plugin');
const LinkMediaHTMLPlugin = require('link-media-html-webpack-plugin');

const ExtractPlugin = require('extract-text-webpack-plugin');

// a utility provided by this plugin for easily forming the requisite filename syntax
const getMediaFilename = require('link-media-html-webpack-plugin/get-media-filename');

const getFilePath = (filename) => path.join(__dirname, 'src', filename);

const mainStyleExtractor = new ExtractPlugin('style.css');
const printStyleExtractor = new ExtractPlugin(getMediaFilename(getFilePath('style.print.css')));

webpack({
    entry: getFilePath('entry.js'),
    module: {
      loaders: [
        {
            test: /print\.css$/,
            use: printStyleExtractor.extract('css-loader'),
        }, {
            test: /\.css$/,
            exclude: /print\.css$/,
            use: mainStyleExtractor.extract('css-loader'),
        },
      ],
    },
    output: {
        path: OUTPUT_DIR,
    },
    plugins: [
        mainStyleExtractor,
        printStyleExtractor,
        new HTMLPlugin({
            minify: {
                collapseWhitespace: true,
            },
        }),
        new LinkMediaHTMLPlugin(),
    ],
});
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].