[module] ES6는 개체에서 모든 값을 내 보냅니다.

./my-module.js반환 값이어야하는 객체 가있는 모듈 ( )이 있다고 가정 해 보겠습니다 .

let values = { a: 1, b: 2, c: 3 }

// "export values" results in SyntaxError: Unexpected token

따라서 다음과 같이 가져올 수 있습니다.

import {a} from './my-module'           // a === 1
import * as myModule from './my-module' // myModule.a === 1

내가 찾은 유일한 방법은 내보내기를 하드 코딩하는 것입니다.

export let a = values.a
export let b = values.b
export let c = values.c
// or:
export let {a, b, c} = values

동적이 아닙니다.

개체에서 모든 값을 내보낼 수 있습니까?



답변

그렇게 보이지 않습니다. ECMAScript 6 모듈 에서 인용 : 최종 구문 :

궁금 할 것입니다. 기본 내보내기 개체 (예 : CommonJS)가 가능하다면 왜 명명 된 내보내기가 필요합니까? 대답은 객체를 통해 정적 구조를 적용 할 수없고 관련된 모든 이점을 잃을 수 없다는 것입니다 (다음 섹션에서 설명).


답변

솔루션 해결 방법을 실제로 권장 할 수는 없지만 작동합니다. 개체를 내보내는 대신 각 멤버의 명명 된 내보내기를 사용합니다. 다른 파일에서 첫 번째 모듈의 명명 된 내보내기를 개체로 가져오고 해당 개체를 기본값으로 내 보냅니다. 또한 다음을 사용하여 첫 번째 모듈에서 명명 된 모든 내보내기를 내 보냅니다.export * from './file1';

values ​​/ value.js

let a = 1;
let b = 2;
let c = 3;

export {a, b, c};

values ​​/ index.js

import * as values from './value';

export default values;
export * from './value';

index.js

import values, {a} from './values';

console.log(values, a); // {a: 1, b: 2, c: 3} 1


답변

이 추악하지만 실행 가능한 솔루션을 시도하십시오.

// use CommonJS to export all keys
module.exports = { a: 1, b: 2, c: 3 };

// import by key
import { a, b, c } from 'commonjs-style-module';
console.log(a, b, c);


답변

구성 파일에 대해이 작업을 수행해야했습니다.

var config = {
    x: "CHANGE_ME",
    y: "CHANGE_ME",
    z: "CHANGE_ME"
}

export default config;

이렇게 할 수 있습니다

import { default as config } from "./config";

console.log(config.x); // CHANGE_ME

이것은 Typescript를 사용하고 있습니다.


답변

export const a = 1;
export const b = 2;
export const c = 3;

이것은 오늘날 Babel 변환 과 함께 작동 하며 ES2016 모듈의 모든 이점을 실제로 브라우저에 추가 할 때마다 이점을 활용해야합니다.

또한 export default {a, b, c};모든 값을 * as, 즉를 사용하지 않고 객체로 가져올 수 있도록 추가 할 수 있습니다.import myModule from 'my-module';

출처 :


답변

다음을 제안합니다. module.js를 기대 하겠습니다 .

const values = { a: 1, b: 2, c: 3 };

export { values }; // you could use default, but I'm specific here

그런 다음 index.js 에서 할 수 있습니다 .

import { values } from "module";

// directly access the object
console.log(values.a); // 1

// object destructuring
const { a, b, c } = values;
console.log(a); // 1
console.log(b); // 2
console.log(c); // 3

// selective object destructering with renaming
const { a:k, c:m } = values;
console.log(k); // 1
console.log(m); // 3

// selective object destructering with renaming and default value
const { a:x, b:y, d:z = 0 } = values;
console.log(x); // 1
console.log(y); // 2
console.log(z); // 0

객체 파괴의 더 많은 예 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Object_destructuring


답변

모든 대답은 import 문을 변경해야합니다.

사용할 수 있도록하려면 :

import {a} from './my-module'           // a === 1
import * as myModule from './my-module' // myModule.a === 1

질문에서와 같이 my-module하나의 객체로 내보내는 데 필요한 모든 것이 있습니다 (예를 들어 Joi 또는 JSON 스키마로 내 보낸 값의 유효성을 검사하려는 경우 유용 할 수 있음). 다음 my-module중 하나 여야합니다.

let values = { a: 1, b: 2, c: 3 }
let {a, b, c} = values;
export {a, b, c};

또는:

let values = { a: 1, b: 2, c: 3 }
export let {a, b, c} = values;

예쁘지는 않지만 필요한 것으로 컴파일됩니다.

참조 : Babel 예제