javascript - 如何treeshake需要多个图像的资产对象(url和文件加载器)
问题描述
我有 1 个 js 文件,需要以下列方式导出到某些图像:
export const assets = {
UI: {
BUTTON_GREEN: require('../assets/minified/ui/button_green_background.png'),
BUTTON_YELLOW: require('../assets/minified/ui/button_yellow_background.png'),
},
BACKGROUNDS: {
BACKGROUND_FIRE: require('../assets/minified/bg/background_fire.jpg'),
}
};
/* etc... */
然后我在各个页面中使用它,如下所示
import {assets} from "./assets.js"
<img src={assets.UI.BUTTON_GREEN} />
我这样做是因为在使用打字稿时由于自动完成功能更容易导入图像。然后我在我的 webpack 配置中有以下加载器
{
test: /\/ui\/[^.]+\.(png|jpe?g|svg)$/,
loader: 'url-loader',
options: {
name: 'static/images/[name]-[hash].[ext]',
limit: 50000,
esModule: false
}
},
{
test: /\/bg\/[^.]+\.(png|jpe?g|svg)$/,
loader: 'file-loader',
options: {
name: 'static/images/[name]-[hash].[ext]',
esModule: false
}
}
我使用单独的加载器来内联 ui 元素并将其他更大的图像解析为普通文件。我设置esModule
为false
因为否则由于某种原因我无法让我的要求工作,因为它们返回“默认”而不是与图像相关的字符串。
然后我将我的页面分成他们自己的 js 块,即
Page Size
┌ * / 74 kB
├ /_app 1.25 MB
├ /_document
├ /_error 9.43 kB
├ * /registration/sign-in 697 B
└ * /registration/sign-up 438 B
但是你可以看到我_app
超过 1mb,这是由于我内联了一些 ui 图像,它们都被吐到这个文件中,即使它只使用 2 个图像。
所以我的问题是:我如何重组我的方法,以便只将内联图像数据添加到使用它的 js 页面块中?我愿意接受额外的加载器设置/重组我的资产文件等......
解决方案
推荐阅读
- javascript - 角按钮单击
- python - 从 Python 中执行的批处理状态(使用子进程)
- javascript - Javascript - Chrome:子节点最大长度
- c++ - 是什么阻止了 Boost.Format 表单使用我的流运算符重载作为可选 int?
- outlook - 如何在新的 Outlook 邮件中创建永久通知?
- python - Python:将二进制数组显示为图像
- c# - 如何通过双击.NET框架中的exe等文件来运行.NET核心应用程序
- python - Python数据框按以下值分组
- azure - 缓存管理 Power BI Services 和 Azure Analysis Services 多维数据集
- mysql - 从 Mysql 5.5 升级后 Percona 5.7 缓慢的“发送数据”