HBuilderX UniApp 中注入JS變量到Sass、Scss

APP 這個(gè)方法目前又報(bào)錯(cuò)

寫文章時(shí)候用的是 HBuilderX 2.9.8 相關(guān)聯(lián)的版本

因?yàn)閁niApp中不支持Sass 中的 exprot:


$theme-text-color-colorful:#EE5002; //這是一個(gè)變量名
 
//主要的一步:
:export {
  theme_color: $theme-text-color-colorful;
}

import styles from 'scss文件路徑名';


data(){
  return{
      textColor:styles.theme_color
  }
}

這樣的方式再h5中可以使用,但是很可惜再小程序等地方不能使用恕酸,所以只能找其他辦法了榕栏。

之前再弄前端的時(shí)候畔勤,記得是可以通過(guò)修改webpack的sass options來(lái)注入js的變量的

為什么要注入js的變量不是scss文件的變量,因?yàn)檫@樣可以再js代碼中復(fù)用

參考文章

原型是這樣的

variables.js:

module.exports = {
  'primary-color': 'red',
  'space-v-lg': '1px'
}

僅需要在 webpack.config.js 中更改下配置:

let styleVariables = require('./variables.js')

// 其他配置
...

{
  test: /\.scss$/,
  use: [
    'css-loader',
    'postcss-loader',
    {
      loader: 'sass-loader',
      options: {
        data: Object.keys(styleVariables)
          .map(k => `\$${k}: ${styleVariables[k]};`)
          .join('\n')
      }
    }
  ]
},

所以跟著這個(gè)思路扒磁,找到了 vue-cli-plugin-uni 的 代碼查看了一下怎么寫的庆揪,因?yàn)樽约簩?duì) webpack-chain不是很熟悉,所以走了不少?gòu)澛?/p>

具體代碼路徑: node_modules/@dcloudio/vue-cli-plugin-uni/lib/chain-webpack.js

直接上配置:

同理妨托,先新建 變量文件 scss.js:

module.exports = {
  'cooliean-color': 'purple',
  'error-color': 'red',
}

uniapp cli項(xiàng)目中 新建 vue.config.js 然后輸入下面代碼

let styleVariables = require('./scss.js') // 路徑自己修改

function appScssVar(oldVarString) {
  const newData = Object.keys(styleVariables)
    .map(k => `\$${k}: ${styleVariables[k]};`)
    .join('\n')

  // 添加樣式到全局缸榛,這樣不用每個(gè)頁(yè)面import了
  oldVarString = oldVarString + '\n' + '@import \"@/path/style/themes/index.scss\";';
  if (!newData) {
    return oldVarString
  }

  return oldVarString + '\n' + newData
}

module.exports = {
  chainWebpack: webpackConfig => {
    const cssTypes = ['vue-modules', 'vue', 'normal-modules', 'normal']
    cssTypes.forEach(type => {
      webpackConfig.module.rule('scss').oneOf(type).use('sass-loader').tap(options => {
        if (!options.sassOptions) {
          options.sassOptions = {}
        }
        options.prependData = appScssVar(options.prependData)
        return options
      })
      webpackConfig.module.rule('sass').oneOf(type).use('sass-loader').tap(options => {
        if (!options.sassOptions) {
          options.sassOptions = {}
        }
        options.prependData = appScssVar(options.prependData)
        return options
      })
    })
  }
}

然后就可以直接再uniapp中的vue中調(diào)用這個(gè)變量了

<template>
  <view>
<!--    <text :style="`color: ${coolieanColor}`">這個(gè)要報(bào)錯(cuò)</text>-->
    <text :style="{color: coolieanColor}">coolieanColor</text>
    <text :style="{color: errorColor}">errorColor</text>
  </view>
</template>

<script>
import scssVars from '@/style/scss.js'

export default {
  data() {
    console.log(scssVars)
    return {
      coolieanColor: scssVars['cooliean-color'], // 這個(gè)中劃線標(biāo)準(zhǔn)不是很爽 :)
      errorColor: scssVars['error-color'], // 這個(gè)中劃線標(biāo)準(zhǔn)不是很爽 :)
    }
  }
}
</script>

<style lang="scss">
.cooliean-class{
  color: $cooliean-color;
}
.error-class{
  color: $error-color;
}
</style>


還有一種直接引入 scss變量的方法: 這個(gè)方法我自己本人并么有實(shí)踐過(guò),但是前段項(xiàng)目這樣應(yīng)該是沒(méi)有問(wèn)題的兰伤,請(qǐng)自己驗(yàn)證

這個(gè)方法不能再js中獲取變量

直接引入 @important "@/styles/global.scss"

要添加依賴sass-resources-loader


// vue.config.js
module.exports = {
  chainWebpack: config => {
    const oneOfsMap = config.module.rule('scss').oneOfs.store
    oneOfsMap.forEach(item => {
      item
        .use('sass-resources-loader')
        .loader('sass-resources-loader')
        .options({
          // Provide path to the file with resources(這里是你.scss文件所在路徑)
          resources: './path/to/resources.scss',
 
          // Or array of paths(這個(gè)可以刪掉 和上面這個(gè) 二選一 二選一 二選一)
          resources: ['./path/to/vars.scss', './path/to/mixins.scss']
        })
        .end()
    })
  }
}

參考資料:

希望對(duì)你有所幫助~~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末内颗,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子医清,更是在濱河造成了極大的恐慌起暮,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件会烙,死亡現(xiàn)場(chǎng)離奇詭異负懦,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)柏腻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門纸厉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人五嫂,你說(shuō)我怎么就攤上這事颗品。” “怎么了沃缘?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵躯枢,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我槐臀,道長(zhǎng)锄蹂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任水慨,我火速辦了婚禮得糜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘晰洒。我一直安慰自己朝抖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布谍珊。 她就那樣靜靜地躺著治宣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上侮邀,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天缆巧,我揣著相機(jī)與錄音,去河邊找鬼豌拙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛题暖,可吹牛的內(nèi)容都是我干的按傅。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼胧卤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼唯绍!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起枝誊,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤况芒,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后叶撒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绝骚,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年祠够,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了压汪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡古瓤,死狀恐怖止剖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情落君,我是刑警寧澤穿香,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站绎速,受9級(jí)特大地震影響皮获,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜朝氓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一魔市、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赵哲,春花似錦待德、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春较坛,著一層夾襖步出監(jiān)牢的瞬間印蔗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工丑勤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留华嘹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓法竞,卻偏偏與公主長(zhǎng)得像耙厚,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子岔霸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容