Angular 5中向组件导入SASS混合器时的函数调用失效问题
我之前也碰到过类似Angular + Sass的坑,这问题本质是组件SCSS的编译上下文和主style.scss是完全隔离的,给你两种清晰的解决思路:
问题根源
你在主style.scss里导入了变量、函数和混合器,但这只对主样式文件本身生效。Angular的每个组件SCSS都是独立编译的,默认不会继承主样式的导入上下文。所以当你只在组件里导入混合器文件时,混合器依赖的函数并没有被加载到当前组件的编译环境中,自然就无法生效。
解决方案1:手动导入所有依赖文件(快速临时解决)
在需要使用混合器的组件SCSS文件里,把所有依赖的抽象文件都导入,不要只导混合器:
// 组件的xxx.component.scss @import '~sass/abstracts/variables'; @import '~sass/abstracts/functions'; @import '~sass/abstracts/mixins';
这样混合器调用的函数就存在于当前编译上下文里了,就能正常工作。
解决方案2:配置全局自动导入(推荐,一劳永逸)
Angular 5可以通过.angular-cli.json配置让所有组件SCSS自动导入这些抽象文件,不用每次手动写@import:
- 打开项目根目录的
.angular-cli.json文件 - 找到
apps数组里你的应用配置项,添加stylePreprocessorOptions:
"apps": [ { // 其他已有的配置(比如root、outDir等) "stylePreprocessorOptions": { "includePaths": [ "./src/sass/abstracts" // 替换成你抽象文件所在的实际路径 ], "import": [ "variables.scss", "functions.scss", "mixins.scss" ] } } ]
- 保存配置后,重启Angular开发服务器(配置修改需要重启才会生效)
之后你在任何组件的SCSS里,直接用变量、调用混合器就行,完全不用手动导入这些抽象文件了。
另外要注意:如果你的_mixins.scss内部没有导入_functions.scss,那单独导入mixins肯定会报错,但用全局导入的话,因为我们配置了先导入functions再导入mixins,所以依赖关系是正常的。
内容的提问来源于stack exchange,提问作者user5971808
相关产品推荐
相关产品推荐

