JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 23
  • Score
    100M100P100Q55783F
  • License MIT

A webpack plugin for generating multiple themed css files from less.

Package Exports

  • less-themes-webpack-plugin
  • less-themes-webpack-plugin/src/Plugin.js

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 (less-themes-webpack-plugin) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Less Themes Webpack Plugin

A webpack plugin for generating multiple themed css files from less.

npm deps size vulnerabilities license


Installation

npm install less-themes-webpack-plugin --save-dev


Compatibility

Requires:

  • webpack 5+
  • node 10+

For webpack 4 use less-themes-webpack-plugin@1.5.1

Since this library uses postcss-loader you must have a postcss config in the root of your project for this plugin to work.

This library has a peer dependency of Less.

This plugin automatically adds its own loader and:

You shouldn't need to install them or reference them in any way in your webpack config.

If you are using html-webpack-plugin, then this plugin will add a reference to the first compiled css theme file in the generated html (in the following example that would be main.light.mobile.min.css).


Usage

In your js files import less like this:

import './stylesForThisFile.less';
Param Type Default Description
[options] object
[options.filename] string "[name].min.css" The output file name. Replaces [name] with a generated name based on the themes option. In the following example you would get four .css files:
• main.light.mobile.min.css
• main.light.desktop.min.css
• main.dark.mobile.min.css
• main.dark.desktop.min.css
[options.themesPath] string "''" The base path to the theme files in options.themes.
[options.sourceMap] boolean false This is passed directly into MiniCssExtractPlugin and loaders.
[options.skipLoaders] boolean false If true then MiniCssExtractPlugin and loaders won't be added. You must provide them in your webpack config.
[options.themes] themeDef Defines which files to import for each different theme. If no themes are defined then a single css file will be produced named 'main.min.css'

Example

// webpack.config.js
const ThemesPlugin = require('less-themes-webpack-plugin');

module.exports = {
   // ...
   plugins: [
        new ThemesPlugin({
            filename: '[name].min.css',
            themesPath: './themes',
            sourceMap: true,
            themes: {
                main: {
                    light: {
                        mobile: [
                            'main/light.less'
                        ],
                        desktop: [
                            'main/light.less',
                            'main/desktop.less'
                        ]
                    },
                    dark: {
                        mobile: [
                            'main/light.less',
                            'main/dark.less'
                        ],
                        desktop: [
                            'main/light.less',
                            'main/dark.less',
                            'main/desktop.less'
                        ]
                    }
                }
            }
        })
   ]
};

// The following will produce the same output:
module.exports = {
   // ...
   plugins: [
        new ThemesPlugin({
            filename: '[name].min.css',
            themesPath: './themes',
            sourceMap: true,
            themes: {
                main: {
                    path: 'main',
                    include: 'light',
                    light: {
                        mobile: [],
                        desktop: 'desktop'
                    },
                    dark: {
                        include: 'dark',
                        mobile: [],
                        desktop: 'desktop'
                    }
                }
            }
        })
   ]
};


themeDef : object | string | Array.<string>

Can handle any amount of nesting. The file extension is not necessary in the file name if the actual file has an extension of .less. File definitions can be a string or an array of strings.

Properties

Name Type Default Description
[path] string Appends a directory to the current path. Can be specified at any level.
[include] string | Array.<string> Appends another directory to the current path. Can be specified at any level.
[isReference] boolean true Imports files in this chunk as a reference. Applies to all children objects unless overridden by the child.
[*] themeDef Nested theme def. The key name is added to the theme name, dot delimited.