如何将 PurgeCSS 与 Angular CLI 项目集成

Ton*_*nio 12 webpack angular-cli angular css-purge

我有一个使用 Angular CLI 创建的 Angular 项目,所以我有 angular.json 文件用于配置构建。

我想集成 PurgeCSS,因为它似乎是减少 CSS 包大小的好工具。

PurgeCSS 网站上,他们解释了如何与 Webpack 集成。我找到了一个教程,解释了如何添加自定义 webpack 与 Angular CLI 的集成

有没有人有 PurgeCSS 与 Angular CLI 项目集成的成功例子?

小智 25

还有另一种更符合 Angular CLI 和 Webpack 配置的方式:

你需要安装

npm install -D @angular-builders/custom-webpack postcss-scss @fullhuman/postcss-purgecss
Run Code Online (Sandbox Code Playgroud)

然后创建一个webpack.config.js配置文件:

const purgecss = require('@fullhuman/postcss-purgecss')

module.exports = {
  module: {
    rules: [
      {
        test: /\.scss$/,
        loader: 'postcss-loader',
        options: {
          ident: 'postcss',
          syntax: 'postcss-scss',
          plugins: () => [
            require('postcss-import'),
            require('autoprefixer'),
            purgecss({
              content: ['./**/*.html'],
              // Example to let PurgeCss know how to exclude cdk and mat prefixes if your using Angular CDK and Angular Material
              whitelistPatterns: [/^cdk-|mat-/]
            })
          ]
        }
      }
    ]
  }
};
Run Code Online (Sandbox Code Playgroud)

然后更改您的angular.json文件以使用此新配置:

...
"build": {
  "builder": "@angular-builders/custom-webpack:browser",
  "options": {
    "customWebpackConfig": {
      "path": "webpack.config.js"
    },
    ...
  }
},
...
Run Code Online (Sandbox Code Playgroud)

在捆绑最终应用程序时,请确保仅在生产模式下运行此配置。

希望这可以帮助。

我创建了一个帖子来详细解释如何 - https://medium.com/@joao.a.edmundo/angular-cli-tailwindcss-purgecss-2853ef422c02

  • 如果我已经有一个 `"builder": "@angular-devkit/build-angular:browser",`,我该怎么做?这用于“ng build --prod”命令。我可以以某种方式使用多个构建器吗? (3认同)

小智 15

我创建了这个 bash 脚本来在我的 Angular 应用程序中使用 PurgeCSS。它将我的“styles.css”文件大小从 63kb 减少到只有 3kb!希望它也适用于你。

脚步:

  1. purgecss.sh在您的项目文件夹中创建一个名为的新文件
  2. 将下面的代码插入purgecss.sh文件
  3. ./purgecss.sh从 CLI运行
#!/bin/bash

# run production build
ng build --prod --output-hashing none

# go to the dist/yourProjectName folder
cd ./dist/yourProjectName

# make a new directory named 'css' (you can name it anything)
mkdir css

# run PurgeCSS & make a new '.css' file inside the 'css' directory
purgecss --css ./styles.css --content ./index.html ./*.js --out ./css

# replace the 'dist/yourProjectName/styles.css' file with the 'dist/yourProjectName/css/styles.css' file
mv ./css/styles.css ./styles.css

# delete the previously created 'css' directory
rm -r css
Run Code Online (Sandbox Code Playgroud)


Jan*_*uri 10

这种配置对我的作品,并给我从结果126kb34kb我的styles.[hash].css输出生产版本。

首先,安装这个:

npm install -D @angular-builders/custom-webpack purgecss-webpack-plugin

然后,webpack.config.js在项目的根目录中创建:

const glob = require('glob');
const PurgeCSSPlugin = require('purgecss-webpack-plugin');

module.exports = {
  plugins: [
    new PurgeCSSPlugin({ paths: glob.sync('./src/**/*.html', { nodir: true }) })
  ]
};
Run Code Online (Sandbox Code Playgroud)

并按angular.json如下方式编辑您的配置:

"architect": {
   "build": {
     "builder": "@angular-builders/custom-webpack:browser",
       "options": {
         "customWebpackConfig": {
           "path": "webpack.config.js"
         },
         ...
Run Code Online (Sandbox Code Playgroud)

我没有这个插件的结果:

styles.ca3c7399cc89e60cfa2d.css   | styles        | 128.99 kB
Run Code Online (Sandbox Code Playgroud)

现在有了purgecss-webpack-plugin

styles.ca3c7399cc89e60cfa2d.css   | styles        |  34.46 kB
Run Code Online (Sandbox Code Playgroud)

这太神奇了,首先当我看到这个输出时,我在浏览器中检查了我的应用程序,所有样式都已正确包含:-)。

我认为唯一的缺点可能是,如果在角度组件中有任何内联 html,这可能不起作用。

  • 感谢您提供出色的解决方案。我想补充一下: glob.sync('./src/**/*.html' 选择HTML文件可能会引起bug。因为你可以在TS文件中设置类名。选择所有文件('./src /**/*') 是一个不错的选择。 (3认同)