Laravel Mix: ValidationError: CSS Loader has been initialized using an options object that does not

Posted

技术标签:

【中文标题】Laravel Mix: ValidationError: CSS Loader has been initialized using an options object that does not match the API schema【英文标题】: 【发布时间】:2021-09-28 20:30:15 【问题描述】:

我最近尝试运行 npm run devnpm run watch,但在 80% 编译后出现错误。我尝试用谷歌搜索它,但没有找到解决方案。以下是我在控制台中遇到的错误。

./resources/sass/frontend/app.scss 中的错误模块构建失败(来自 ./node_modules/mini-css-extract-plugin/dist/loader.js): ModuleBuildError:模块构建失败(来自 ./node_modules/css-loader/dist/cjs.js):验证错误:无效 选项对象。 CSS Loader 已使用选项初始化 与 API 架构不匹配的对象。

options.url 应该是以下之一: boolean |对象过滤器? -> 允许启用/禁用url()/image-set() 函数处理。 -> 阅读更多 https://github.com/webpack-contrib/css-loader#url 详情: options.url 应该是布尔值。 options.url 应该是一个对象: 对象过滤器? 在验证时(E:\Web Projects\project\node_modules\webpack\node_modules\schema-utils\dist\validate.js:105:11) 在 Object.getOptions (E:\Web Projects\project\node_modules\webpack\lib\NormalModule.js:527:19) 在 Object.loader (E:\Web Projects\project\node_modules\css-loader\dist\index.js:31:27) 在 processResult (E:\Web Projects\project\node_modules\webpack\lib\NormalModule.js:701:19) 在 E:\Web Projects\project\node_modules\webpack\lib\NormalModule.js:807:5 在 E:\Web Projects\project\node_modules\loader-runner\lib\LoaderRunner.js:399:11 在 E:\Web Projects\project\node_modules\loader-runner\lib\LoaderRunner.js:251:18

webpack.mix.js

const mix = require('laravel-mix');

mix.setPublicPath('public')
    .setResourceRoot('../')
    .vue()
    .sass('resources/sass/frontend/app.scss', 'css/frontend.css')
    .sass('resources/sass/backend/app.scss', 'css/backend.css')
    .js('resources/js/frontend/app.js', 'js/frontend.js')
    .js([
        'resources/js/backend/before.js',
        'resources/js/backend/app.js',
        'resources/js/backend/after.js'
    ], 'js/backend.js')
    .js('resources/js/global.js', 'js/global.js')
    .js('resources/js/Banners/banner.js', 'js/banner.js')
    .extract([
        // Extract packages from node_modules to vendor.js
        'alpinejs',
        'jquery',
        'bootstrap',
        'popper.js',
        'axios',
        'sweetalert2',
        'lodash'
    ])
    .sourceMaps();

if (mix.inProduction()) 
    mix.version();
 else 
    // Uses inline source-maps on development
    mix.webpackConfig(
        loader: 'url-loader',
        devtool: 'inline-source-map'
    );


Frontend.scssBackend.scss 都没有被编译或混合,并抛出上面给出的错误。当我尝试评论它时,它按预期正常运行,但没有评论它,它没有。我不知道我要去哪里错了。我还尝试运行npm rebuild node-sass,然后再次尝试运行npm run prodnpm run devnpm run watch,但没有成功。

【问题讨论】:

【参考方案1】:

作为一种解决方法,将您的 css-loader 包降级到 5.x 版本。

npm install css-loader@5.2.7 --save-dev

【讨论】:

太棒了!非常感谢这有效,但我不明白为什么以前的css-loader@6.2.0 会造成上述问题?能否请您简要回答一下原因,因为我认为如果是版本更新,可能会有更多人面临这个问题。另外,如果您发现我的问题值得,请投票。再次感谢。 是的,我也想知道,因为我遇到了同样的问题并想了解这一点。 @HardikSisodia 使用github.com/rappasoft/laravel-boilerplate 对我来说类似的问题。必须降级才能使用 Mix。

以上是关于Laravel Mix: ValidationError: CSS Loader has been initialized using an options object that does not 的主要内容,如果未能解决你的问题,请参考以下文章

laravel-mix-purgecss 和 Summernote

在 AWS Serverless 平台上部署 Laravel (laravel-mix) 应用程序

在 Laravel Mix 中使用 extract() 时 Vue 未加载

Laravel,NPM:找不到命令“mix”

Laravel 版本缓存与 Laravel Mix 不工作

使用 laravel mix 设置外部库