CSS 预处理器 Vue 工程为组件自动注入全局样式文件

发布于 2024-10-07 03:29:29 字数 2512 浏览 15 评论 0

// Less
$ npm i -D less less-loader

// Sass/Scss
$ npm i -D node-sass sass-loader

// Stylus
$ npm i -D stylus stylus-loader

提取出一些公共的样式,如 variablesmixinsfunctions 等几乎在所有业务组件中都会用到的样式:

-- src
---- styles
-------- variables.less
-------- mixins.less
-------- functions.less

创建一个包含上面引入的入口样式文件 entry.less ,然后在各组件中导入即可

# entry.less

@import './variables';
@import './mixins';
@import './functions';
<style lang="less">
@import "../styles/entry";

// 其他样式
</style>

在 vue 工程中配置自动导入

Less 和 Stylus

配置 Less 和 Stylus 自动导入有两种方案:

推荐使用第一种,因为第二种方案只是对第一种方案的包装,且暂不支持热更新。

安装: npm i -D style-resources-loader

#vue.config.js
// 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/entry1.less'), // B 
        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
module.exports = {
  css: {
    loaderOptions: {
      sass: {
        prependData: `  // sass-loader@8.0.0 之前,要将 prependData 替换为 data
            @import "@/styles/entry1.scss"; // 配置多个导入
            @import "@/styles/entry2.scss";
        `
      }
    }
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

手心的海

暂无简介

文章
评论
26 人气
更多

推荐作者

寻梦旅人

文章 0 评论 0

冰美式不加糖

文章 0 评论 0

m0_51416705

文章 0 评论 0

123456wqwqwq

文章 0 评论 0

qq_R47skh

文章 0 评论 0

hs1283

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文