2016-06-27 25 views
5

Başlıksız olarak tam olarak ithalat ve ihracat yapmanın ne olduğu konusunda herhangi bir açıklama bulunmamaktadır. Birisi içe aktarmayı salt okunur bir görünüm olarak tanımlar. Aşağıdaki kodu kontrol ederek iki modül aynı sayaç modülü ve ilk modül artışı sayacı içe eğeres6 salt okunur şekilde anlaşmayı anlama

// lib/counter.js 
export let counter = 1; 

export function increment() { 
    counter++; 
} 

export function decrement() { 
    counter--; 
} 


// src/main.js 
import * as counter from '../../counter'; 

console.log(counter.counter); // 1 
counter.increment(); 
console..log(counter.counter); // 2 

Sorum şu, artırılır ikinci modül ayrıca sayaç görecek? Kapağın altında "ithalat" ve "ihracat" ne yapıyor? Artırma işlevi hangi bağlamda yürütülür? Arttırma fonksiyonunun değişken nesnesi nedir?

// lib/counter.js 
export let counter = 1; 

export function increment() { 
    counter++; 
} 

export function decrement() { 
    counter--; 
} 


// src/main1.js 
import * as counter from '../../counter'; 

console.log(counter.counter); // 1 
counter.increment(); 
console..log(counter.counter); // 2 


// src/main2.js 
import * as counter from '../../counter'; 
console.log(counter.counter); // what is the result of this, 1 or 2? 

O "ihracat" farklı modüllerin ulaşılabilir küresel nesne yaratıyor ve bu nesne ihraç fonksiyonun bağlamını ayarlıyor geliyor bana. Bu durumda, tasarım benim için kablolu, çünkü modüller diğer modüllerin ne yaptığının farkında değil. Eğer iki modül aynı modülü (sayaç) ithal ediyorsa, bir modül değer (sayaç) değişmesine neden olan arttırma fonksiyonunu (yukarıdaki örnek) çağırır, diğer modül bunu bilmez.

+0

Anlaşılan sende olmayan okumak http://exploringjs.com/es6/ch_modules.html veya https://hacks.mozilla.org/2015/08/es6-in-depth-modules/ – Bergi

cevap

1

Yanıt, giriş modülünüzün ne olduğuna bağlıdır.

// index.js 
import "./main1"; 
import "./main2"; 

Ardından çıkışı: Örneğin, bir giriş modülü tanımlarsanız

1 // from main1 
2 // from main1 
2 // from main2 

ES6 modülleri tutma durumunu izin verilir, ancak doğrudan diğerleri modülleri durumunu işlemek için izin verilmez. Modül, bir değiştirici işlevini (increment yönteminiz gibi) gösterebilir.

Biraz deneme yapmak isterseniz, rollupjs standart ithalat ve ihracatın nasıl işleyeceğini gösteren güzel bir çevrimiçi demoya sahiptir. Belirtildiği gibi

+0

modüllerin ise devlet var. Aynı modülü kullanan farklı geliştiriciler bu durumdan nasıl haberdar olabilirler.Örneğin, iki kişi aynı modülü kullanarak iki farklı modül geliştiriyorlar, diğer geliştiricinin bu paylaşım modülünün durumunu nasıl değiştireceğini bilmiyorlar. –

+2

@JinxinNi: Bir modül birden çok şey tarafından kullanılacaksa, durumu olmamalıdır. Kadar basit. – Bergi

+0

@JinxinNi Bergi haklı, modüller devlete sahip olabilir, ancak buna güvenmek kesinlikle kötü bir uygulamadır. Nedeni tam olarak ne işaret ettiysen. –

1

bakınız bölüm 16.3.5 here

: Bir ES6 modülünün

ithalatı ihraç kuruluşlar hakkında görüş salt okunur. Bu, aşağıdaki kodda gösterildiği gibi, modül gövdeleri içinde bildirilen değişkenlere olan bağlantıların canlı kaldığı anlamına gelir. Bu başlık altında nasıl çalışır

//------ lib.js ------ 
export let counter = 3; 
export function incCounter() { 
    counter++; 
} 

//------ main.js ------ 
import { counter, incCounter } from './lib'; 

// The imported value `counter` is live 
console.log(counter); // 3 
incCounter(); 
console.log(counter); // 4 

bir later section açıklanmıştır.

İthalat görünümleri aşağıdaki avantajlara sahip olarak:

  • Hatta niteliksiz ithalat için, döngüsel bağımlılıkları sağlar.
  • Kalifiye ve nitelendirilmemiş ithalatlar aynı şekilde çalışır (her ikisi de indirmelerdir).
  • Kodu birden çok modüle ayırabilirsiniz ve çalışmaya devam edecektir ( içe aktarma değerlerini değiştirmeyi denediğiniz sürece).
+0

, mümkünse daha net hale getirmek için örnekler sunabilirsiniz – agent47

İlgili konular