【Webpack基础】处理样式(二)

1. importLoader

在一些老版本的webpack里面,Loader写成字符串,只会在第一次引入的时候sass编译,下一次引入就不会编译了

此时就需要配置 importLoader 属性了

新版本的 webpack 默认就有这个配置

1.1 配置

{
    test: /\.scss$/i,
    use: [
        "style-loader",
        {
            loader: "css-loader",
            options: {
                importLoader: 2 // 走之前的两个loader -> postcss-loader、sass-loader
            }
        },
        "postcss-loader",
        "sass-loader"
    ],
}

1.2 示例

logo.css

#app {
    img {
        width: 100px;
        height: 100px;
        transform: rotate(45deg);
    }
}

index.css

@import './logo.scss';
body {
    background-color: #fff;
    #app {
        width: 300px;
        height: 300px;
        border: 1px solid #000;
    }
}

index.js

import './index.scss';

打包后

在这里插入图片描述

2. CSS 模块化 CSS Modules

一种规范

让 CSS 按模块来进行处理、影响

2.1 问题:引入样式作用于所有 JS 文件

createLogo.js

import jspp from './jspp.jpg';

function createLogo() {
    const img = new Image();
    img.src = jspp;
    img.className += 'logo'

    const app = document.getElementById('app');
    app.appendChild(img);
}

export default createLogo;

index.scss

body {
    background-color: #fff;
    img {
        width: 100px;
        height: 100px;
        transform: rotate(45deg);
    }
}

index.js

import jspp from './jspp.jpg';
// 作用于所有index.sass里面写的img元素,相当于是一个全局样式
import './index.scss';
import createLogo from './createLogo';

const img = new Image();
img.src = jspp;
img.className += 'logo'

const app = document.getElementById('app');
app.appendChild(img);

createLogo();

怎样只作用于当前文件?—— 开启css模块化

2.2 配置

  1. 配置

    {
        test: /\.scss$/i,
        use: [
            "style-loader",
            {
                loader: "css-loader",
                options: {
                    importLoader: 2,
                    modules: true // 开启css模块化
                }
            },
            "postcss-loader",
            "sass-loader"
        ],
    }
    
  2. 使用

    import jspp from './jspp.jpg';
    // 第一步:导入样式
    import styles from './index.scss';
    import createLogo from './createLogo';
    
    const img = new Image();
    img.src = jspp;
    // 第二步:使用样式对象里的类名
    img.className += `${styles.logo}`
    
    const app = document.getElementById('app');
    app.appendChild(img);
    
    createLogo();
    

3. 打包字体文件

3.1 准备工作

在这里插入图片描述

  1. iconfont 下载字体图标

  2. src 目录下创建 fonts 文件夹,放入字体文件

  3. iconfont.css 放入 indes.sass,资源路径前面加上 fonts/

    @font-face {
        font-family: "iconfont"; /* Project id 3446962 */
        //              后缀看这里 ↓                     不是看这里 ↓
        src: url('fonts/iconfont.woff2?t=1654167604990') format('woff2'),
             url('fonts/iconfont.woff?t=1654167604990') format('woff'),
             url('fonts/iconfont.ttf?t=1654167604990') format('truetype');
      }
      
      .iconfont {
        font-family: "iconfont" !important;
        font-size: 16px;
        font-style: normal;
        -webkit-font-smoothing: antialiased;
        -moz-osx-font-smoothing: grayscale;
      }
      
      .icon-shouye:before {
        content: "\e61b";
      }
    

3.2 问题:引入字体文件报错

在这里插入图片描述

原因:webpack 不认识这些字体文件,需要进行配置

3.3 配置

module.exports = {
    ...
    module: {
        rules: [
        	...
            {
                test: /\.(eot|svg|ttf|woff|woff2)/,
                loader: 'file-loader'
            }
            ...
        ]
    },
    ...
}

file loader现在已经不用了,url loader已经包含了file loader 了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目经过webpack打包后会生成一个dist文件夹,其中包含了经过处理和压缩后的最终产物。dist文件夹下的内容是部署到服务器或发布到线上环境的静态资源文件。 dist文件夹的结构取决于webpack的配置以及项目的需求。通常它会包含一个或多个JS文件,包括应用的逻辑代码和依赖的第三方库,以及一个或多个CSS文件,包含项目的样式代码。此外,还会包含一些字体文件、图片或其他静态资源,这些文件在构建过程中被处理并复制到dist文件夹中。 在项目开发过程中,dist文件夹不会被直接修改,而是由webpack根据配置和源代码生成。webpack处理过程中会进行代码的压缩、合并、混淆等操作,以减小文件大小并提高加载速度。此外,webpack还会处理一些前端框架或工具的特定需求,例如处理jsx代码、提取公共模块等。 通过打包后的dist文件,我们可以快速查看打包后的效果,验证代码是否正确地被处理和运行。同时,dist文件也是发布项目到线上环境的基础,我们可以将dist文件夹中的内容直接上传到服务器进行部署,并通过浏览器访问项目的最终版本。 总的来说,dist文件夹是经过webpack处理后的项目产物,包含了所有打包后的静态资源文件。它具有优化过的代码和资源,适合部署和发布到线上环境使用,能够提供更好的性能和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值