摘要:讓我們考慮下場景當(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(/()(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
摘要:值得慶幸的是,這三款預(yù)處理器語言的語法和語法都差不多。在這一節(jié)中,我們依次來對比一下這三款預(yù)處理器語言各種特性的異同之處,以及使用方法。預(yù)處理器語言支持任何變量例如顏色數(shù)值文本。 一、Sass、LESS和Stylus的語法 每一種語言都有自己一定的語法規(guī)則,CSS預(yù)處理器語言也不例外,在真正使用CSS預(yù)處器語言之前還有一個不可缺少的知識點,就是對語法的理解。值得慶幸的是,這三款CSS預(yù)...
摘要:前端面試題總結(jié)持續(xù)更新中是哪個組件的屬性模塊的組件。都提供合理的鉤子函數(shù),可以讓開發(fā)者定制化地去處理需求。 前端面試題總結(jié)——VUE(持續(xù)更新中) 1.active-class是哪個組件的屬性? vue-router模塊的router-link組件。 2.嵌套路由怎么定義? 在 VueRouter 的參數(shù)中使用 children 配置,這樣就可以很好的實現(xiàn)路由嵌套。 //引入兩個組件 ...
摘要:我個人慣用的是,因此本文以為例來介紹如何打造一個自定義的。引入全局的方法請看我之前的這篇文章多頁應(yīng)用架構(gòu)系列四老式插件還不能丟,怎么兼容,我的腳手架項目也是使用的這套方案。 本文首發(fā)于Array_Huang的技術(shù)博客——實用至上,非經(jīng)作者同意,請勿轉(zhuǎn)載。原文地址:https://segmentfault.com/a/1190000007043716如果您對本系列文章感興趣,歡迎關(guān)注訂閱...
摘要:第一個主流的預(yù)處理器是年發(fā)布的,它提供了一個新的更簡潔的語法縮進代替大括號,沒有分號等等,同時增加了一些缺失的高級特性,像變量工具方法還有計算。 英文:https://medium.com/actualize-...編譯:繆斯 showImg(https://segmentfault.com/img/bV3vCJ?w=1129&h=735); CSS一直被web開發(fā)者認(rèn)為是最簡單也是最...
閱讀 635·2023-04-25 18:37
閱讀 2796·2021-10-12 10:12
閱讀 8376·2021-09-22 15:07
閱讀 577·2019-08-30 15:55
閱讀 3183·2019-08-30 15:44
閱讀 2204·2019-08-30 15:44
閱讀 1635·2019-08-30 13:03
閱讀 1570·2019-08-30 12:55