<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

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

        來源:懂視網 責編:小采 時間:2020-11-27 22:13:34
        文檔

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

        詳解vue項目中如何引入全局sass/less變量、function、mixin:讓我們考慮下場景:當使用rem/vw開發移動端的時候,你定義了一個px轉rem的函數,或者是網站配色的全局變量等,然后到工程里為每個vue文件或者組件@import publicfilename.scss',那得重復做這樣的工作很多很多...次,萬一這些公用文件目錄路徑變怎么辦呢,哭
        推薦度:
        導讀詳解vue項目中如何引入全局sass/less變量、function、mixin:讓我們考慮下場景:當使用rem/vw開發移動端的時候,你定義了一個px轉rem的函數,或者是網站配色的全局變量等,然后到工程里為每個vue文件或者組件@import publicfilename.scss',那得重復做這樣的工作很多很多...次,萬一這些公用文件目錄路徑變怎么辦呢,哭

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

        接下來拯救我們的神器就要登場了---sass-resources-loader,它可以省去重復性的引入,還支持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('<code class="', '<code class="hljs ')
         .replace('<code>', '<code class="hljs">')
         }
        }
        /**
         * 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文件,我們首先找到我需要修改目標在哪:

        // 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);
         }
        
         //導入全局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對象做些調整,代碼如下

         // 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換成我們自己根據sass-resources-loader寫的方法了,這樣就實現了我們的目標。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

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

        詳解vue項目中如何引入全局sass/less變量、function、mixin:讓我們考慮下場景:當使用rem/vw開發移動端的時候,你定義了一個px轉rem的函數,或者是網站配色的全局變量等,然后到工程里為每個vue文件或者組件@import publicfilename.scss',那得重復做這樣的工作很多很多...次,萬一這些公用文件目錄路徑變怎么辦呢,哭
        推薦度:
        標簽: VUE 詳解 全局變量
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲人成无码www久久久| 免费无码成人AV片在线在线播放| 免费a级毛片大学生免费观看| 中文字幕乱码亚洲无线三区| 人成午夜免费视频在线观看| 亚洲1234区乱码| AV免费网址在线观看| 国产人成亚洲第一网站在线播放| 最新69国产成人精品免费视频动漫| 国产亚洲玖玖玖在线观看 | 久久久高清日本道免费观看| 亚洲午夜久久久久久久久电影网| 三年片在线观看免费| 亚洲午夜视频在线观看| 免费人成在线观看69式小视频| 亚洲午夜精品在线| 日本成人免费在线| 精品国产呦系列在线观看免费 | 好吊妞在线成人免费| 丰满亚洲大尺度无码无码专线 | 国产一卡2卡3卡4卡无卡免费视频 国产一卡二卡3卡四卡免费 | 国产在线精品观看免费观看| 亚洲VA中文字幕无码毛片| 妻子5免费完整高清电视| 亚洲色www永久网站| 亚洲另类激情专区小说图片| 国产三级在线免费| 亚洲an日韩专区在线| 亚洲国产小视频精品久久久三级| 中国在线观看免费的www| 亚洲一区二区三区久久久久| 波多野结衣视频在线免费观看| 日韩电影免费在线观看网站| 亚洲一区二区免费视频| www.91亚洲| 最近2019中文字幕免费直播| 特级毛片全部免费播放a一级| 亚洲国产精品自在在线观看| 日本特黄特黄刺激大片免费| 国产一级淫片a免费播放口| 亚洲变态另类一区二区三区|