vue 项目 main.js 引入的全局 scss 文件,为什么变量和方法都不可用?

2019-09-12 09:41:23 +08:00
 selfcreditgiving

main.js

import './common/css/base.scss'

base.scss

$testColor: red;

@function getColor() {
  @return red;
}

在别的 vue 里使用 base.scss

<style scoped lang="scss">

/* 这两个都不起作用 */
div {
	background: getColor();
    
}

div {
	background: $testColor;
}




</style>
}

如果直接在 base.scss 中这样写是可以的,说明文件还是全局引入成功了

div {
	background: red;
}
2545 次点击
所在节点    问与答
5 条回复
mrzjd
2019-09-12 09:48:35 +08:00
mcfog
2019-09-12 09:49:03 +08:00
vueloader 在处理 vue 文件的时候并不继承你 main.js 的上下文,而且你用 js 的 import 也一样 sassloader 只会单独处理你的 base,编出 css 后里面的变量和函数已经扔了

你需要在 vue 文件里用 scss 的 @import
selfcreditgiving
2019-09-12 10:04:46 +08:00
@mrzjd @mcfog 谢谢二位大佬 :)明白了,base.scss 会被编译为 css,到 vue 文件那里的时候已经没有 这样的 变量和方法了。如果在 vue 文件中引入 base.scss 的话,就会被合并在一个文件里一起编译,变量和方法也就没问题了。
selfcreditgiving
2019-09-12 10:25:49 +08:00
好像 vue-cli 3.0 以上才有 vue.config.js 。 我看了一下自己的 vue-cli 是 2.9.3, 没有这个文件,这样应该怎么配置呢。vue-cli 官网上可以查看过去版本的文档吗
selfcreditgiving
2019-09-12 10:44:16 +08:00
vue 2.x 在 build/util.js 中引入发现可以

scss: generateLoaders('sass').concat(
{
loader: 'sass-resources-loader',
options: {
resources: path.resolve(__dirname, '../src/common/css/base.scss')
}
}
),

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/600270

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX