2015-04-24 20 views
54

Nói rằng tôi có một mô-đun (./my-module.js) có một đối tượng mà phải là giá trị trả về của nó:ES6 xuất khẩu tất cả các giá trị từ đối tượng

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

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

Vì vậy, tôi có thể nhập họ thích:

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

Các cách duy nhất tôi tìm thấy là mã hóa cứng xuất khẩu:

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

Điều gì không động.

Có thể xuất tất cả các giá trị từ một đối tượng không?

+3

Không, bởi vì giá trị tự động tính toán không thể được xuất khẩu tĩnh. – Bergi

Trả lời

23

Không có vẻ như vậy. Trích dẫn từ ECMAScript 6 modules: the final syntax:

Bạn có thể thắc mắc - tại sao chúng ta cần đặt tên là xuất nếu chúng ta chỉ đơn giản là xuất các đối tượng mặc định (như CommonJS)? Câu trả lời là bạn không thể thực thi cấu trúc tĩnh thông qua các đối tượng và mất tất cả các lợi thế liên quan (được mô tả trong phần tiếp theo).

+1

Bạn có thể sử dụng một mảng nếu chúng có cặp tên-giá trị không? –

6

Tôi chỉ cần thực hiện việc này cho tệp cấu hình.

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

export default config; 

Bạn có thể làm điều đó như thế này

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

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

này được sử dụng tâm trí nguyên cảo bạn.

+9

Bạn có thể thực hiện 'nhập cấu hình từ './config';' –

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

Điều này sẽ hoạt động sau khi đã thực sự nằm trong trình duyệt.

Bạn cũng có thể thêm export default {a, b, c}; mà sẽ cho phép bạn nhập tất cả các giá trị như một đối tượng w/o * as, tức là import myModule from 'my-module';

Nguồn:

41

Tôi thực sự không thể đề xuất giải pháp hoạt động nhưng nó hoạt động. Thay vì xuất một đối tượng, bạn sử dụng đặt tên là xuất mỗi thành viên. Trong một tệp khác, nhập khẩu xuất khẩu có tên của mô-đun đầu tiên vào một đối tượng và xuất đối tượng đó làm mặc định. Ngoài ra xuất khẩu tất cả mặt hàng xuất khẩu được đặt tên từ các mô-đun đầu tiên sử dụng export * from './file1';

giá trị/value.js

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

export {a, b, c}; 

giá trị/index.js

import * as values from './values'; 

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

index.js

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

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

Tại sao bạn không đề xuất điều này? – jsdario

+1

Có thể vì việc chữa bệnh tồi tệ hơn bệnh tật (trừ khi bạn đang viết một thư viện công khai và bạn thực sự cầu kỳ về cách nhập của nó)? – machineghost

+0

Yea, đó là một bản tóm tắt tốt. Đó là một kỹ thuật tôi sử dụng một lần trong thư viện để giảm tiêu hao. Tôi nghĩ sẽ tốt hơn nếu quản lý xuất khẩu trong một tệp duy nhất mặc dù đó là tác phẩm nhiều hơn cho tác giả thư viện. Kết quả là độ sâu mô-đun ít hơn cho người dùng. – ryanjduffy

6

thử giải pháp xấu xí nhưng hoàn toàn khả thi này:

// 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); 
Các vấn đề liên quan