[英]Creating an SVG Sprite component with ejected create-react-app
我正在使用create-react-app
库,并且创建了一个在开发中运行良好的SVG组件。 我的问题是,在构建要发布的应用程序时,构建过程无法识别组件的动态路径,因此无法将主sprite文件放入我的/media
文件夹中。
SVG组件示例:
render() {
return (
<svg className={`icon ${this.props.id}`} fill={this.props.fill}>
<use xlinkHref={`/src/assets/images/svg-sprite/svg-sprite-${this.props.category}-symbol.svg#ic_${this.props.id}_24px`}></use>
</svg>
);
}
如您所见,我正在引用特定Sprite文件中的特定符号。
如果在0.5.0之前弹出,则import
资产是将它们添加到构建输出中的唯一方法。 这样做有充分的理由:例如,它们的文件名会自动包含一个哈希,因为构建系统可以识别它们,因此您不必担心文件更改时是否破坏浏览器缓存。 您也不必担心拼写错误,因为缺少文件会给您带来编译错误。
自从0.5.0,我们也支持一个public
文件夹作为逃生舱口。 你可以把在任何文件中public
文件夹,它们将与构建输出合并。 唯一的陷阱是要引用它们,您需要在链接中添加process.env.PUBLIC_URL
。 这样可以确保,如果您为非根URL(例如GitHub Pages)构建项目,则该项目仍然可以正常运行。
<use linkHref={process.env.PUBLIC_URL + `/assets/images/svg-sprite/svg-sprite-${this.props.category}-symbol.svg#ic_${this.props.id}_24px`}></use>
只要你会工作public
文件夹中包含assets/images/svg-sprite/svg-sprite-*
文件。
再次请注意,此功能仅在react-scripts@0.5.0
起react-scripts@0.5.0
因此,如果您较早弹出,则可能需要将其react-scripts@0.5.0
移植到项目中。
参考:
以防万一有人遇到这个问题...我查看了webpack.config.prod.js
并发现一条注释,其中指出您import
所有文件都构建在/media
文件夹中。 通过导入我的所有SVG Sprite文件解决了我的问题,这不是很理想,但是可以完成工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.