Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 833|回复: 0

webpack 使用别名(resolve.alias)解决scss @import相对路径导致的问题

[复制链接]
  • TA的每日心情
    奋斗
    2024-6-6 10:50
  • 签到天数: 750 天

    [LV.10]以坛为家III

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    706216
    发表于 2021-4-15 14:06:37 | 显示全部楼层 |阅读模式

    webpack.conf.js 中 resolve.alias 配置

    resolve: {
             extensions: ['.js', '.vue'],
             alias: {
                 '@': path.resolve(__dirname, 'src'),
                 '@scss': path.resolve(__dirname, 'src', 'scss'),
             }
    }

    配置了resolve.alias 后,在js中我们可以这样用

    // 原本这样写
    import hongAlert from './../src/scss/icon.scss'
    
    // 现在可以这样写
    import hongAlert from '@scss/icon.scss'

    在scss中需要这样写,注意是~@

    // 原本这样写
    @import './../../../scss/mixin.scss';
    
    // 现在可以这样写,注意是~@
    @import '~@scss/icon.scss';

     

    问题与背景

    在 *.vue 中的 style 标签中,我使用 @import 引入 icon.scss 样式。由于icon需要依赖一个font/woff/ttf。而 icon.scss 和 font 文件夹是同一目录的。

    而Alert.vue却和它们不同目录。那这时候编译会发生什么呢?报错~

     原因和流程可能是这样的:vue将icon.scss引入后,再想引入font的时候,却发现在vue的目录中找不到font这个文件夹,所以报错了。

     解决方法,是结合webpack的resolve.alias来配置绝对路径。

     


     

    补充和注意点

    1、如果你在js中引用scss,就不会导致这种错误。但在js中导入css总觉得怪怪的。

    import '@scss/icon.scss'

     2、图片路径也可以使用此方法

     .hideicon {
           background-image: url("~@assets/arrow.png");
     }

    3、如果你使用vue-cli搭建的脚手架,要注意相对路劲的问题(weboack.config.js是放在build文件夹中的,所以需要先往上一级)

    function resolve (dir) {
      return path.join(__dirname, '..', dir)
    }
    
     resolve: {
        extensions: ['.js', '.vue', '.json', '.scss'],
        alias: {
          'vue$': 'vue/dist/vue.esm.js',
          '@': resolve('src'),
          '@components': resolve('src/components'),
          '@myComponents': resolve('src/myComponents'),
          '@sass': resolve('src/sass'),
          '@assets': resolve('src/assets')
        }
     },

     4、template中的资源文件也可以这样做

    <img src="~@assets/BusinessInfo_2.png" class="img1">

     

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-6-18 21:48 , Processed in 0.069455 second(s), 30 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表