Babel 5에서 6으로 업그레이드하면 일부 import 문이 더 이상 작동하지 않습니다.
개요
여기에는 두 개의 JavaScript 파일이 있습니다.
magica.jsconst magica = {
madoka: '鹿目 まどか',
sayaka: '美樹 さやか',
mami: '巴 マミ',
kyoko: '佐倉 杏子',
homura: '暁美 ほむら'
};
export default magica;
kyubey.jsimport { mami, sayaka } from './magica.js';
console.log(mami); // 巴 マミ
console.log(sayaka); // 美樹 さやか
$ babel-node --version
5.8.23
$ babel-node kyubey.js
巴 マミ
美樹 さやか
이 kyubey.js 의 import
문입니다만, 오브젝트를 분할 대입 하는 때와 같이 1 , 오브젝트로부터 임의의 값만을 꺼낼 수 있으므로, 편리하고 자주(잘) 사용하고 있었습니다. 다음과 같은 이미지입니다.
const magica = {
madoka: '鹿目 まどか',
sayaka: '美樹 さやか',
mami: '巴 マミ',
kyoko: '佐倉 杏子',
homura: '暁美 ほむら'
};
({ mami, sayaka } = magica);
console.log(mami); // 巴 マミ
console.log(sayaka); // 美樹 さやか
그런데 Babel 6으로 업데이트하면 kyubey.js가 구문 오류로 작동하지 않습니다.
$ babel-node --version
6.22.2
$ babel-node kyubey.js
undefined
undefined
undefined
…이런 건 너무 있어
원인
처음에는 버전 업을 잘못해서 Babel 환경이 이상하게 되어 버렸는지 생각했습니다만, 그렇지 않았습니다. 아무래도, 앞서 소개한 import
문장의 작성 방법이 ECMASCript 의 사양에 등을 쓴 쓰기 방법이었던 것 같습니다.
Babel 6 에서 이 쓰는 방법이 제거될 때까지의 경위는 아래의 공식 issue 에 있었습니다.
const magica = {
madoka: '鹿目 まどか',
sayaka: '美樹 さやか',
mami: '巴 マミ',
kyoko: '佐倉 杏子',
homura: '暁美 ほむら'
};
export default magica;
import { mami, sayaka } from './magica.js';
console.log(mami); // 巴 マミ
console.log(sayaka); // 美樹 さやか
$ babel-node --version
5.8.23
$ babel-node kyubey.js
巴 マミ
美樹 さやか
const magica = {
madoka: '鹿目 まどか',
sayaka: '美樹 さやか',
mami: '巴 マミ',
kyoko: '佐倉 杏子',
homura: '暁美 ほむら'
};
({ mami, sayaka } = magica);
console.log(mami); // 巴 マミ
console.log(sayaka); // 美樹 さやか
$ babel-node --version
6.22.2
$ babel-node kyubey.js
undefined
undefined
처음에는 버전 업을 잘못해서 Babel 환경이 이상하게 되어 버렸는지 생각했습니다만, 그렇지 않았습니다. 아무래도, 앞서 소개한
import
문장의 작성 방법이 ECMASCript 의 사양에 등을 쓴 쓰기 방법이었던 것 같습니다.Babel 6 에서 이 쓰는 방법이 제거될 때까지의 경위는 아래의 공식 issue 에 있었습니다.
해결책
default export를 사용하는 경우
magica.jsconst magica = {
madoka: '鹿目 まどか',
sayaka: '美樹 さやか',
mami: '巴 マミ',
kyoko: '佐倉 杏子',
homura: '暁美 ほむら'
};
export default magica;
kyubey.jsimport magica from './magica.js';
const { mami, sayaka } = magica;
console.log(mami);
console.log(sayaka);
$ babel-node --version
6.22.2
$ babel-node kyubey.js
巴 マミ
美樹 さやか
일단 객체에 import
그런 다음 변수에 분할 할당합니다.
named export를 사용하는 경우
magica.jsconst madoka = '鹿目 まどか';
const sayaka = '美樹 さやか';
const mami = '巴 マミ';
const kyoko = '佐倉 杏子';
const homura = '暁美 ほむら';
export { madoka, sayaka, mami, kyoko, homura };
kyubey.jsimport { mami, sayaka } from './magica.js';
console.log(mami);
console.log(sayaka);
$ babel-node --version
6.22.2
$ babel-node kyubey.js
巴 マミ
美樹 さやか
또는 export
모든 것을 읽는 경우,
kyubey.jsimport * as magica from './magica.js';
const { mami, sayaka } = magica;
console.log(mami);
console.log(sayaka);
$ babel-node --version
6.22.2
$ babel-node kyubey.js
巴 マミ
美樹 さやか
요약
Babel 5 에서 export default
한 객체를 분할 대입의 기법으로 import
하고 있는 코드를 쓰고 있으면 Babel 6 에서 거동이 바뀌므로, 만약 낡은 버젼의 Babel 를 사용하고 있는 경우는 재작성합시다.
참고
const magica = {
madoka: '鹿目 まどか',
sayaka: '美樹 さやか',
mami: '巴 マミ',
kyoko: '佐倉 杏子',
homura: '暁美 ほむら'
};
export default magica;
import magica from './magica.js';
const { mami, sayaka } = magica;
console.log(mami);
console.log(sayaka);
$ babel-node --version
6.22.2
$ babel-node kyubey.js
巴 マミ
美樹 さやか
const madoka = '鹿目 まどか';
const sayaka = '美樹 さやか';
const mami = '巴 マミ';
const kyoko = '佐倉 杏子';
const homura = '暁美 ほむら';
export { madoka, sayaka, mami, kyoko, homura };
import { mami, sayaka } from './magica.js';
console.log(mami);
console.log(sayaka);
$ babel-node --version
6.22.2
$ babel-node kyubey.js
巴 マミ
美樹 さやか
import * as magica from './magica.js';
const { mami, sayaka } = magica;
console.log(mami);
console.log(sayaka);
$ babel-node --version
6.22.2
$ babel-node kyubey.js
巴 マミ
美樹 さやか
Babel 5 에서
export default
한 객체를 분할 대입의 기법으로 import
하고 있는 코드를 쓰고 있으면 Babel 6 에서 거동이 바뀌므로, 만약 낡은 버젼의 Babel 를 사용하고 있는 경우는 재작성합시다.참고
babel/babel > Issues > #3049 에서 "That's not destructuring, it just has similar syntax. It's an ImportsList."라고 언급되었습니다. ↩
Reference
이 문제에 관하여(Babel 5에서 6으로 업그레이드하면 일부 import 문이 더 이상 작동하지 않습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/QUANON/items/53752d9c4d162465defb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)