【问题标题】:How to fix Module build failed from postcss-loader?如何从 postcss-loader 修复模块构建失败?
【发布时间】:2022-08-07 00:38:56
【问题描述】:

当我通过 angular-cli 使用自定义 webpack 打包时,我遇到了如下所示的问题:

我的 package.json 如下:

  \"dependencies\": {
    \"@angular/animations\": \"13.2.4\",
    \"@angular/common\": \"13.2.4\",
    \"@angular/compiler\": \"13.2.4\",
    \"@angular/core\": \"13.2.4\",
    \"@angular/forms\": \"13.2.4\",
    \"@angular/localize\": \"^13.2.4\",
    \"@angular/platform-browser\": \"13.2.4\",
    \"@angular/router\": \"13.2.4\",
    \"@auth0/angular-jwt\": \"^5.0.2\",
    \"@ng-bootstrap/ng-bootstrap\": \"^11.0.0\",
    \"@types/lodash\": \"^4.14.175\",
    \"big-integer\": \"^1.6.50\",
    \"bootstrap\": \"4.5.2\",
    \"buffer\": \"^6.0.3\",
    \"core-js\": \"2.6.9\",
    \"crc-32\": \"^1.2.0\",
    \"crypto-browserify\": \"^3.12.0\",
    \"file-saver\": \"^2.0.5\",
    \"jquery\": \"3.6.0\",
    \"jquery-ui-dist\": \"1.12.1\",
    \"jssha\": \"3.1.2\",
    \"lodash\": \"^4.17.21\",
    \"popper.js\": \"1.16.1\",
    \"resize-observer-polyfill\": \"^1.5.1\",
    \"rxjs\": \"~6.6.7\",
    \"snappyjs\": \"^0.6.0\",
    \"style-loader\": \"^3.3.1\",
    \"tslib\": \"^2.0.0\",
    \"webpack\": \"^5.67.0\",
    \"zone.js\": \"~0.11.4\"
  },
  \"devDependencies\": {
    \"@angular-builders/custom-webpack\": \"^13.1.0\",
    \"@angular-devkit/build-angular\": \"13.2.5\",
    \"@angular-devkit/core\": \"~13.2.5\",
    \"@angular/cli\": \"13.2.5\",
    \"@angular/compiler-cli\": \"~13.2.4\",
    \"@angular/language-service\": \"~13.2.4\",
    \"@angular/platform-browser-dynamic\": \"~13.2.4\",
    \"@babel/core\": \"^7.12.10\",
    \"@babel/preset-env\": \"^7.12.11\",
    \"@ngtools/webpack\": \"^13.2.5\",
    \"@types/angular\": \"^1.6.57\",
    \"@types/bootstrap\": \"^4.5.0\",
    \"@types/chrome-apps\": \"0.0.13\",
    \"@types/file-saver\": \"^2.0.1\",
    \"@types/jasmine\": \"^3.6.5\",
    \"@types/jquery\": \"^3.5.1\",
    \"@types/jqueryui\": \"^1.12.10\",
    \"@types/node\": \"14.0.4\",
    \"@types/w3c-web-usb\": \"^1.0.4\",
    \"@typescript-eslint/eslint-plugin\": \"^5.14.0\",
    \"@typescript-eslint/parser\": \"^5.14.0\",
    \"babel-loader\": \"^8.2.2\",
    \"base-href-webpack-plugin\": \"^3.0.0\",
    \"bower\": \"1.8.8\",
    \"bower-art-resolver\": \"^2.0.0\",
    \"clean-webpack-plugin\": \"^3.0.0\",
    \"copy-dir\": \"^0.3.0\",
    \"copy-webpack-plugin\": \"^10.2.4\",
    \"cross-env\": \"^7.0.3\",
    \"css-loader\": \"^3.6.0\",
    \"css-to-string-loader\": \"^0.1.3\",
    \"dts-bundle\": \"^0.7.3\",
    \"eslint\": \"^8.10.0\",
    \"eslint-config-google\": \"^0.14.0\",
    \"eslint-webpack-plugin\": \"^3.1.1\",
    \"exports-loader\": \"^0.6.4\",
    \"expose-loader\": \"^3.0.0\",
    \"extend\": \"^3.0.2\",
    \"file-loader\": \"^5.0.2\",
    \"gettext-parser\": \"1.1.2\",
    \"html-loader\": \"^0.5.1\",
    \"html-webpack-plugin\": \"^5.5.0\",
    \"http-rewrite-middleware\": \"0.1.6\",
    \"imports-loader\": \"^0.7.1\",
    \"jasmine-core\": \"^3.7.1\",
    \"jasmine-spec-reporter\": \"~5.0.0\",
    \"karma\": \"^6.3.16\",
    \"karma-chrome-launcher\": \"~3.1.0\",
    \"karma-coverage\": \"~2.0.3\",
    \"karma-jasmine\": \"~4.0.0\",
    \"karma-jasmine-html-reporter\": \"^1.5.4\",
    \"karma-sabarivka-reporter\": \"^3.2.5\",
    \"less\": \"^4.1.0\",
    \"less-loader\": \"^6.2.0\",
    \"lint-staged\": \"^12.3.4\",
    \"mini-css-extract-plugin\": \"^2.5.3\",
    \"ng-mocks\": \"^11.10.1\",
    \"null-loader\": \"^0.1.1\",
    \"postcss-loader\": \"3.0.0\",
    \"prettier\": \"^1.16.4\",
    \"raw-loader\": \"0.5.1\",
    \"script-loader\": \"^0.7.0\",
    \"shelljs\": \"^0.8.5\",
    \"string-replace-loader\": \"^3.0.0\",
    \"type-check\": \"^0.4.0\",
    \"typedoc\": \"^0.22.12\",
    \"typescript\": \"^4.3.5\",
    \"url-loader\": \"^3.0.0\",
    \"webpack-cli\": \"^4.9.2\",
    \"webpack-crx\": \"^1.0.7\",
    \"webpack-dev-middleware\": \"^3.7.2\",
    \"webpack-dev-server\": \"^4.7.4\"
  }

我通过\'@angular-builders/custom-webpack\'来使用webpack自定义打包:

\"build\": {
  \"builder\":\"@angular-builders/custom-webpack:browser\",
  \"options\": {
    \"customWebpackConfig\": {
      \"path\": \"html5-access.webpack-config.js\",
      \"replaceDuplicatePlugins\": true
    },
    \"outputPath\": \"target/web-build/webclient\",
    \"index\": \"src/main/webapp/webclient/chrome-client/index.html\",
    \"main\": \"src/main/webapp/webclient/chrome-client/resources/main.js\",
    \"polyfills\": \"src/main/webapp/webclient/polyfills.ts\",
    \"tsConfig\": \"tsconfig.app.json\"
  }
}

并且我已经在webpack中配置了css打包规则:

   module: {
     rules: [
        {
           test: /\\.css$/,
           use: [
              \"style-loader\",
              \"css-loader\",
              \"postcss-loader\",
           ]
        }
     ]
  },
  resolve: {
     alias: {
        WMKS: webmks,
        webmksCss:  webmksCss,
        fileSaver: fileSaver,
        popperJs: popperJs,
        jquery: jquery,
        \"jquery-ui\": jqueryui,
        jqueryuiCss: jqueryuiCss,
        bootstrapJS: bootstrapJS,
        bootstrapCss: bootstrapCss
     },
     extensions: [\".ts\", \".js\"]
  }

其中 \'webmks\' 和 \'webmksCss\' 来自根目录之外的其他文件,其他的是来自 node_moudule 的调用。

但这不是问题,我试过降级\'postcss-loader\'或重新安装node_moudle,但仍然报同样的错误。

为什么会出现这个问题?我怎么解决这个问题?

  • 似乎 postcss-loader 在 style-loader 之后由 Angular cli 触发

标签: webpack angular-cli postcss-loader


【解决方案1】:

extra-webpack.config.js 中的测试表达式必须与 angular cli webpack 配置中的表达式完全匹配,这些配置可以在 node_modules@angular-devkit\build-angular\src\webpack\configs 中找到。 因此,对于 css,正确的测试表达式是 /\.(?:css)$/inew RegExp('\\.(?:css)$', 'i'),所有其他都不起作用。 我还使用以下 angular.json 来覆盖模块规则:

    "customWebpackConfig": {
        "path": "./extra-webpack.config.js",
        //"replaceDuplicatePlugins": true
        "mergeRules": {
            "module": {
                //"parser": "replace",
                "rules": {
                    "test": "match",
                    //"resourceQuery": "match",
                    "loader": "replace",
                    "use": "replace",
                    "type": "replace"
                }
            }
        }
    }

【讨论】:

    猜你喜欢
    • 2020-11-26
    • 2021-02-17
    • 2018-02-18
    • 2019-09-29
    • 2019-12-15
    • 2021-07-15
    • 2021-03-20
    相关资源
    最近更新 更多