代码之家  ›  专栏  ›  技术社区  ›  geochanto

webpack-缩小从scss编译的css

  •  0
  • geochanto  · 技术社区  · 6 年前

    开发一个WordPress站点并使用Webpack捆绑资产。

    我有一个设置,在这里我将scss编译成css等等。我想缩小输出CSS并删除注释。我试图添加 优化CSS资产Webpack插件 并对其进行配置 as example suggests ,但它不起作用(没有错误)…

    那么,我如何修改这个Webpack配置,使输出(1)去掉注释,(2)最小化?

    webpack.config.js版本:

    const path = require("path");
    const config = require('./config.js');
    const BrowserSyncPlugin = require('browser-sync-webpack-plugin');
    const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
    
    module.exports = {
      mode: 'production',
      entry: ["./src/app.js", "./src/scss/style.scss"],
      output: {
        path: path.resolve(__dirname, "wp-content/themes/ezdigital"),
        filename: "js/[name].js"
      },
      module: {
        rules: [
          {
            test: /\.scss$/,
            use: [
              {
                loader: "file-loader",
                options: {
                  name: "[name].css"
                }
              },
              {
                loader: "extract-loader"
              },
              {
                loader: "css-loader?-url"
              },
              {
                loader: "postcss-loader"
              },
              {
                loader: "sass-loader"
              }
            ]
          },
          {
            test: /\.js$/,
            exclude: /(node_modules)/,
            use: {
              loader: "babel-loader",
              options: {
                presets: ["env"]
              }
            }
          },
          {
            test: /\.(png|svg|jpg|gif)$/,
            use: ["file-loader"]
          }
        ]
      },
      //remove comments from JS files
      optimization: {
        minimizer: [
          new UglifyJsPlugin({
            uglifyOptions: {
              output: {
                comments: false,
              },
            },
          }),
        ],
      },
      plugins: [
        new BrowserSyncPlugin( {
                proxy: config.url,
                files: [
                    '**/*.php'
                ],
                reloadDelay: 0
            }
      )
    ]
    
    };
    

    其他posts.config.js:

    module.exports = {
        plugins: {
            'autoprefixer': {}
        }
    }
    

    Package.json:

    {
      "name": "EZTheme",
      "version": "1.0.0",
      "description": "EZ Theme",
      "main": "index.js",
      "scripts": {
        "test": "test",
        "build": "webpack",
        "start": "webpack --watch",
        "serve": "webpack-dev-server --open"
      },
      "repository": {
        "type": "git",
        "url": ""
      },
      "author": "",
      "license": "ISC",
      "bugs": {
        "url": ""
      },
      "homepage": ""
      "devDependencies": {
        "@fortawesome/fontawesome-free": "^5.6.3",
        "autoprefixer": "^9.3.1",
        "babel-core": "^6.26.3",
        "babel-loader": "^7.1.5",
        "babel-preset-env": "^1.7.0",
        "browser-sync-webpack-plugin": "^2.2.2",
        "css-loader": "^1.0.1",
        "exports-loader": "^0.7.0",
        "extract-loader": "^3.1.0",
        "extract-text-webpack-plugin": "^4.0.0-alpha.0",
        "file-loader": "^2.0.0",
        "jquery": "^3.3.1",
        "node-sass": "^4.11.0",
        "optimize-css-assets-webpack-plugin": "^5.0.1",
        "popper.js": "^1.14.6",
        "postcss-cli": "^6.0.1",
        "postcss-loader": "^3.0.0",
        "sass-loader": "^7.1.0",
        "style-loader": "^0.23.1",
        "uglifyjs-webpack-plugin": "^2.1.1",
        "webpack": "^4.28.2",
        "webpack-cli": "^3.1.2",
        "webpack-dev-server": "^3.1.14"
      },
      "dependencies": {
        "bootstrap": "^4.1.3"
      }
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   geochanto    6 年前

    结果发现问题是我想用 提取文本Webpack插件 它不适用于Webpack4。

    相反,我改为 迷你CSS提取插件 随着 优化CSS资产Webpack插件 .

    我的新webpack.config.js文件:

    const path = require("path");
    const config = require('./config.js');
    const BrowserSyncPlugin = require('browser-sync-webpack-plugin');
    const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
    var OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
    const MiniCssExtractPlugin = require("mini-css-extract-plugin");
    
    module.exports = {
      mode: 'production',
      entry: ["./src/app.js", "./src/scss/style.scss"],
      output: {
        path: path.resolve(__dirname, "wp-content/themes/ezdigital"),
        filename: "js/[name].js"
      },
      module: {
        rules: [
          {
            test: /\.scss$/,
            use: [
              {
                loader: "file-loader",
                options: {
                  name: "[name].css"
                }
              },
              {
                loader: "extract-loader"
              },
              {
                loader: "css-loader?-url"
              },
              {
                loader: "postcss-loader"
              },
              {
                loader: "sass-loader"
              }
            ]
          },
          {
            test: /\.js$/,
            exclude: /(node_modules)/,
            use: {
              loader: "babel-loader",
              options: {
                presets: ["env"]
              }
            }
          },
          {
            test: /\.(png|svg|jpg|gif)$/,
            use: ["file-loader"]
          }
        ]
      },
      //remove comments from JS files
      optimization: {
        minimizer: [
          new UglifyJsPlugin({
            uglifyOptions: {
              output: {
                comments: false,
              },
            },
          }),
          new OptimizeCSSAssetsPlugin({
            cssProcessorPluginOptions: {
              preset: ['default', { discardComments: { removeAll: true } }],
            }
          })
        ],
      },
      plugins: [
      new MiniCssExtractPlugin({
        filename: "[name].css"
      }),
        new BrowserSyncPlugin( {
                proxy: config.url,
                files: [
                    '**/*.php'
                ],
                reloadDelay: 0
            }
      )
    ]
    
    };