是否可以在 Vuex(Nuxt) 中的 SASS 和 Javascript 之间共享变量?

Posted

技术标签:

【中文标题】是否可以在 Vuex(Nuxt) 中的 SASS 和 Javascript 之间共享变量?【英文标题】:Is it possible to share variable between SASS and Javascript in Vuex(Nuxt)? 【发布时间】:2019-12-24 20:01:55 【问题描述】:

如题。我使用 Vue、Vuex(Nuxt),我们还使用以下方式共享所有 mixins 和 sass 变量: @nuxtjs/style-resources": "^1.0.0"

哪个是"nuxt-sass-resources-loader": "^2.0.5"的更新版本

我知道我可以使用 Webpack,例如 here 所以我的问题是 - 是否可以以类似的方式进行操作以及如何配置它?我应该安装什么以及如何将其添加到我的 nuxt.config.js?

编辑: 我还找到了that article,但对我来说它不起作用。

【问题讨论】:

vue-loader.vuejs.org/guide/css-modules.html#usage @Aldarund 我不想模块化我的 css。有时我们使用外部库,我们需要添加一些样式作为 js 参数。这就是为什么我想与 js 共享 sass 变量。 所以在 js 中使用 css vars 的方式是使用 css 模块。你链接的文章是为了反应。最终它仍然使用 css 模块 我也对这个问题感兴趣。我看到的方法是挂钩 nuxt 构建并使用所有 sass 变量编写 json 文件。我目前正在尝试这样做,但缺少一种获取所有 sass 变量的方法......我正在努力使用 webpack:/ 我正在寻找更好的方法。我有所有的 mixins,样式在组件之间共享,我只想访问不仅在样式内部而且在组件脚本部分中的变量,所以我什至可以使用 sass 变量内联样式。所以我相信它更像是 Webpack 配置,但我不确定以及如何实现这一点。 @ManUtopiK 请添加 +1 以获得更好的 SEO 【参考方案1】:

简短回答:是的。

SASS 提供了导出变量的选项,您可以将其作为模块导入并像任何其他对象一样使用。带有 sass-loader 和 node-sass 的 Webpack 处理导入。

例子:

// in assets/scss/variables.scss

$white-color: #fcf5ed;

// the :export directive is the magic sauce for webpack
:export 
  whitecolor: $white-color;


// in store.js

import Styles from '~/assets/scss/variables.scss'

export const state = () => (
  styles: ...Styles
)

// in component
...
computed: 
  styles() 
    return this.$store.state.styles;
  

更长的答案:您也可以对所有内容都使用 css 变量。

例如

// in assets/scss/variables.scss

$white-color: #fcf5ed;

:root 
  --whitecolor: $white-color;


// in component
...
mounted() 
  this.$el.style.color = 'var(--whitecolor)';


<style>
.component 
  color: var(--whitecolor);

</style>

【讨论】:

以上是关于是否可以在 Vuex(Nuxt) 中的 SASS 和 Javascript 之间共享变量?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 nuxt.config.js 或通过定义 sass 变量来更改主题默认文本颜色?

带有 Nuxt 的 Vuex 中的项目是不是被爬取?

我可以使用 Nuxt Apollo 本地状态来完全替换 Vuex 吗?

将 json 数据作为 .scss 文件中的 sass 变量导入 Nuxt

在 Vuex/Nuxt 中绑定选择表单

如何用 Nuxt 控制 Vuex 的执行顺序