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.