ES6'da içe aktarılan nesne nasıl dışa aktarılır?


244

Kullanım örneği basit: Ben sadece isme sahip bir nesneyi içe aktarıldığı gibi dışa aktarmak istiyorum.

Örneğin:

import React from 'react';
export React;

ama bu işe yaramıyor. Yazmak zorundayım:

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

Ama bu tuhaf. Bunu yapmanın doğru yolu nedir?

GÜNCELLENDİ :

Yardımlarınız ve referanslarınız için teşekkürler. Sorunumu birçok ipucuyla çözdüm. Bana ve çözümlere ilişkin bazı yaygın durumları paylaşmak istiyorum.

ihracat ithalatı

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

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

adlandırılmış tüm içe aktarmaları yeniden dışa aktar

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

adlandırılmış bazı ithalatları yeniden dışa aktar

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

varsayılan içe aktarmayı varsayılan dışa aktarma olarak yeniden dışa aktar

export {default} from '...';

varsayılan içe aktarmayı adlandırılmış dışa aktarma olarak yeniden dışa aktar

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

neden tepki ihraç edesin?
omarjmh

yapabilirsiniz export {React}bir yere Tepki gerekirse ama yine, sadece orada içe olmalıdır.
loganfsmyth

2
ihracat tepki sadece bir örnektir, aslında, ben kullanıcı bazı nesne daha kısa ve yüksek düzeyde yol alabilir böylece bazı proje düzenlemek istiyorum.
Yao Zhao

Bu güncelleme için çok teşekkür ederim. ES6 / 7 ile yaşadığım her sorunu çözdü. Bunu bir cevap olarak eklemenizi ve kabul etmenizi öneririm.
Florian Wendelborn

12
export * as name1 from '...';bu benim için çalışmıyor (webpack 2 kullanarak). Herhangi bir fikir?
Varlık Siyahı

Yanıtlar:


131

Sık sık birkaç dosya oluşturan index.js dosyalarında aşağıdakileri yaparım:

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

Bu blog girişi bazı güzel ek örnekler sunmaktadır.

Önemli Not

Dışa aktarılan bu içe aktarmalara erişirken bu kuralın farkında olmalısınız . Temel olarak, başka bir dosyada şunları yapmamalısınız:

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

Bunu yapmalısın:

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

36

Bu tür bir yapı ile içe aktarılan dosyayı dışa aktarabilirsiniz

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

2

Benim kullanım durumum için, babel es7 kodumu es5'e aktarabilmesi için açıkça bir tür açık ithalat deyimine ihtiyacım var.

Aşağıdaki hata ile sonuçlanır 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'

Benim çözüm kullanarak modülü açıkça almak oldu require():

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

-1

Verilen ./foo.js:

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

export default Foo;

O zaman bunu yapabilmelisiniz:

import Foo from './foo';

let foo = new Foo();

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

Sözdizimi aşağı yukarı commonjs module.exports modelini izler ve burada bunu yaparsınız:

const Foo = class {

};

module.exports = Foo;

Daha fazla burada:

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


Sorunun konusu tam olarak bu değil miydi?
Dan Dascalescu

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.