「使用 webpack 5 从0到1搭建React + TypeScript 项目环境」3. 资源模块
2023-06-13 09:13:56 时间
「使用 webpack 5 从0到1搭建React + TypeScript 项目环境」3. 资源模块
资源模块(asset module)是一种模块类型,它允许使用资源文件(字体,图标等)而无需配置额外 loader
。
在 webpack 5
之前,通常使用:
raw-loader
将文件导入为字符串url-loader
将文件作为data URI
内联到bundle
中file-loader
将文件发送到输出目录
资源模块类型(asset module type),通过添加 4 种新的模块类型,来替换所有这些 loader
:
asset/resource
发送一个单独的文件并导出URL
。之前通过使用file-loader
实现。asset/inline
导出一个资源的data URI
。之前通过使用url-loader
实现。asset/source
导出资源的源代码。之前通过使用raw-loader
实现。asset
在导出一个data URI
和发送一个单独的文件之间自动选择。之前通过使用url-loader
,并且配置资源体积限制实现。
当在 webpack 5
中使用旧的 assets loader
(如 file-loader
/url-loader
/raw-loader
等)和 asset
模块时,你可能想停止当前 asset
模块的处理,并再次启动处理,这可能会导致 asset
重复,你可以通过将 asset
模块的类型设置为 'javascript/auto'
来解决。
接下来我们简单介绍一下如何配置,详细请看资源模块 | webpack 中文文档 (docschina.org)
我们在webpack.config.common.js
中添加如下配置:
{
test: /\.(png|jpg|jpeg|gif|woff|woff2|eot|ttf|otf)$/i,
type: "asset/resource",
generator: {
filename: 'static/[hash][ext][query]'
},
},
接下来我们在src/index.tsx
中引入图片:
import React from 'react';
import ReactDOM from 'react-dom';
import jpg from './assets/picture.jpg'
const App = () => {
return (
<>
<p>hello world</p>
<img src={jpg} alt="" width='100px' height='100px'/>
</>
);
};
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById("root")
);
由于这里我们通过 ES6
的方式导入图片,为了使 TypeScript
可以识别图片模块,我们需要在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";
通过yarn build
打包后,打开html
文件查看我们可以看到图片资源已生效:
image-20220112204539791
至此,我们已经可以在代码里引入图片和字体资源了
相关文章
- 【字幕制作】生肉资源的字幕问题解决经验分享 入门科普/一键机翻/在线识别/内嵌封装「建议收藏」
- SpringBoot框架:第二章:SpringBoot中static和templates二个目录下的页面和静态资源访问的三个常见问题
- CI/CD:基于K8s弹性资源池的配置【第一步】自动化创建Jenkins的Agent节点
- Fragment找不到资源Id引起的线上Crash
- Webpack解析文件和资源
- 使用 Velero 备份还原 Kubernetes 集群资源
- 给Oracle资源的急需:加快的繁忙(oracle资源正忙)
- 最全的libcurl库资源整理详解编程语言
- 有助解决资源紧缺问题 杜克大学找到能可重复使用N95口罩办法
- webpack快速构建基于Koa2、MySQL和Webpack的Web应用(koa2mysql)
- 资源从Redis获取资源:一次有效的缓存读取(从redis 获取)
- 学习资源汇总:免费在线Linux入门教程大全(免费在线linux)
- MSSQL系统:构建资源池为灵活应用(mssql系统资源池)
- 脚本让Redis中的资源数量有序统计(脚本查redis中的数量)
- 多线程协同操控Redis资源(多线程同步redis)
- 详解PHP内置访问资源的超时时间time_outfile_get_contentsread_file
- Cocos2d-x3.0多线程异步加载资源实例