最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 「React Build」之四集成图片/字体

    正文概述 掘金(大古同学)   2021-04-06   483

    在上一篇文章中,我们通过 Webpack 为 React/TypeScript 项目添加了 CSS 模块,在这篇文章中,我们继续在上一篇文章的基础上为前端项目配置图片模块

    在代码中引入图片

    我们在任意组件中通过 img 标签引入一张图片

    import React from "react";
    
    const Index: React.FC = () => {
      return (
        <div>
          <img src="../../assets/flower.jpeg"  />
        </div>
      );
    };
    
    export default Index;
    

    通过yarn start启动应用并查看界面效果,我们发现图片无法识别出来

    「React Build」之四集成图片/字体

    此时,Webpack 没有做任何与图片模块相关的事情

    ?!我们通过 ES6 的方式导入图片 ,也许 Webpack 就可以识别此模块并构建它

    import React from "react";
    
    import flower from "../../assets/flower.jpeg";
    
    const Index: React.FC = () => {
      return (
        <div>
          <img src={flower}  />
        </div>
      );
    };
    
    export default Index;
    

    但是我们得到一个 TypeScript 报错

    「React Build」之四集成图片/字体

    这个错误与上一篇文章的 CSS 报错很类似啊。为了解决这个错误,我们在src/typings.d.ts中加入以下内容

    declare module "*.svg";
    declare module "*.png";
    declare module "*.jpg";
    declare module "*.jpeg";
    declare module "*.gif";
    declare module "*.bmp";
    declare module "*.tiff";
    

    现在 TypeScript 可以识别图片模块了,但是 Webpack 还是无法解析图片模块

    「React Build」之四集成图片/字体

    配置 Webpack 以解析图片

    Webpack-V5 使用了最新的方式解析静态资源模块,asset module 官方文档

    const config= {
      ...
      module: {
        rules: [
          ...,
          // 解析图片 ,字体
          {
            test: /\.(png|jpg|jpeg|gif|woff|woff2|eot|ttf|otf)$/i,
            type: "asset/resource",
            generator: {
              filename: 'static/[hash][ext][query]'
            },
            // 只解析src目录
            include: path.resolve(__dirname, "../src"),
          },
        ],
      },
      ...
    };
    

    在生产环境和开发环境的配置文件中都加入上面的代码

    重新启动应用并查看界面效果,我们可以发现界面正产显示了

    「React Build」之四集成图片/字体

    注意,在打包过程中,Webpack 会为每一张图片赋予一个全局唯一的随机名称。 这也就意味着文件名不会与其他组件中的其他图片文件冲突。

    在生产环境npm run build中,我们看到build文件夹下的图片的确拥有全局唯一的随机名称 ,并在 JavaScript 中进行了相应的引用:

    「React Build」之四集成图片/字体

    在 CSS 文件中应用图片

    有时候,我们也想在 CSS 代码中引用图片,那如何做呢?

    我们给src/pages/imgDemo/index.tsx组件添加一个 bgStyle 样式类名

    import React from "react";
    
    import style from "./index.less";
    // 这里的 @ 是因为在webpack中设置了路径别名
    import flower from "@/assets/flower.jpeg";
    
    const Index: React.FC = () => {
      return (
        <div className={style.container}>
          <img src={flower}  />
    
          <div className={style.bgStyle}>
            <h1>科技感</h1>
          </div>
        </div>
      );
    };
    
    export default Index;
    

    在 CSS 文件中加上背景图片

    @color: purple;
    
    .container {
      .bgStyle {
        background-image: url("@/assets/bg.png");
        width: 400px;
        height: 300px;
        background-size: cover;
        text-align: center;
        line-height: 300px;
    
        h1 {
          color: white;
        }
      }
    }
    

    最后,在开发环境中可以发现背景图片设置生效了

    「React Build」之四集成图片/字体

    在生产环境中可以发现背景图片也设置生效了

    「React Build」之四集成图片/字体

    重新启动项目并观察界面,可以发现。代码路径更简洁了,也方便之后修改文件路径。 并且界面效果效果跟原来的一致 ?

    注:生产构建出来的包可能提示体积过大,类似的问题我们到后面性能优化的章节再来解决


    难道这就结束了吗??‍♂️ 不,离搭建一个完整的 React 应用有些距离。那么在下一篇文章中,我会告诉你如何在项目中集成 React-router


    起源地下载网 » 「React Build」之四集成图片/字体

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元