vue工程如何為組件自動注入全局樣式文件
開發(fā)過程中,隨著工程變大,不免要提取出一些公共的樣式,如variables、mixins、functions等幾乎在所有業(yè)務組件中都會用到的樣式:
-- src
---- styles
-------- variables.less
-------- mixins.less
-------- functions.less
如果每個需要的組件都要手動導入一次,就太繁瑣了:
<script lang="less"> @import "../styles/variables"; @import "../styles/mixins"; @import "../styles/functions"; // 其他樣式 </script>
當然最直接的改進方案是創(chuàng)建一個包含上面引入的入口樣式文件entry.less,然后在各組件中導入即可:
// entry.less @import './variables'; @import './mixins'; @import './functions';
<script lang="less"> @import "../styles/entry"; // 其他樣式 </script>
但是手動導入畢竟繁瑣,若能夠自動導入就大善了,所幸配置自動導入也不繁瑣,下面以常用的Less、Stylus、Sass/Scss等預處理器為例說明如何在vue工程中配置自動導入:
Less和Stylus
配置Less和Stylus自動導入有兩種方案:
這里我們推薦使用第一種,因為第二種方案只是對第一種方案的包裝,且暫不支持熱更新。
安裝style-resources-loader
$ npm i -D style-resources-loader
配置vue.config.js
如果工程根目錄下沒有vue.config.js文件,手動創(chuàng)建一下即可,然后插入以下代碼:
// vue.config.js
const path = require('path')
module.exports = {
? chainWebpack: config => {
? ? const types = ['vue-modules', 'vue', 'normal-modules', 'normal']
? ? types.forEach(type => addStyleResource(config.module.rule('less').oneOf(type))) ?// A
? },
}
function addStyleResource (rule) {
? rule.use('style-resource')
? ? .loader('style-resources-loader')
? ? .options({
? ? ? patterns: [
? ? ? ? path.resolve(__dirname, './src/styles/entry.less'), ?// B
? ? ? ],
? ? })
}如果想要配置多個導入,只需在B行后繼續(xù)添加即可:
patterns: [ ? path.resolve(__dirname, './src/styles/entry1.less'), ? path.resolve(__dirname, './src/styles/entry2.less'), ],
如果工程使用的是Stylus,則將A行替換為types.forEach(type => addStyleResource(config.module.rule(‘stylus’).oneOf(type))),將B行替換為*path.resolve(__dirname, ‘./src/styles/entry.styl’)*即可。
Sass/Scss
其實Sass/Scss配置自動導入也可以使用上面的方案,但是使用其原生的方案更加便捷,只需在vue.config.js中配置即可:
// vue.config.js
module.exports = {
? css: {
? ? loaderOptions: {
? ? ? sass: {
? ? ? ? prependData: `@import "@/styles/entry.scss";` ?// A
? ? ? }
? ? }
? }
}如果想要配置多個導入,只需在A行繼續(xù)添加即可:
// vue.config.js
module.exports = {
? css: {
? ? loaderOptions: {
? ? ? sass: {
? ? ? ? prependData: `
? ? ? ? ? ? @import "@/styles/entry1.scss";
? ? ? ? ? ? @import "@/styles/entry2.scss";
? ? ? ? `
? ? ? }
? ? }
? }
}注意:sass-loader@8.0.0之前,要將上面的prependData替換為data。
擴展
如果在使用vue create創(chuàng)建工程時,沒有選擇Manually select features,或者沒有選擇CSS Pre-processors,則工程內默認使用的是原生CSS,但是vue的默認Webpack配置中已經內置了對CSS Pre-processors的支持,所以只需要安裝響應依賴,然后再工程文件中使用對應語法書寫樣式即可:
// Less $ npm i -D less less-loader // Sass/Scss $ npm i -D node-sass sass-loader // Stylus $ npm i -D stylus stylus-loader
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Vue 讀取HTMLCollection列表的length為0問題
這篇文章主要介紹了Vue 讀取HTMLCollection列表的length為0問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06
VueX學習之modules和namespacedVueX詳細教程
這篇文章主要為大家介紹了VueX學習之modules和namespacedVueX詳細教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06

