亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

vue項(xiàng)目中如何引入全局sass/less變量、function、mixin

hqman / 799人閱讀

摘要:讓我們考慮下場(chǎng)景當(dāng)使用開(kāi)發(fā)移動(dòng)端的時(shí)候,你定義了一個(gè)轉(zhuǎn)的函數(shù)或者是網(wǎng)站配色的全局變量等,然后到工程里為每個(gè)文件或者組件那得重復(fù)做這樣的工作很多很多次,萬(wàn)一這些公用文件目錄路徑變?cè)趺崔k呢,哭都來(lái)不及,想想都覺(jué)得恐怖呀接下來(lái)拯救我們的神器就要登

讓我們考慮下場(chǎng)景:當(dāng)使用rem/vw開(kāi)發(fā)移動(dòng)端的時(shí)候,你定義了一個(gè)px轉(zhuǎn)rem的函數(shù),或者是網(wǎng)站配色的全局變量等,然后到工程里為每個(gè)vue文件或者組件@import ‘publicfilename.scss’,那得重復(fù)做這樣的工作很多很多...次,萬(wàn)一這些公用文件目錄路徑變?cè)趺崔k呢,哭都來(lái)不及,想想都覺(jué)得恐怖呀!

接下來(lái)拯救我們的神器就要登場(chǎng)了---sass-resources-loader,它可以省去重復(fù)性的引入,還支持less,postcss等,具體用法如下:

 npm install -d sass-resource-loader

首先我們找到項(xiàng)目里build目錄,在該目錄下找到util.js
更新前util.js代碼如下:

"use strict"
const path = require("path")
const config = require("../config")
const ExtractTextPlugin = require("extract-text-webpack-plugin")
const packageConfig = require("../package.json")
exports.assetsPath = function (_path) {
  const assetsSubDirectory = process.env.NODE_ENV === "production"
    ? config.build.assetsSubDirectory
    : config.dev.assetsSubDirectory

  return path.posix.join(assetsSubDirectory, _path)
}

exports.cssLoaders = function (options) {
  options = options || {}

  const cssLoader = {
    loader: "css-loader",
    options: {
      sourceMap: options.sourceMap
    }
  }

  // generate loader string to be used with extract text plugin
  function generateLoaders (loader, loaderOptions) {
    const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]

    if (loader) {
      loaders.push({
        loader: loader + "-loader",
        options: Object.assign({}, loaderOptions, {
          sourceMap: options.sourceMap
        })
      })
    }

    // Extract CSS when that option is specified
    // (which is the case during production build)
    if (options.extract) {
      return ExtractTextPlugin.extract({
        use: loaders,
        fallback: "vue-style-loader"
      })
    } else {
      return ["vue-style-loader"].concat(loaders)
    }
  }

  // https://vue-loader.vuejs.org/en/configurations/extract-css.html
  return {
    css: generateLoaders(),
    postcss: generateLoaders(),
    less: generateLoaders("less"),
    sass: generateLoaders("sass", { indentedSyntax: true }),
    scss: generateLoaders("sass"),
    stylus: generateLoaders("stylus"),
    styl: generateLoaders("stylus")
  }
}

// Generate loaders for standalone style files (outside of .vue)
exports.styleLoaders = function (options) {
  const output = []
  const loaders = exports.cssLoaders(options)

  for (const extension in loaders) {
    const loader = loaders[extension]
    output.push({
      test: new RegExp("." + extension + "$"),
      use: loader
    })
  }

  return output
}

exports.createNotifierCallback = () => {
  const notifier = require("node-notifier")

  return (severity, errors) => {
    if (severity !== "error") return

    const error = errors[0]
    const filename = error.file && error.file.split("!").pop()

    notifier.notify({
      title: packageConfig.name,
      message: severity + ": " + error.name,
      subtitle: filename || "",
      icon: path.join(__dirname, "logo.png")
    })
  }
}

/**
 * 增加 hljs 的 classname
 */
exports.wrapCustomClass = function (render) {
  return function (...args) {
    return render(...args)
      .replace("", "")
  }
}
/**
 * Format HTML string
 */
exports.convertHtml = function (str) {
  return str.replace(/(&#x)(w{4});/gi, $0 => String.fromCharCode(parseInt(encodeURIComponent($0).replace(/(%26%23x)(w{4})(%3B)/g, "$2"), 16)))
}

看util.js文件,我們首先找到我需要修改目標(biāo)在哪:

// https://vue-loader.vuejs.org/en/configurations/extract-css.html
  return {
    css: generateLoaders(),
    postcss: generateLoaders(),
    less: generateLoaders("less"),
    sass: generateLoaders("sass", { indentedSyntax: true }),
    scss: generateLoaders("sass"),
    stylus: generateLoaders("stylus"),
    styl: generateLoaders("stylus")
  }

我們那sass為例,用sass-resources-loader對(duì)其改造:

/**
   * sass Less 源文件
   * @param name classFile
   * @returns {string}
   */
  function resolveResouce(name) {
    return path.resolve(__dirname, "../static/" + name);
  }

  //導(dǎo)入全局sass mixin function等
  function generateSassResourceLoader(){
    var loaders = [
      cssLoader,
      //"postcss-loader",
      "sass-loader",
      {
        loader:"sass-resources-loader",
        options: {
          //需要一個(gè)全局路徑
          resources: [resolveResouce("index.scss")]
        }
      }
    ]
    if(options.extract){
      return ExtractTextPlugin.extract({
        use:loaders,
        fallback: "vue-style-loader"
      })
    }else{
      return ["vue-style-loader"].concat(loaders)
    }
  }

工具寫(xiě)好好了,接下來(lái)直接把上門(mén)return對(duì)象做些調(diào)整,代碼如下

  // https://vue-loader.vuejs.org/en/configurations/extract-css.html
  return {
    css: generateLoaders(),
    postcss: generateLoaders(),
    less: generateLoaders("less"),
    sass:generateSassResourceLoader(),
    scss:generateSassResourceLoader(),
    stylus: generateLoaders("stylus"),
    styl: generateLoaders("stylus")
  }

從代碼中可以看出,我們把sass和scss的loader換成我們自己根據(jù)sass-resources-loader寫(xiě)的方法了,這樣就實(shí)現(xiàn)了我們的目標(biāo)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/107889.html

相關(guān)文章

  • 大話css預(yù)編譯處理(三):基礎(chǔ)語(yǔ)法篇

    摘要:值得慶幸的是,這三款預(yù)處理器語(yǔ)言的語(yǔ)法和語(yǔ)法都差不多。在這一節(jié)中,我們依次來(lái)對(duì)比一下這三款預(yù)處理器語(yǔ)言各種特性的異同之處,以及使用方法。預(yù)處理器語(yǔ)言支持任何變量例如顏色數(shù)值文本。 一、Sass、LESS和Stylus的語(yǔ)法 每一種語(yǔ)言都有自己一定的語(yǔ)法規(guī)則,CSS預(yù)處理器語(yǔ)言也不例外,在真正使用CSS預(yù)處器語(yǔ)言之前還有一個(gè)不可缺少的知識(shí)點(diǎn),就是對(duì)語(yǔ)法的理解。值得慶幸的是,這三款CSS預(yù)...

    劉東 評(píng)論0 收藏0
  • 前端面試題總結(jié)——VUE(持續(xù)更新

    摘要:前端面試題總結(jié)持續(xù)更新中是哪個(gè)組件的屬性模塊的組件。都提供合理的鉤子函數(shù),可以讓開(kāi)發(fā)者定制化地去處理需求。 前端面試題總結(jié)——VUE(持續(xù)更新中) 1.active-class是哪個(gè)組件的屬性? vue-router模塊的router-link組件。 2.嵌套路由怎么定義? 在 VueRouter 的參數(shù)中使用 children 配置,這樣就可以很好的實(shí)現(xiàn)路由嵌套。 //引入兩個(gè)組件 ...

    SimonMa 評(píng)論0 收藏0
  • vue入門(mén)文章

    摘要:本來(lái)想自己寫(xiě)一篇關(guān)于入門(mén)的文章。后面可能在這篇文章基礎(chǔ)上,有所內(nèi)容的增加。預(yù)處理器定義了一種新的專(zhuān)門(mén)的編程語(yǔ)言,編譯后成正常的文件。 本來(lái)想自己寫(xiě)一篇關(guān)于vue入門(mén)的文章。但是看到鏈接的文章后,覺(jué)得寫(xiě)得太詳細(xì)了,實(shí)在有保存下來(lái)的必要。后面可能在這篇文章基礎(chǔ)上,有所內(nèi)容的增加。 CSS預(yù)處理器 定義了一種新的專(zhuān)門(mén)的編程語(yǔ)言,編譯后成正常的CSS文件。為CSS增加一些編程的特性,無(wú)需考慮瀏...

    seanHai 評(píng)論0 收藏0
  • webpack多頁(yè)應(yīng)用架構(gòu)系列(十):如何打造一個(gè)自定義的bootstrap

    摘要:我個(gè)人慣用的是,因此本文以為例來(lái)介紹如何打造一個(gè)自定義的。引入全局的方法請(qǐng)看我之前的這篇文章多頁(yè)應(yīng)用架構(gòu)系列四老式插件還不能丟,怎么兼容,我的腳手架項(xiàng)目也是使用的這套方案。 本文首發(fā)于Array_Huang的技術(shù)博客——實(shí)用至上,非經(jīng)作者同意,請(qǐng)勿轉(zhuǎn)載。原文地址:https://segmentfault.com/a/1190000007043716如果您對(duì)本系列文章感興趣,歡迎關(guān)注訂閱...

    jindong 評(píng)論0 收藏0
  • 現(xiàn)代CSS進(jìn)化史

    摘要:第一個(gè)主流的預(yù)處理器是年發(fā)布的,它提供了一個(gè)新的更簡(jiǎn)潔的語(yǔ)法縮進(jìn)代替大括號(hào),沒(méi)有分號(hào)等等,同時(shí)增加了一些缺失的高級(jí)特性,像變量工具方法還有計(jì)算。 英文:https://medium.com/actualize-...編譯:繆斯 showImg(https://segmentfault.com/img/bV3vCJ?w=1129&h=735); CSS一直被web開(kāi)發(fā)者認(rèn)為是最簡(jiǎn)單也是最...

    msup 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

hqman

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<