diff --git a/README.md b/README.md index 2062a217..94e8b40f 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,8 @@ -

LESS Loader

+

less-loader

+

Compiles Less to CSS.
Use the css-loader or the raw-loader to turn it into a JS module and the ExtractTextPlugin to extract it into a separate file.

Install

@@ -21,95 +22,81 @@ npm install --save-dev less-loader less ``` -

Usage

+The less-loader requires [less](https://github.com/less/less.js) as [`peerDependency`](https://docs.npmjs.com/files/package.json#peerdependencies). Thus you are able to control the versions accurately. -Use [`less-loader`](https://github.com/webpack/less-loader) in tandem with [css-loader](https://github.com/webpack/css-loader) & [style-loader](https://github.com/webpack/style-loader) to add LESS support for webpack. +

Examples

-Use the loader either via your webpack config, CLI or inline. +Chain the less-loader with the [css-loader](https://github.com/webpack-contrib/css-loader) and the [style-loader](https://github.com/webpack-contrib/style-loader) to immediately apply all styles to the DOM. -### Via webpack config (recommended) - -**webpack.config.js** ```js +// webpack.config.js module.exports = { - module: { - rules: [ - { - test: /\.less$/, - use: [ - 'style-loader', - { loader: 'css-loader', options: { importLoaders: 1 } }, - 'less-loader' - ] - } - ] - } -} -``` - -**In your application** -```js -import css from 'file.less'; -``` - -### CLI - -```bash -webpack --module-bind 'less=style-loader!css-loader!less-loader' -``` - -**In your application** -```js -import css from 'file.less'; -``` - -### Inline - -**In your application** -```js -import css from 'style-loader!css-loader!less-loader!./file.less'; + ... + module: { + rules: [{ + test: /\.less$/, + use: [{ + loader: "style-loader" // creates style nodes from JS strings + }, { + loader: "css-loader" // translates CSS into CommonJS + }, { + loader: "less-loader" // compiles Less to CSS + }] + }] + } +}; ```

Options

-You can pass any LESS specific options to less-loader via loader options or query parameters. - -See the [LESS documentation](http://lesscss.org/usage/#command-line-usage-options) for all available options. LESS translates dash-case to camelCase. Certain options which take values (e.g. `lessc --modify-var="a=b"`) are better handled with the [JSON Syntax](http://webpack.github.io/docs/using-loaders.html#query-parameters) +You can pass any Less specific options to the less-loader via [loader options](https://webpack.js.org/configuration/module/#rule-options-rule-query). See the [Less documentation](http://lesscss.org/usage/#command-line-usage-options) for all available options in dash-case. Since we're passing these options to Less programmatically, you need to pass them in camelCase here. ```js -{ - test: /\.less$/, - use: [ - 'style-loader', - { loader: 'css-loader', options: { importLoaders: 1 } }, - { loader: 'less-loader', options: { strictMath: true, noIeCompat: true } } - ] -} +// webpack.config.js +module.exports = { + ... + module: { + rules: [{ + test: /\.less$/, + use: [{ + loader: "style-loader" + }, { + loader: "css-loader" + }, { + loader: "less-loader", options: { + strictMath: true, + noIeCompat: true + } + }] + }] + } +}; ``` ### Plugins -In order to use [plugins](http://lesscss.org/usage/#plugins), simply set -the `options.lessPlugins`-option on your `webpack.config.js`. +In order to use [plugins](http://lesscss.org/usage/#plugins), simply set the `lessPlugins` option like this: ```js -const CleanCSSPlugin = require('less-plugin-clean-css'); - -{ - test: /\.less$/, - use: [ - 'style-loader', - { loader: 'css-loader', options: { importLoaders: 1 } }, - { - loader: 'less-loader', - options: { lessPlugins: [ new CleanCSSPlugin({ advanced: true }) ] } - } -} +// webpack.config.js +const CleanCSSPlugin = require("less-plugin-clean-css"); + +module.exports = { + ... + { + loader: "less-loader", options: { + lessPlugins: [ + new CleanCSSPlugin({ advanced: true }) + ] + } + }] + ... +}; ``` ### Imports -webpack provides an [advanced mechanism to resolve files](https://webpack.js.org/configuration/resolve/). The less-loader stubs less' `fileLoader` and passes all queries to the webpack resolving engine. Thus you can import your less-modules from `node_modules`. Just prepend them with a `~` which tells webpack to look-up the [`modules`](https://webpack.js.org/configuration/resolve/#resolve-modules) +webpack provides an [advanced mechanism to resolve files](https://webpack.js.org/configuration/resolve/). The less-loader applies a Less plugin that passes all queries to the webpack resolving engine. Thus you can import your less-modules from `node_modules`. Just prepend them with a `~` which tells webpack to look-up the [`modules`](https://webpack.js.org/configuration/resolve/#resolve-modules). ```css @import "~bootstrap/less/bootstrap"; @@ -117,48 +104,36 @@ webpack provides an [advanced mechanism to resolve files](https://webpack.js.org It's important to only prepend it with `~`, because `~/` resolves to the home-directory. webpack needs to distinguish between `bootstrap` and `~bootstrap` because css- and less-files have no special syntax for importing relative files. Writing `@import "file"` is the same as `@import "./file";` -Also please note that for [CSS modules](https://github.com/css-modules/css-modules), relative file paths do not work as expected. Please see [this issue for the explanation](https://github.com/webpack/less-loader/issues/109#issuecomment-253797335). +Also please note that for [CSS modules](https://github.com/css-modules/css-modules), relative file paths do not work as expected. Please see [this issue for the explanation](https://github.com/webpack-contrib/less-loader/issues/109#issuecomment-253797335). -### Sourcemaps +### Source maps -Because of browser limitations, sourcemaps are only available in conjunction with the [extract-text-webpack-plugin](https://github.com/webpack/extract-text-webpack-plugin). Use that plugin to extract the CSS code from the generated JS bundle into a separate file (which improves performance because JS and CSS are loaded in parallel). - -**webpack.config.js** -```js -const ExtractTextPlugin = require('extract-text-webpack-plugin'); +To enable CSS source maps, you'll need to pass the `sourceMap` option to the less-loader *and* the css-loader. Your `webpack.config.js` should look like this: +```javascript module.exports = { - // must be 'source-map' or 'inline-source-map' - devtool: 'source-map', - module: { - rules: [ - { - test: /\.less$/, - use: ExtractTextPlugin.extract( - fallbackLoader: 'style-loader', - loaders: [ - // activate source maps via loader query - { - loader: 'css-loader', - options: { sourceMap: true, importLoaders: 1 } - }, - { - loader: 'less-loader', - options: { sourceMap: true } - } - ] - ) - } - ] - }, - plugins: [ - // extract CSS into separate file - new ExtractTextPlugin('app.bundle.css') - ] -} + ... + devtool: "source-map", // any "source-map"-like devtool is possible + module: { + rules: [{ + test: /\.less$/, + use: [{ + loader: "style-loader" + }, { + loader: "css-loader", options: { + sourceMap: true + } + }, { + loader: "less-loader", options: { + sourceMap: true + } + }] + }] + } +}; ``` -If you want to view the original LESS files inside Chrome and even edit it, [there's a good blog post](https://medium.com/@toolmantim/getting-started-with-css-sourcemaps-and-in-browser-sass-editing-b4daab987fb0). Checkout [test/sourceMap](https://github.com/webpack/less-loader/tree/master/test) for a running example. Make sure to serve the content with an HTTP server. +If you want to edit the original Less files inside Chrome, [there's a good blog post](https://medium.com/@toolmantim/getting-started-with-css-sourcemaps-and-in-browser-sass-editing-b4daab987fb0). The blog post is about Sass but it also works for Less.

Contributing

@@ -187,14 +162,14 @@ The tests are basically just comparing the generated css with a reference css-fi [node]: https://img.shields.io/node/v/less-loader.svg [node-url]: https://nodejs.org -[deps]: https://david-dm.org/webpack/less-loader.svg -[deps-url]: https://david-dm.org/webpack/less-loader +[deps]: https://david-dm.org/webpack-contrib/less-loader.svg +[deps-url]: https://david-dm.org/webpack-contrib/less-loader -[tests]: http://img.shields.io/travis/webpack/less-loader.svg -[tests-url]: https://travis-ci.org/webpack/less-loader +[tests]: http://img.shields.io/travis/webpack-contrib/less-loader.svg +[tests-url]: https://travis-ci.org/webpack-contrib/less-loader -[cover]: https://coveralls.io/repos/github/webpack/less-loader/badge.svg -[cover-url]: https://coveralls.io/github/webpack/less-loader +[cover]: https://coveralls.io/repos/github/webpack-contrib/less-loader/badge.svg +[cover-url]: https://coveralls.io/github/webpack-contrib/less-loader -[chat]: https://badges.gitter.im/webpack/webpack.svg -[chat-url]: https://gitter.im/webpack/webpack +[chat]: https://badges.gitter.im/webpack-contrib/webpack.svg +[chat-url]: https://gitter.im/webpack-contrib/webpack