Làm cách nào để xuất đối tượng nhập trong ES6?


242

Trường hợp sử dụng rất đơn giản: Tôi chỉ muốn xuất một đối tượng có tên giống như nó đã được nhập.

ví dụ:

import React from 'react';
export React;

dường như không hiệu quả. Tôi phải viết:

import React from 'react';
export const React = React;

Nhưng điều này thật kỳ quặc. Cách đúng đắn để làm điều này là gì?

CẬP NHẬT :

Cảm ơn đã giúp đỡ và tham khảo. Tôi đã giải quyết vấn đề của mình với nhiều manh mối. Tôi muốn chia sẻ một số trường hợp phổ biến cho tôi và các giải pháp.

xuất nhập khẩu

import d, {obj} from '...';

export {obj, d};
export {obj as name1, d as name2};

tái xuất tất cả hàng nhập khẩu có tên

export * from '...';
export * as name1 from '...';

tái xuất một số hàng nhập khẩu có tên

export {a, b as name1} from '...';

tái xuất nhập mặc định như xuất mặc định

export {default} from '...';

tái xuất nhập mặc định như xuất khẩu có tên

export {default as name1} from '...';

Tại sao bạn sẽ xuất khẩu phản ứng?
omarjmh

bạn có thể export {React}nhưng một lần nữa, nếu bạn cần React ở đâu đó, bạn chỉ nên nhập nó ở đó.
loganfsmyth

2
Phản ứng xuất khẩu chỉ là một ví dụ, trên thực tế, tôi muốn tổ chức một số dự án để người dùng có thể nhập một số đối tượng trong đường dẫn cấp cao và ngắn hơn.
Yao Zhao

Cảm ơn bạn rất nhiều vì bản cập nhật đó. Nó đã giải quyết mọi vấn đề tôi gặp phải với ES6 / 7. Tôi đề nghị bạn thêm điều này như một câu trả lời và chấp nhận nó.
Florian Wendelborn

12
export * as name1 from '...';điều này không làm việc cho tôi (sử dụng webpack 2). Có ý kiến ​​gì không?
Thực thể đen

Câu trả lời:


131

Tôi thường làm như sau trong các tệp index.js tạo một số tệp:

export {default as SomeClass} from './SomeClass';
export {someFunction} from './utils';
export {default as React} from 'react';

Mục blog này cung cấp một số ví dụ bổ sung tốt đẹp.

Lưu ý quan trọng

Bạn nên lưu ý quy tắc eslint này khi truy cập các hàng nhập khẩu đã xuất này. Về cơ bản, trong một tệp khác, bạn không nên:

import SomeClassModule from 'SomeClass/index.js';
SomeClassModule.someFunction(); // Oops, error

Bạn nên làm điều này:

import SomeClassModule, {someFunction} from 'SomeClass/index.js';
someFunction(); // Ok

36

Bạn có thể xuất tệp đã nhập với cấu trúc như vậy

import First from './First'
import Second from './Second'
/..../
export { First, Second }

2

Đối với trường hợp sử dụng của tôi, tôi rõ ràng cần một số loại câu lệnh nhập rõ ràng để babel có thể chuyển mã es7 của tôi sang es5.

Các kết quả sau đây trong một lỗi You gave us a visitor for the node type "ForAwaitStatement" but it's not a valid type:

require( 'babel-core/register' ); //transpiles es7 to es5
export {default} from './module_name'

Giải pháp của tôi là nhập rõ ràng mô-đun bằng cách sử dụng require():

require( 'babel-core/register' );
export default require( './module_name' ).default;

-1

Đưa ra ./foo.js:

const Foo = class {
  talk() { return 'hello'; }
};

export default Foo;

Sau đó, bạn sẽ có thể làm điều này:

import Foo from './foo';

let foo = new Foo();

foo.talk(); // => 'hello';

Cú pháp ít nhiều tuân theo mô hình common.s module.exports, nơi bạn sẽ làm điều này:

const Foo = class {

};

module.exports = Foo;

Thêm ở đây:

http://exploringjs.com/es6/ch_modules.html


Đó không hoàn toàn là những gì câu hỏi về?
Dan Dascalescu

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.