create-react-app를 사용하고 있습니다. 내 내부 파일에서 내 공용 폴더의 이미지를 호출하려고합니다 src/components
. 이 오류 메시지가 나타납니다.
./src/components/website_index.js 모듈을 찾을 수 없음 : 프로젝트 src / 디렉토리 외부에있는 ../../public/images/logo/WC-BlackonWhite.jpg를 가져 오려고했습니다. src / 외부의 상대적 가져 오기는 지원되지 않습니다. src / 내부로 이동하거나 프로젝트의 node_modules /에서 심볼릭 링크를 추가 할 수 있습니다.
import logo from '../../public/images/logo_2016.png';
<img className="Header-logo" src={logo} alt="Logo" />
나는 당신이 경로로 가져 오기를 할 수 있다고 말하는 많은 것을 읽었지만 여전히 나를 위해 작동하지 않습니다. 도움을 주시면 감사하겠습니다. 나는 이와 같은 많은 질문이 있다는 것을 알고 있지만 모두 로고 나 이미지를 가져 오라고 말하면서 분명히 큰 그림에서 무언가를 놓치고 있습니다.
답변
이것은 create-react-app 개발자가 추가 한 특별한 제한 사항입니다. ModuleScopePlugin
파일이에 있도록하기 위해 구현 되었습니다 src/
. 이 플러그인을 사용하면 앱의 소스 디렉토리에서 상대적인 가져 오기가 외부로 도달하지 않습니다.
eject
create-react-app 프로젝트를 실행 한 후에 만이 기능을 비활성화 할 수 있습니다 .
대부분의 기능과 업데이트는 create-react-app 시스템 내부에 숨겨져 있습니다. eject
당신이 더 이상 일부 기능과 업데이트가 없습니다 만들 경우 . 따라서 웹팩 등을 구성하는 데 포함 된 응용 프로그램을 관리하고 구성 할 준비가되지 않은 경우 eject
작업을 수행하지 마십시오 .
기존 규칙에 따라 재생합니다 (src로 이동). 그러나 이제 제한을 제거하는 방법을 알 수 있습니다 : webpack 구성 파일에서 do eject
및 removeModuleScopePlugin
.
이후 생성이-반응 – 응용 프로그램 v0.4.0NODE_PATH
환경 변수는 절대 수입 경로를 지정할 수 있습니다. 그리고 v3.0.0 NODE_PATH
은 or baseUrl
에서 설정하기 위해 더 이상 사용되지 않습니다 .jsconfig.json
tsconfig.json
절대 가져 오기를 사용하면 기본 URL에 지정된 값을 기준으로 import App from 'App'
대신 사용할 수 있습니다 import App from './App'
.
이 기능은 monorepos 또는 기타 구성 질문에 특히 유용하지만 public
폴더 에서 이미지 나 다른 것을 가져 오는 데는 유용하지 않습니다 .
public
폴더의 내용은 폴더에 배치 build
되고 상대 URL로 제공됩니다. 또한 가져온 모든 내용은 webpack에서 처리되며 build
폴더 에도 저장됩니다.
public
폴더 에서 무언가를 가져 오면 아마도 그 것이 폴더에 복제 build
되고 두 가지 다른 URL (또는 다른로드 방법)로 사용 가능하게되어 궁극적으로 패키지 다운로드 크기가 악화됩니다.
src 폴더 에서 가져 오는 것이 바람직하며 장점이 있습니다. 모든 것은 웹팩에 의해 최적의 크기 와 최적의 로딩 효율을 위해 덩어리로 번들에 포장 될 것입니다 .
중간 솔루션, 즉있다 재배 선에 프로그래밍 방식으로 웹팩 설정을 수정할 수 있습니다 시스템은. 그러나 플러그인을 제거 하는 것은 좋은 해결책 이 아닙니다 . 와 비슷한 완전히 작동하는 추가 디렉토리를 추가하는 것이 좋습니다 .ModuleScopePlugin
src
현재 루트 폴더 create-react-app
이외의 추가 디렉토리는 지원하지 않습니다 src
. 이것은 react-app-rewire-alias를 사용하여 수행 할 수 있습니다
답변
패키지 react-app-rewired 를 사용하여 플러그인을 제거 할 수 있습니다. 이렇게하면 꺼내지 않아도됩니다.
npm 패키지 페이지의 단계를 따르고 (패키지를 설치하고 package.json 파일에서 호출을 뒤집 음) 다음과 config-overrides.js
유사한 파일을 사용 하십시오.
const ModuleScopePlugin = require('react-dev-utils/ModuleScopePlugin');
module.exports = function override(config, env) {
config.resolve.plugins = config.resolve.plugins.filter(plugin => !(plugin instanceof ModuleScopePlugin));
return config;
};
이렇게하면 사용 된 WebPack 플러그인에서 ModuleScopePlugin이 제거되지만 나머지는 그대로두고 꺼내야 할 필요성이 제거됩니다.
답변
다른 사람의 답변에 조금 더 많은 정보를 제공합니다. .png 파일을 사용자에게 전달하는 방법에 관한 두 가지 옵션이 있습니다. 파일 구조는 선택한 방법을 따라야합니다. 두 가지 옵션은 다음과 같습니다.
-
import x from y
react-create-app와 함께 제공된 모듈 시스템 ( )을 사용하여 JS와 번들로 묶습니다.src
폴더 안에 이미지를 넣습니다 . -
public
폴더 에서 제공하고 노드가 파일을 제공하게하십시오. create-react-app에는 분명히 환경 변수가 있습니다 (예 🙂<img src={process.env.PUBLIC_URL + '/img/logo.png'} />;
. 즉, React 앱에서 참조 할 수는 있지만 일반적인 GET 요청에서 브라우저가 별도로 요청하여 노드를 통해 제공 할 수 있습니다.
출처 : create-react-app
답변
이미지가 공용 폴더에 있으면 사용해야합니다.
"/images/logo_2016.png"
당신의 <img>
src
대신 수입의
'../../public/images/logo_2016.png';
이 작동합니다
<img className="Header-logo" src="/images/logo_2016.png" alt="Logo" />
답변
당신은 이동해야 WC-BlackonWhite.jpg
당신에 src
디렉토리. public
디렉토리 (예 : 파비콘 등) HTML에 직접 연결되도록 당신이 번들로 직접 가져 오는 거라고, 아니 물건을거야 정적 파일입니다.
답변
솔루션을 제공하는 몇 가지 답변이 react-app-rewired
있지만 조금 더 우아한 customize-cra
특수 removeModuleScopePlugin()
API를 노출합니다 . (동일한 솔루션이지만 customize-cra
패키지로 추상화 되었습니다.)
npm i --save-dev react-app-rewired customize-cra
package.json
"scripts": {
- "start": "react-scripts start"
+ "start": "react-app-rewired start",
...
},
config-overrides.js
const { removeModuleScopePlugin } = require('customize-cra')
module.exports = removeModuleScopePlugin()
답변
Craco를 사용하여 제거하십시오.
module.exports = {
webpack: {
configure: webpackConfig => {
const scopePluginIndex = webpackConfig.resolve.plugins.findIndex(
({ constructor }) => constructor && constructor.name === 'ModuleScopePlugin'
);
webpackConfig.resolve.plugins.splice(scopePluginIndex, 1);
return webpackConfig;
}
}
};