成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

vue項目中如何引入全局sass/less變量、function、mixin

hqman / 726人閱讀

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

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

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

 npm install -d sass-resource-loader

首先我們找到項目里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對其改造:

/**
   * 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: {
          //需要一個全局路徑
          resources: [resolveResouce("index.scss")]
        }
      }
    ]
    if(options.extract){
      return ExtractTextPlugin.extract({
        use:loaders,
        fallback: "vue-style-loader"
      })
    }else{
      return ["vue-style-loader"].concat(loaders)
    }
  }

工具寫好好了,接下來直接把上門return對象做些調(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àn)了我們的目標(biāo)。

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/107889.html

相關(guān)文章

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

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

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

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

    SimonMa 評論0 收藏0
  • vue入門文章

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

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

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

    jindong 評論0 收藏0
  • 現(xiàn)代CSS進化史

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

    msup 評論0 收藏0

發(fā)表評論

0條評論

hqman

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<