<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
        主站蜘蛛池模板: 国产AV日韩A∨亚洲AV电影 | 亚洲综合视频在线观看| 一区二区三区在线免费观看视频| 阿v免费在线观看| 免费人成在线观看网站品爱网日本| 亚洲国产成人片在线观看无码| 国产精品亚洲四区在线观看| 国产亚洲精品免费| 免费大香伊蕉在人线国产| 国产日韩亚洲大尺度高清| 日韩a级无码免费视频| 亚洲AV永久无码精品| 99在线观看免费视频| 亚洲成a人片毛片在线| 性生交片免费无码看人| 亚洲午夜无码久久| 久久精品成人免费看| 亚洲综合成人网在线观看| 免费看成人AA片无码视频羞羞网| 免费一级毛片正在播放| 国产精品九九久久免费视频| 精品国产sm捆绑最大网免费站| 国产精品国产午夜免费福利看| 亚洲网址在线观看你懂的| 免费在线观看h片| 香蕉视频亚洲一级| 亚洲综合图色40p| 亚洲成在人线aⅴ免费毛片| 亚洲?V无码乱码国产精品 | 中文字幕免费在线看| 久久久久久亚洲精品成人| 国产1024精品视频专区免费| 无码天堂亚洲国产AV| 久久久久久久综合日本亚洲| 四虎最新永久免费视频| 国产亚洲精彩视频| 青青草原精品国产亚洲av| 国产美女精品视频免费观看| 亚洲欧洲在线播放| 免费国产高清视频| 亚洲砖码砖专无区2023|