create-react-app
を使用していますが、画像の読み込みに苦労しています。 here に指定されている手順に従いますが、次のエラーが引き続き表示されます。
Failed to compile.
Error in ./src/components/Home/imageIndex.ts
(1,24): error TS2307: Cannot find module './party.png'
yarn start
を実行したときにアプリがコンパイルに失敗し続ける理由を誰もが知っていますか?
Home
コンポーネントがあり、これがファイルのインポート方法です。
import photo from './party.png';
コンポーネントはsrc/components/Home/index.tsx
にあり、pngファイルはsrc/components/Home/party.png
にあります。
ここに私のpackage.jsonがあります:
{
"name": "eai-reactjs-TypeScript-redux-starter",
"description": "A ReactJS/TypeScript + Redux starter template with a detailed README describing how to use these technologies together and constructive code comments.",
"version": "0.1.0",
"private": true,
"dependencies": {
"react": "^15.6.1",
"react-dom": "^15.6.1",
"react-redux": "^5.0.5",
"redux": "^3.7.0",
"redux-logger": "^3.0.6"
},
"devDependencies": {
"@types/enzyme": "^2.8.0",
"@types/jest": "^19.2.3",
"@types/node": "^7.0.18",
"@types/react": "^15.0.24",
"@types/react-dom": "^15.5.0",
"@types/react-redux": "^4.4.40",
"@types/redux-logger": "^3.0.0",
"enzyme": "^2.8.2",
"react-addons-test-utils": "^15.5.1",
"react-scripts-ts": "1.4.0",
"redux-devtools-extension": "^2.13.2"
},
"scripts": {
"start": "react-scripts-ts start",
"build": "react-scripts-ts build",
"test": "react-scripts-ts test --env=jsdom",
"eject": "react-scripts-ts eject"
}
}
正しいパスを持っていると確信していますか?また、cssを介してイメージをインポートする場合(前述の例で行われているように)、srcフォルダーではなく、パブリックフォルダーへの相対パスを指定する必要があります。私はこの問題に何度か遭遇しました。
インポートを使用した例:
import Image from './img.png'
...
// react example
...
render() {
return (
<img src={Image}/> // notice the curly
...
ではなく
<img src="Image"/>
私は同じ問題を抱えており、requireステートメントで解決することができました。
const photo = require('./party.png');
そして、コンポーネントで次のようなものを使用します:
render() { return ( <img src={photo}/>
この投稿も参照してください React、TypeScript、およびWebpackを使用した静的画像の表示
@ archae0pteryxが提案したように、コードから写真を分離する方がはるかに優れているため、srcの代わりにプロジェクトpublicフォルダーを使用する必要があります。
cssでの動作は次のとおりです。
background-image: url('/img.bmp');
デフォルトでは、Create-React-App
はサイズが10000バイトのファイルにurl-loader
を使用します
開発環境では問題なく動作しますが、本番環境ではエラーを減らします。
実稼働環境では、webpackが代わりにファイルローダーを使用するように、バイト制限の値を変更する必要があります。
アプリをイジェクトする必要がある場合は、webpack.config.prod.js
ファイルを変更し、url-loader
の制限を10
に変更してください。
{
test: [/\.bmp$/, /\.gif$/, /\.jpe?g$/, /\.png$/],
loader: require.resolve('url-loader'),
options: {
limit: 10,
name: 'static/media/[name].[hash:8].[ext]',
},