SASS/SCSS全局变量及样式在webpack项目应用,vue-cli的配置如何?
Author:zhoulujun Date:
我们习惯上偏向于sass写样式。sass的全局变量,在react和在vue中,不可能每个文件里面写一个。所以需要全局全局样式与全局变量的问题。
sass-loader配置
查看sass-loader文档:
https://www.npmjs.com/package/sass-loader
https://github.com/webpack-contrib/sass-loader#additionaldata
Name | Type | Default | Description |
---|---|---|---|
implementation | {Object} | sass | Setup Sass implementation to use. |
sassOptions | {Object|Function} | defaults values for Sass implementation | Options for Sass. |
sourceMap | {Boolean} | compiler.devtool | Enables/Disables generation of source maps. |
additionalData | {String|Function} | undefined | Prepends/Appends Sass /SCSS code before the actual entry file. |
webpackImporter | {Boolean} | true | Enables/Disables the default Webpack importer. |
其中, additionalData,就可以配置全局变量
全局SASS/SCSS变量在Vue项目中应用解决方案
vue-cli配置sass全局变量
首先查看官方文档:https://cli.vuejs.org/zh/guide/css.html#向预处理器-loader-传递选项
样例配置如下
module.exports = {
css: {
loaderOptions: {
// 给 sass-loader 传递选项
sass: {
// @/ 是 src/ 的别名
// 所以这里假设你有 `src/variables.sass` 这个文件
// 注意:在 sass-loader v8 中,这个选项名是 "prependData"
additionalData: `@import "~@/variables.sass"`
},
// 默认情况下 `sass` 选项会同时对 `sass` 和 `scss` 语法同时生效
// 因为 `scss` 语法在内部也是由 sass-loader 处理的
// 但是在配置 `prependData` 选项的时候
// `scss` 语法会要求语句结尾必须有分号,`sass` 则要求必须没有分号
// 在这种情况下,我们可以使用 `scss` 选项,对 `scss` 语法进行单独配置
scss: {
additionalData: `@import "~@/variables.scss";`
},
}
}}
但是,这个配置,陪下下来,并不认。谷歌找了下,貌似是把additionalData 修改为data
module.exports = {
css: {
loaderOptions: {
sass: {
data: `@import "@/styles/_variables.scss";`
}
}
}
};
这个会报错
ValidationError: Invalid options object. Sass Loader has been initialized using an options object that does not match the API schema. - options has an unknown property 'data'. These properties are valid:
谷歌再插了下
将data改成prependData
// 旧
data: `@import "@/assets/scss/_variable.scss";`
// 新
prependData: `@import "@/assets/scss/_variable.scss";`
坑呀。这个还可以引入全局样式
Vue-cli如何配置可以导入全局样式,并且在head标签中不重复引入?
css: {
loaderOptions: {
// 默认情况下 `sass` 选项会同时对 `sass` 和 `scss` 语法同时生效
// 因为 `scss` 语法在内部也是由 sass-loader 处理的
// 但是在配置 `prependData` 选项的时候
// `scss` 语法会要求语句结尾必须有分号,`sass` 则要求必须没有分号
// 在这种情况下,我们可以使用 `scss` 选项,对 `scss` 语法进行单独配置
sass: {
prependData: `
//变量
@import "./src/assets/css/variable.scss";
//混入
@import "./src/assets/css/mixin.scss";
//全局样式重复引入了了
@import "./src/assets/css/base.scss";
`
}
}
这样就可以解决了
转载本站文章《SASS/SCSS全局变量及样式在webpack项目应用,vue-cli的配置如何?》,
请注明出处:https://www.zhoulujun.cn/html/webfront/style/sass/2020_0903_8555.html