【问题标题】:Sass-loader error 'options has an unknown property 'indentedSyntax'' when upgrading Vuetify from 1.5 to 2将 Vuetify 从 1.5 升级到 2 时,Sass-loader 错误 'options has an unknown property 'indentedSyntax''
【发布时间】:2019-10-04 08:34:16
【问题描述】:

我正在将我的 Vue CLI 3 项目中的 Vuetify 从版本 1.5 升级到 2。我已按照 these 的说明进行了完整安装。自从升级以来,运行“npm run serve”给我带来了大量的错误,如下所示:

error  in ./node_modules/vuetify/src/components/VGrid/_grid.sass

Module build failed (from ./node_modules/sass-loader/dist/cjs.js):
    ValidationError: Invalid options object. Sass Loader has been initialised using an options object that does not match the API schema.
     - options has an unknown property 'indentedSyntax'. These properties are valid:
       object { implementation?, sassOptions?, prependData?, sourceMap?, webpackImporter? }
        at validate (C:\Users\kristoffer.dahl\Documents\Prosjekter\fridgein\fridgein_fe\node_modules\sass-loader\node_modules\schema-utils\dist\validate.js:50:11)
        at Object.loader (C:\Users\kristoffer.dahl\Documents\Prosjekter\fridgein\fridgein_fe\node_modules\sass-loader\dist\index.js:36:28)

所有错误看起来都一样,除了提到的 Vuetify 组件。

这是我的package.json

{
  "name": "fridgein_fe",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint"
  },
  "dependencies": {
    "@fortawesome/fontawesome-svg-core": "^1.2.22",
    "@fortawesome/free-brands-svg-icons": "^5.10.2",
    "@fortawesome/free-regular-svg-icons": "^5.10.2",
    "@fortawesome/free-solid-svg-icons": "^5.10.2",
    "@fortawesome/vue-fontawesome": "^0.1.7",
    "@vue/cli": "^3.11.0",
    "@vue/cli-shared-utils": "^3.11.0",
    "auth0-js": "^9.11.3",
    "axios": "^0.18.1",
    "dotenv": "^8.1.0",
    "es6-promise": "^4.2.8",
    "jquery": "^3.4.1",
    "js-cookie": "^2.2.1",
    "popper.js": "^1.14.7",
    "register-service-worker": "^1.6.2",
    "sockjs-client": "^1.3.0",
    "vue": "^2.6.10",
    "vue-float-action-button": "^0.4.4",
    "vue-google-charts": "^0.3.2",
    "vue-plugin-load-script": "^1.2.0",
    "vue-router": "^3.0.2",
    "vuetify": "^2.1.0",
    "vuex": "^3.1.1",
    "vuex-persistedstate": "^2.5.4",
    "webstomp-client": "^1.2.6"
  },
  "devDependencies": {
    "@vue/cli-plugin-babel": "^3.4.0",
    "@vue/cli-plugin-eslint": "^3.4.0",
    "@vue/cli-plugin-pwa": "^3.11.0",
    "@vue/cli-service": "^3.5.1",
    "babel-eslint": "^10.0.1",
    "babel-plugin-module-resolver": "^3.2.0",
    "css-loader": "^2.1.1",
    "deepmerge": "^4.0.0",
    "eslint": "^5.0.0",
    "eslint-plugin-vue": "^5.2.3",
    "eslint-plugin-vuetify": "^1.0.0-beta.3",
    "fibers": "^4.0.1",
    "sass": "^1.23.0",
    "sass-loader": "^8.0.0",
    "stylus": "^0.54.5",
    "stylus-loader": "^3.0.1",
    "vue-cli-plugin-vuetify": "^0.5.0",
    "vue-template-compiler": "^2.6.10",
    "vuetify-loader": "^1.3.0",
    "webpack": "^4.41.0"
  },

这是我的vue.config.js

module.exports = {
    css: {
      loaderOptions: {
        sass: {
          data: `@import "~@/sass/main.scss"`
        },
      },
    },
}

我已经检查并尝试了开发人员 Github 页面上相关问题中提出的所有解决方案,但没有任何效果。

有没有其他人遇到过这种情况?

【问题讨论】:

    标签: vue.js sass vuetify.js


    【解决方案1】:

    我遇到了同样的问题,并通过设置降级sass-loader 修复了它

    "sass-loader": "7.3.1",
    

    package.json.

    这是在 Vuetify Discord 上建议的

    【讨论】:

    • 就是这样,谢谢。我之前尝试过 7.0.0,但 7.3.1 成功了。
    • 嗨!您无需降级sass-loader。只需使用新属性prependData 而不是data。检查这个Github Issue
    【解决方案2】:

    实际上,您使用的是 sass-loader 8+,它的选项略有不同。
    尝试使用prependData 而不是data
    检查这个github issue

    module.exports = {
        css: {
          loaderOptions: {
            sass: {
              prependData: `@import "~@/sass/main.scss"`
            }
          }
        }
    }
    
    

    【讨论】:

    • 我需要添加;最后让它像这样工作: prependData: @import "~@/sass/main.scss"; 否则很好的解决方案。
    • 伟大的@Perp。我只是使用字符串模板以防有人添加更多@import
    • 如何使用 nuxt?
    【解决方案3】:

    为使用 10+ 版本的用户提供更新。 prependData 不再有效。但是,您可以使用 additionalData 作为替代品。

    【讨论】:

      【解决方案4】:

      使用 webpack 5.1.3 和 sass-loader 版本 10.0.3,我不得不使用不同的语法(additionalData 而不是 prependData ),如下:

      webpack.config.js

              {
                test: /\.(css|scss|sass|less)$/,
                use: [
                  'style-loader',
                  'css-loader',
                  'sass-loader',
                  {
                    loader: 'sass-loader',
                    options: {
                      sourceMap: true,
                      additionalData: '@import "assets/scss/_variables.scss";'
                      },
                    },
                  },
                ],
              },
      
      

      请记住,语法需要路径中的双引号和单引号末尾之前的分号,就像您正在编写普通的 scss 文件一样。

      示例:

      '@import "path/_file.scss";' 
      

      如果您需要导入多个文件,您可以使用模板字符串符号 (``),如下所示:

              {
                test: /\.(css|scss|sass|less)$/,
                use: [
                  ...
                  {
                    ...
                    options: {
                      sourceMap: true,
                      additionalData: `@import "assets/scss/_variables.scss";
                                       @import "assets/scss/_mixins.scss";
                                       @import "assets/scss/_misc.scss";`
                      },
                    },
                  },
                ],
              },
      
      

      您还可以利用模板字符串,如下所示:

      `@import "${path.resolve(APP_DIR, '/assets/scss/')}/_variables.scss";`
      

      请注意:我尝试了这种方法来减小包大小,结果很糟糕,因为当你开始看到 webpack 实际在做什么时,你返回到基本的 import作为 sass-loader 的主组件中所有需要的样式实际上会在多个组件中添加您在附加数据中通知的样式。在我的情况下,捆绑包的大小是原始大小的 3 倍。

      干杯

      【讨论】:

        【解决方案5】:

        如果你使用NUXT你应该这样配置:

        //nuxt.config.js
        loaders: {
          less: {
            lessOptions: {
              javascriptEnabled: true,
              modifyVars: {
                'primary-color': '#5c6ac4',
                'layout-body-background': '#fff'
              }
            }
          }
        }
        

        【讨论】:

          猜你喜欢
          • 2020-03-25
          • 2019-09-16
          • 1970-01-01
          • 2020-06-26
          • 1970-01-01
          • 2020-12-07
          • 2016-05-16
          • 2017-04-10
          • 1970-01-01
          相关资源
          最近更新 更多