2.1.0 • Published 3 years ago

less-themes-webpack-plugin v2.1.0

Weekly downloads
8
License
MIT
Repository
github
Last release
3 years ago

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';
ParamTypeDefaultDescription
optionsobject
options.filenamestring"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.themesPathstring"''"The base path to the theme files in options.themes.
options.sourceMapbooleanfalseThis is passed directly into MiniCssExtractPlugin and loaders.
options.skipLoadersbooleanfalseIf true then MiniCssExtractPlugin and loaders won't be added. You must provide them in your webpack config.
options.themesthemeDefDefines 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

NameTypeDefaultDescription
pathstringAppends a directory to the current path. Can be specified at any level.
includestring | Array.<string>Appends another directory to the current path. Can be specified at any level.
isReferencebooleantrueImports files in this chunk as a reference. Applies to all children objects unless overridden by the child.
*themeDefNested theme def. The key name is added to the theme name, dot delimited.
2.1.0

3 years ago

2.0.2

3 years ago

2.0.1

3 years ago

2.0.0

3 years ago

1.5.1

4 years ago

1.5.0

4 years ago

1.4.2

4 years ago

1.4.1

4 years ago

1.4.0

4 years ago

1.3.10

4 years ago

1.3.9

4 years ago

1.3.8

4 years ago

1.3.7

4 years ago

1.3.6

4 years ago

1.3.5

5 years ago

1.3.4

5 years ago

1.3.3

5 years ago

1.3.2

5 years ago

1.3.1

5 years ago

1.3.0

5 years ago

1.2.1

5 years ago

1.2.0

5 years ago

1.1.5

5 years ago

1.1.4

5 years ago

1.1.3

5 years ago

1.1.2

5 years ago

1.1.1

5 years ago

1.1.0

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago