我在同一个问题上挣扎了一段时间。但是有一个非常简单的解决方法。此功能来自 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
}
}
in build/utils.js
file we find the cssLoaders()
method which returns:
....
return {
css: generateLoaders(),
postcss: generateLoaders(),
less: generateLoaders('less'),
sass: generateLoaders('sass', { indentedSyntax: true }),
scss: generateLoaders('sass'),
stylus: generateLoaders('stylus'),
styl: generateLoaders('stylus')
}
You simply need to update the above code with updated scss
configuration like this:
...
{
...
scss: generateLoaders(['css', 'sass?data=@import"~assets/scss/main";']),
...
}
...
Thus, the variables/mixins written in src/assets/scss/main.scss
file will be available across all your components.