sass - vue.js:始终在每个 vue 样式部分加载一个 settings.scss 文件

标签 sass webpack vue.js vue-loader

我发现自己在每个 .vue 文件中重复相同的模式,以便使用变量等:

<style lang="scss">
  @import "../styles/settings.scss";

  .someclass { color: $some-variable; }
</style>

或者如果它嵌套在一个文件夹中,我必须记住要小心路径:

<style lang="scss">
  @import "../../styles/settings.scss";

</style>

有没有办法在我创建的每个 .vue 文件中全局导入 settings.scss 文件?我查看了文档但没有看到它,但也许我错过了它,或者这可能是我需要利用 webpack 来做的事情?

最佳答案

我一直在为同一个问题苦苦挣扎。但是有一个非常简单的修复方法。此功能来自 node-sass 本身。

所以你可以在一个文件中声明你的 scss 全局变量,比如说 globals.scss 其路径是:

/src/scss/globals.scss

现在您可以简单地编辑 vue-loader 配置:

loaders: {
  sass: 'vue-style-loader!css-loader!sass-loader?indentedSyntax=1&data=@import "./src/scss/globals"',
  scss: 'vue-style-loader!css-loader!sass-loader?data=@import "./src/scss/globals";'
}

瞧!您的所有 vue 组件都可以使用 scss 全局变量。希望对您有所帮助!

更新:

vue 的新版本更新了很多设置。所以上述变化在最新的 vue 项目中可能看起来并不微不足道。所以我将简要介绍一下所有内容是如何联系在一起的-

简短版:

找到 build/utils.js ,它包含一个方法(很可能名为 cssLoaders() )。此方法将返回如下对象:

return {
   ...
    sass: generateLoaders('sass', { indentedSyntax: true }),
    scss: generateLoaders('sass'),
   ...
  }

您只需将 scss/sass 特定行更改为如下所示:

 return {
   ...
    sass: generateLoaders('sass', { indentedSyntax: true }),
    scss: generateLoaders(['css', 'sass?data=@import "~assets/styles/app";']),
   ...
  }

长版:

webpack.base.conf.js 包含 vue-loader,它看起来像这样:

    ...    
    {
            test: /\.vue$/,
            loader: 'vue-loader',
            options: vueLoaderConfig
        },
    ...

vueLoaderConfig变量是从vue-loader.conf.js文件中导入的,等于这个对象:

    {
      loaders: utils.cssLoaders( Obj ),  // actual settings coming from cssLoader method of build/utils.js
      transformToRequire: {
       //some key value pairs would be here
      }
    }

build/utils.js 文件中,我们找到 cssLoaders() 方法,它返回: ....

     return {
        css: generateLoaders(),
        postcss: generateLoaders(),
        less: generateLoaders('less'),
        sass: generateLoaders('sass', { indentedSyntax: true }),
        scss: generateLoaders('sass'),
        stylus: generateLoaders('stylus'),
        styl: generateLoaders('stylus')
      }

您只需要使用更新的 scss 配置更新上面的代码,如下所示:

       ...
        {
           ...
            scss: generateLoaders(['css', 'sass?data=@import"~assets/scss/main";']),
           ...
         }
        ...

因此,在 src/assets/scss/main.scss 文件中编写的变量/mixins 将在所有组件中可用。

关于sass - vue.js:始终在每个 vue 样式部分加载一个 settings.scss 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38928380/

相关文章:

ruby-on-rails-4 - 如何在 rails 4 中启用 Sass 的 Source Maps?

javascript - 如何在 Webpack 项目中导入 XML 编码的 mxGraph?

javascript - 使用 webpack 和 ES6 设置 React Js

webpack - 提高 webpack 的 CSS 编译性能

javascript - 覆盖 Vue.js 中的 mixins 函数

javascript - 命名空间混合 Vuejs

ruby-on-rails - ruby sass-rails gem 和 heroku 推送错误

javascript - 有没有比这更好的在 Vue 中动态添加类的方法?

css - 制作跨浏览器的css动画

javascript - webpack-dev-server npm run dev 抛出 TypeError : Cannot set property 'port' of undefined