我有一个使用create-react-app
搭建的应用程序框架。我希望文件夹结构如下:
src/
components/
CustomAppBar.js
images/
logo.svg
App.js
index.tsx
images.d.ts
目前我想在CustomAppBar.js
中使用images
文件夹中的logo.svg
。 目前这个文件看起来像这样:
import React from 'react';
import PropTypes from 'prop-types';
import { withStyles } from '@material-ui/core/styles';
import AppBar from '@material-ui/core/AppBar';
import Toolbar from '@material-ui/core/Toolbar';
import Typography from '@material-ui/core/Typography';
import Button from '@material-ui/core/Button';
import IconButton from '@material-ui/core/IconButton';
import MenuIcon from '@material-ui/icons/Menu';
import logo from '*.svg';
const styles = {
flex: {
flex: 1,
},
menuButton: {
marginLeft: -12,
marginRight: 20,
},
root: {
flexGrow: 1,
},
};
function ButtonAppBar(props) {
const { classes } = props;
return (
<div className={classes.root}>
<AppBar position="static" title={<img styles={{height: '50px'}} src={logo} />}>
<Toolbar>
<IconButton className={classes.menuButton} color="inherit" aria-label="Menu">
<MenuIcon />
</IconButton>
<Typography variant="title" color="inherit" className={classes.flex}>
Title
</Typography>
<Button color="inherit">Login</Button>
</Toolbar>
</AppBar>
</div>
);
}
ButtonAppBar.propTypes = {
classes: PropTypes.object.isRequired,
};
export default withStyles(styles)(ButtonAppBar);
如预期的那样,这个操作失败了:
无法解析“some\path\src\components”中的“*.svg”:找不到模块。
images.d.ts
的内容是标准库:
declare module '*.svg'
declare module '*.png'
declare module '*.jpg'
我在其他地方找到了几个建议,提到修改Webpack配置。看起来 create-react-app
已经将Webpack配置隐藏起来了。在这种情况下,最佳实践是什么?
../images/logo.svg
的导入,但也引发了错误。 - codedogimport {logo} from '../images/logo.svg'
。如果我能看到 logo.svg 的内容,这将非常有帮助。 - Joshua FerminPUBLIC_URL
的使用。使用正确的导入方式将包含缓存破坏的好处。 - codedog