# laravel-mix-purgecss

> PurgeCSS wrapper for Laravel Mix

Latest version **6.0.0** (published 2020-12-21) · MIT license · 0 weekly downloads

## Install

```sh
npm install laravel-mix-purgecss
pnpm add laravel-mix-purgecss
yarn add laravel-mix-purgecss
bun add laravel-mix-purgecss
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned.

## Facts

| | |
|---|---|
| Version | 6.0.0 |
| Published | 2020-12-21 |
| First published | 2018-01-10 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=12.0.0 |
| Dependencies | 1 |
| Unpacked size | 13.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 858 |
| Author | Sebastian De Deyne |
| Maintainers | spatie |
| Keywords | spatie |

## Links

- npm: https://www.npmjs.com/package/laravel-mix-purgecss
- Repository: https://github.com/spatie/laravel-mix-purgecss
- Issues: https://github.com/spatie/laravel-mix-purgecss/issues
- npm.io page: https://npm.io/package/laravel-mix-purgecss

## Dependencies (1)

- [postcss-purgecss-laravel](https://npm.io/package/postcss-purgecss-laravel.md) ^2.0.0

## Recent versions

- 6.0.0 (latest) — 2020-12-21
- 6.0.0-beta.0 (beta) — 2020-12-08
- 5.0.0 — 2020-05-04
- 5.0.0-rc.3 — 2020-04-27
- 5.0.0-rc.2 — 2020-04-22
- 5.0.0-rc.1 — 2020-02-03
- 5.0.0-alpha.3 — 2020-02-03
- 5.0.0-alpha.2 — 2020-02-03
- 5.0.0-alpha.1 — 2020-02-03
- 4.2.0 — 2019-09-30
- 4.1.0 — 2019-01-18
- 4.0.0 — 2018-12-20
- 3.0.0 — 2018-10-01
- 2.2.3 — 2018-08-02
- 2.2.2 — 2018-07-31
- … 18 more at https://npm.io/package/laravel-mix-purgecss/versions

## README

# PurgeCSS wrapper for Laravel Mix

[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](LICENSE.md)
[![Latest Version on NPM](https://img.shields.io/npm/v/laravel-mix-purgecss.svg?style=flat-square)](https://npmjs.com/package/laravel-mix-purgecss)
[![npm](https://img.shields.io/npm/dt/laravel-mix-purgecss.svg?style=flat-square)](https://www.npmjs.com/package/laravel-mix-purgecss)

This package adds a `purgeCss` option to Laravel Mix, which installs PurgeCSS for you with a set of sensible defaults for Laravel applications.

```js
const mix = require('laravel-mix');
require('laravel-mix-purgecss');

// ...

mix.js('resources/js/app.js', 'public/js')
   .sass('resources/sass/app.scss', 'public/css')
   .purgeCss();
```

## Support us

[<img src="https://github-ads.s3.eu-central-1.amazonaws.com/laravel-mix-purgecss.jpg?t=1" width="419px" />](https://spatie.be/github-ad-click/laravel-mix-purgecss)

We invest a lot of resources into creating [best in class open source packages](https://spatie.be/open-source). You can support us by [buying one of our paid products](https://spatie.be/open-source/support-us).

We highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using. You'll find our address on [our contact page](https://spatie.be/about-us). We publish all received postcards on [our virtual postcard wall](https://spatie.be/open-source/postcards).

## Installation

Before you get started, make sure you're using `laravel-mix` version 5.0.0 or higher.

You can install the package with yarn or npm:

```bash
yarn add laravel-mix-purgecss --dev
```

```bash
npm install laravel-mix-purgecss --save-dev
```

Then install the extension by requiring the module in your Mix configuration.

```js
const mix = require('laravel-mix');
require('laravel-mix-purgecss');

// ...
```

PurgeCSS can be enabled by calling `.purgeCss()` in your Mix chain.

```js
mix.js('resources/js/app.js', 'public/js')
   .sass('resources/sass/app.scss', 'public/css')
   .purgeCss();
```

By default, PurgeCSS only works when building assets for production. You can override this behaviour by specifying the `enabled` option.

```js
mix.js('resources/js/app.js', 'public/js')
   .sass('resources/sass/app.scss', 'public/css')
   .purgeCss({
       enabled: true,
   });
```

### Important notice for `mix.postCss` or `postcss.config.js` users

When you use `mix.postCss()` or a seperate `postcss.config.js` file, Mix _overrides_ all other PostCSS plugins, including the PurgeCSS instance added by this plugin.

To work around this issue, either:

1) Include your PostCSS plugins with `mix.options()`

```diff
  const mix = require('laravel-mix');
  require('laravel-mix-purgecss');

  mix.js('resources/js/app.js', 'public/js')
-     .postCss('resources/sass/app.css', 'public/css', [
-         require('tailwindcss')(),
-     ])
+     .postCss('resources/sass/app.css', 'public/css')
+     .options({
+         postCss: [require('tailwindcss')]
+     })
      .purgeCss();
```

2) Don't use this package, and use [`postcss-purgecss-laravel`](https://github.com/spatie/postcss-purgecss-laravel) instead

```diff
  const mix = require('laravel-mix');
- require('laravel-mix-purgecss');

  mix.js('resources/js/app.js', 'public/js')
      .postCss('resources/sass/app.css', 'public/css', [
          require('tailwindcss')(),
+         require('postcss-purgecss-laravel')({ /* ... */ }),
      ])
      .purgeCss();
```

## PurgeCSS customization

Custom options can be passed when calling PurgeCSS if necessary. Visit PurgeCSS' [docs](https://purgecss.com/configuration.html#options) to learn more about the available options.

```js
mix.js('resources/js/app.js', 'public/js')
   .sass('resources/sass/app.scss', 'public/css')
   .purgeCss({
       content: [path.join(__dirname, 'vendor/spatie/menu/**/*.php')],
       whitelistPatterns: [/hljs/],
   });
```

Passing options will _override_ the package defaults. If you want to _extend_ the package defaults, wrap them in an `extend` object.

```js
mix.js('resources/js/app.js', 'public/js')
   .sass('resources/sass/app.scss', 'public/css')
   .purgeCss({
       extend: {
           content: [path.join(__dirname, 'vendor/spatie/menu/**/*.php')],
           whitelistPatterns: [/hljs/],
       },
   });
```

This package uses [`postcss-purgecss-laravel`](https://github.com/spatie/postcss-purgecss-laravel) under the hood, which has the following defaults:

```js
const defaultConfig = {
    content: [
        "app/**/*.php",
        "resources/**/*.html",
        "resources/**/*.js",
        "resources/**/*.jsx",
        "resources/**/*.ts",
        "resources/**/*.tsx",
        "resources/**/*.php",
        "resources/**/*.vue",
        "resources/**/*.twig",
    ],
    defaultExtractor: (content) => content.match(/[\w-/.:]+(?<!:)/g) || [],
    whitelistPatterns: [/-active$/, /-enter$/, /-leave-to$/, /show$/],
}
```

### Changelog

Please see [CHANGELOG](CHANGELOG.md) for more information what has changed recently.

## Contributing

Please see [CONTRIBUTING](CONTRIBUTING.md) for details.

### Security

If you discover any security related issues, please email freek@spatie.be instead of using the issue tracker.

## Postcardware

You're free to use this package, but if it makes it to your production environment we highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using.

Our address is: Spatie, Kruikstraat 22, 2018 Antwerp, Belgium.

We publish all received postcards [on our company website](https://spatie.be/en/opensource/postcards).

## Credits

- [Sebastian De Deyne](https://github.com/sebastiandedeyne)
- [CJMAXiK](https://github.com/cjmaxik)
- [Aryeh Raber](https://github.com/aryehraber)
- [All Contributors](../../contributors)

## Support us

Spatie is a webdesign agency based in Antwerp, Belgium. You'll find an overview of all our open source projects [on our website](https://spatie.be/opensource).

Does your business depend on our contributions? Reach out and support us on [Patreon](https://www.patreon.com/spatie).
All pledges will be dedicated to allocating workforce on maintenance and new awesome stuff.

## License

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

---
_Source: https://npm.io/package/laravel-mix-purgecss · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
