Ecmascript 6에서 json 파일에 어떻게 액세스합니까? 다음은 작동하지 않습니다.
import config from '../config.json'
JavaScript 파일을 가져 오려고하면 제대로 작동합니다.
webpack
하고 json-loader
사용하는 것입니다.
Ecmascript 6에서 json 파일에 어떻게 액세스합니까? 다음은 작동하지 않습니다.
import config from '../config.json'
JavaScript 파일을 가져 오려고하면 제대로 작동합니다.
webpack
하고 json-loader
사용하는 것입니다.
답변:
간단한 해결 방법 :
config.js
export default
{
// my json here...
}
그때...
import config from '../config.js'
기존 .json 파일을 가져올 수는 없지만 작업을 수행합니다.
"postbuild": "node myscript.js"
replace-in-file을 사용하여 나를 위해 package.json 파일에 단계를 추가했습니다 . myscript.js const replace = require('replace-in-file'); const options = { files: '_demo/typedocs/navexReact.td.js', from: /{/, to: 'export default {', }; const convertJsonOutputToJsModule = async () => { try { const changes = await replace(options) console.log('Converted json to module in files:', changes.join(', ')); } catch (error) { console.error('Error occurred:', error); } } convertJsonOutputToJsModule()
TypeScript 또는 Babel을 사용하면 코드에서 json 파일을 가져올 수 있습니다.
// Babel
import * as data from './example.json';
const word = data.name;
console.log(word); // output 'testing'
참조 : https://hackernoon.com/import-json-into-typescript-8d465beded79
Loading failed for the module with source "example.json"
; Chrome에서 "모듈 스크립트를로드하지 못했습니다 : 서버가 자바 스크립트가 아닌 MIME 유형 인"application / json "으로 응답했습니다. HTML 사양에 따라 모듈 스크립트에 대해 엄격한 MIME 유형 검사가 시행됩니다."
tsc
했지만 실제로는 그렇지 않습니다. 브라우저에서 기본적으로 ES6 모듈을 실행하려고하는데 ( <script type="module">
) 위의 오류는 해당 import
라인을 직접 실행하면 발생하는 오류 입니다. 내가 틀렸다면 나를 정정하십시오. 실제로 ES6에서 JSON에서 가져올 수 있음을 의미했습니다.
import
명령문을 노드로 변환하고 require()
(시도하십시오!) 두 번째 링크는 JSON 가져 오기에 대해 아무 것도 말하지 않습니다. 문제는 여기에 파서 또는 모듈 시스템으로하지 않습니다, 그것은이다 로더 - 브라우저의 로더는 자바 스크립트 다른 아무것도 가져 오기가 해결되지 않습니다. 빌드 툴체인이 추상화하지 않더라도 항상 AJAX 호출 (fetch / XHR)을 사용하고 결과를 구문 분석해야합니다.
불행히도 ES6 / ES2015는 모듈 가져 오기 구문을 통한 JSON 로딩을 지원하지 않습니다. 그러나 ...
당신이 그것을 할 수있는 많은 방법이 있습니다. 필요에 따라 JavaScript로 파일을 읽는 방법을 살펴 window.FileReader
보거나 (브라우저에서 실행중인 경우 옵션 일 수 있음) 다른 질문에 설명 된대로 다른 로더를 사용할 수 있습니다 (NodeJS를 사용한다고 가정).
IMO의 가장 간단한 방법은 JSON을 JS 객체로 ES6 모듈에 넣고 내보내는 것입니다. 그렇게하면 필요한 곳으로 가져올 수 있습니다.
당신이 JSON 파일의 가져 오기, 웹팩을 사용하는 경우 또한 가치가 주목 기본적으로 작동합니다 (이후 webpack >= v2.0.0
).
import config from '../config.json';
노드를 사용하는 경우 다음을 수행 할 수 있습니다.
const fs = require('fs');
const { config } = JSON.parse(fs.readFileSync('../config.json', 'utf8')) // May be incorrect, haven't used fs in a long time
또는
const evaluation = require('../config.json');
// evaluation will then contain all props, so evaluation.config
// or you could use:
const { config } = require('../config.json');
그밖에:
// config.js
{
// json object here
}
// script.js
import { config } from '../config.js';
또는
import * from '../config.json'
빌드 도구 및 JSON 파일 내의 데이터 구조에 따라을 가져와야 할 수도 있습니다 default
.
import { default as config } from '../config.json';
예를 들어 사용 Next.js
resolveJsonModule
것입니다 true
당신을 tsconfig.json
.
조금 늦었지만 package.json 버전을 기반으로 앱 버전을 보내는 것과 관련된 웹 응용 프로그램에 대한 분석을 제공하려고 시도하면서 동일한 문제가 발생했습니다.
구성은 다음과 같습니다. React + Redux, Webpack 3.5.6
json-loader는 Webpack 2 이상부터 많은 작업을 수행하지 않으므로 약간의 문제를 해결 한 후 제거했습니다.
실제로 나를 위해 일한 솔루션은 단순히 가져 오기를 사용하는 것입니다. 이것은 아마도 비동기 접근 방식에 적응하기 위해 일부 코드 변경을 시행 할 것이지만 특히 페치가 즉석에서 json 디코딩을 제공한다는 사실을 감안할 때 완벽하게 작동했습니다.
그래서 여기 있습니다 :
fetch('../../package.json')
.then(resp => resp.json())
.then((packageJson) => {
console.log(packageJson.version);
});
여기서 특별히 package.json에 대해 이야기하고 있기 때문에 파일은 일반적으로 프로덕션 빌드 (또는 그 문제에 대한 개발자)에 번들로 제공되지 않으므로 CopyWebpackPlugin을 사용하여 액세스해야합니다. 가져 오기를 사용할 때.
file:///
URL에서 로드 하는 것입니다.
현재 import
JSON MIME 형식의 파일 은없고 JavaScript MIME 형식의 파일 만 있습니다. 향후 추가 될 기능 일 수 있습니다 ( 공식 토론 ).
fetch('./file.json')
.then(response => response.json())
.then(obj => console.log(obj))
현재 --experimental-json-modules
플래그 가 필요합니다 . 그렇지 않으면 기본적으로 지원되지 않습니다.
달리기
node --input-type module --experimental-json-modules --eval "import obj from './file.json'; console.log(obj)"
콘솔에 출력되는 obj 컨텐츠를 참조하십시오.