将 SASS 个变量导入 Vue 组件
Importing SASS variables into Vue component
我正在使用 Vue、Typescript、Webpack 和 Bulma 构建网页。我让一切正常工作和构建,但我注意到我的一些捆绑包很大(在某些情况下超过 2mb)。经过大量的混淆后,我发现这是因为我将包含 Bulma、Bulma Fluent 和 Material 设计图标的主要 SCCS 文件导入到我的组件中,以便我可以使用变量、混入和扩展一些类。据我了解,@import
只是从导入中复制所有内容,这可以解释我的大量捆绑包。
我的工作代码的近似值:
main.scss
/*Color customizations*/
@import "bulma-fluent/bulma.sass";
@import "buefy/src/scss/buefy";
@import "@mdi/font/scss/materialdesignicons";
/*Some custom classes*/
MyComponent.vue
/*Template and Script here*/
<style scoped lang="scss">
@import "./main.scss";
.floating {
@extend .m-1;
position: fixed;
bottom: 0;
right: 0;
}
@include mobile {
.floating {
max-width: unset;
left: 0;
}
}
</style>
我希望能够从我的 main.scss
中引用 classes/variables/mixins,而不会使我的模块大小膨胀。我考虑过创建一个单独的 variables.sass
文件,但我无法让它工作,而且它没有解决扩展样式的问题。我看到了 this 个问题,但我没有使用 Nuxt。
我怎样才能让它工作?
P.S。在 Webpack/Vue/SASS/SCSS 方面,我有点菜鸟,所以如果我在这里只是愚蠢,我深表歉意。
编辑
最后我将变量拆分到它们自己的文件中并全局导入。它没有解决扩展样式的用例,但我认为这是一个失败的原因。我的代码如下:
Variables.scss
/*Customization here*/
@import "bulma/sass/utilities/functions.sass";
@import "bulma-fluent/src/sass/color/_all.sass";
@import "bulma/sass/utilities/initial-variables.sass";
@import "bulma/sass/utilities/derived-variables.sass";
@import "bulma/sass/utilities/mixins.sass";
Main.scss
@import "./Variables.scss";
@import "bulma-fluent/bulma.sass";
@import "buefy/src/scss/buefy";
@import "@mdi/font/scss/materialdesignicons";
/*Some custom classes*/
webpack.js
/*Other irrelevant configurations*/
{
test: /\.s[ac]ss$/,
use: [
"vue-style-loader",
"css-loader",
{
loader: "sass-loader",
options: {
additionalData: `
@import "./Variables.scss";
`
}
}
]
},
MyComponent.vue
/*Template and Script here*/
<style scoped lang="scss">
.floating {
margin: $size-1;
position: fixed;
bottom: 0;
right: 0;
}
@include mobile {
.floating {
max-width: unset;
left: 0;
}
}
</style>
我使用相同的堆栈。我有包含变量和 bulma mixins 的 variables.scss
文件,并且 variables.scss
文件仅在 main.scss
中导入。
要在不使用 style
部分中的 @import
的情况下使所有组件中的所有变量和 mixins 可用,您应该将 loaderOptions
部分添加到 vue.config.js
文件中。这是我的 vue.config.js
文件:
module.exports = {
css: {
loaderOptions: {
scss: {
prependData: '@import "~@/assets/scss/_variables.scss";'
}
}
}
}
我正在使用 Vue、Typescript、Webpack 和 Bulma 构建网页。我让一切正常工作和构建,但我注意到我的一些捆绑包很大(在某些情况下超过 2mb)。经过大量的混淆后,我发现这是因为我将包含 Bulma、Bulma Fluent 和 Material 设计图标的主要 SCCS 文件导入到我的组件中,以便我可以使用变量、混入和扩展一些类。据我了解,@import
只是从导入中复制所有内容,这可以解释我的大量捆绑包。
我的工作代码的近似值:
main.scss
/*Color customizations*/
@import "bulma-fluent/bulma.sass";
@import "buefy/src/scss/buefy";
@import "@mdi/font/scss/materialdesignicons";
/*Some custom classes*/
MyComponent.vue
/*Template and Script here*/
<style scoped lang="scss">
@import "./main.scss";
.floating {
@extend .m-1;
position: fixed;
bottom: 0;
right: 0;
}
@include mobile {
.floating {
max-width: unset;
left: 0;
}
}
</style>
我希望能够从我的 main.scss
中引用 classes/variables/mixins,而不会使我的模块大小膨胀。我考虑过创建一个单独的 variables.sass
文件,但我无法让它工作,而且它没有解决扩展样式的问题。我看到了 this 个问题,但我没有使用 Nuxt。
我怎样才能让它工作?
P.S。在 Webpack/Vue/SASS/SCSS 方面,我有点菜鸟,所以如果我在这里只是愚蠢,我深表歉意。
编辑
最后我将变量拆分到它们自己的文件中并全局导入。它没有解决扩展样式的用例,但我认为这是一个失败的原因。我的代码如下:
Variables.scss
/*Customization here*/
@import "bulma/sass/utilities/functions.sass";
@import "bulma-fluent/src/sass/color/_all.sass";
@import "bulma/sass/utilities/initial-variables.sass";
@import "bulma/sass/utilities/derived-variables.sass";
@import "bulma/sass/utilities/mixins.sass";
Main.scss
@import "./Variables.scss";
@import "bulma-fluent/bulma.sass";
@import "buefy/src/scss/buefy";
@import "@mdi/font/scss/materialdesignicons";
/*Some custom classes*/
webpack.js
/*Other irrelevant configurations*/
{
test: /\.s[ac]ss$/,
use: [
"vue-style-loader",
"css-loader",
{
loader: "sass-loader",
options: {
additionalData: `
@import "./Variables.scss";
`
}
}
]
},
MyComponent.vue
/*Template and Script here*/
<style scoped lang="scss">
.floating {
margin: $size-1;
position: fixed;
bottom: 0;
right: 0;
}
@include mobile {
.floating {
max-width: unset;
left: 0;
}
}
</style>
我使用相同的堆栈。我有包含变量和 bulma mixins 的 variables.scss
文件,并且 variables.scss
文件仅在 main.scss
中导入。
要在不使用 style
部分中的 @import
的情况下使所有组件中的所有变量和 mixins 可用,您应该将 loaderOptions
部分添加到 vue.config.js
文件中。这是我的 vue.config.js
文件:
module.exports = {
css: {
loaderOptions: {
scss: {
prependData: '@import "~@/assets/scss/_variables.scss";'
}
}
}
}