İş alanları

Çalışma alanları, Yarn 1.0’dan başlayarak paket mimarisini varsayılan şekilde kurmanın yeni bir yoludur. Tek bir girişte hepsini kurmak için yalnızca yarn install ‘u çalıştırmanız gerekecek şekilde birden fazla paketi kurmanıza izin verir.

Bunu yapmayı neden istiyorsunuz?

  • Bağlılıklarınız birbirine bağlı olabilir; bu, çalışma alanlarınızın her zaman mevcut olan en güncel kodu kullanırken birbirine bağlı olabilecekleri anlamına gelir. Bu aynı zamanda yarn link ‘dan daha iyi bir sistemdir çünkü tüm sistemi etkilemek yerine sadece sizin çalışma alanınızı etkiler.

  • Bütün proje bağlılıklarınızın birlikte kurulacak olması Yarn’a onları en uygun hale getirebilmesi için imkan sağlar.

  • Yarn her proje için farklı kilit dosyası yerine tek bir kilit dosyası kullanır. Bu sayede uyuşmazlık azalır ve gözden geçirmek daha kolay olur.

Nasıl kullanılır?

Aşağıdakileri bir package.json dosyasına ekleyin. Bundan sonra, bu dizini “çalışma kökü” olarak adlandıracağız:

package.json

{
  "private": true,
  "workspaces": ["workspace-a", "workspace-b"]
}

private: true ‘nun gerekli olduğunu not edin! Çalışma alanları yayınlanmak üzere değildir, onların yanlışlıkla ortaya çıkmasını engellemek için bu güvenlik önlemini ekledik.

Dosya oluşturulduktan sonra workspace-a ve workspace-bisimli iki yeni alt klasör oluşturun. Her birinde, aşağıdaki içeriğe sahip başka bir package.json dosyası oluşturun:

workspace-a/package.json:

{
  "name": "workspace-a",
  "version": "1.0.0",

  "dependencies": {
    "cross-env": "5.0.5"
  }
}

workspace-b/package.json:

{
  "name": "workspace-b",
  "version": "1.0.0",

  "dependencies": {
    "cross-env": "5.0.5",
    "workspace-a": "1.0.0"
  }
}

Son olarak, ideal olarak çalışma alanı kökü içine yarn yükleme çalıştırın. Eğer her şey düzgün çalışıyorsa, şimdi benzer bir dosya hiyerarşisi olmalıdır:

/package.json
/yarn.lock

/node_modules
/node_modules/cross-env
/node_modules/workspace-a -> /workspace-a

/workspace-a/package.json
/workspace-b/package.json

Ve bu kadar! workspace-b içerisinde konumlanmış bir dosyadan workspace-a edinilirken, GitHub’ta yayınlanan yerine artık şuanda projenizin içerisinde konumlandırılmış asıl kodu kullanacak ve cross-env paketi başarıyla izole edildi ve workspace-a ve workspace-b tarafından kullanılmak üzere projenizin temeline yerleştirildi.

Lerna ile nasıl kıyaslanıyor?

Yarn’s workspaces are the low-level primitives that tools like Lerna can (and do!) use. Lerna’nın sunduğu üst düzey özelliği hiçbir zaman desteklemeyecekler ancak çözüm ve bağlantı adımlarını Yarn’ın kendi içinde uygulayarak yeni kullanımları etkinleştirmek ve performansı arttırmak istiyoruz.

İpuçları & Püf Noktalar

  • workspaces alanı, her çalışma alanına giden yolları içeren bir dizidir. Her birini takip etmek sıkıcı olabileceğinden, bu alan aynı zamanda şu kalıpları kabul eder! Örneğin, Babel tüm paketlerini yalnızca bir packages/* aracılığıyla anlatır/belgeler.

  • Çalışma alanı büyük ölçekli uygulamalarda kullanılmak için yeterince kararlıdır ve standart kurulumda herhangi bir davranışı değiştirmemelidir. Bununla birlikte, çalışma alanının bazı sorunlara neden olduğunu düşünüyorsanız, Yarnrc dosyasına aşağıdaki satırı ekleyebilir ve devre dışı bırakabilirsiniz:

      çalışma alanları-deneysel yanlış
    

Sınırlamalar & Uyarılar

  • Paket düzeni çalışma alanı arasında farklı olacak ve kullanıcılar alacak (çalışma bağımlılıkları daha yüksek dosya hiyerarşisi içine çekilecek). Kaldırma süreci standartlaştırılmadığından bu düzen hakkında varsayımlar yapmak tehlikeli olur, bu yüzden teorik olarak burada yeni bir şey yok.

  • In the example above, if workspace-b depends on a different version than the one referenced in workspace-a’s package.json, the dependency will be installed from Github rather than linked from your local filesystem. Çünkü yeni versiyonları kurabilmek için bazı paketler aslında önceki versiyonlara ihtiyaç duyar. (Babel bunlardan bir tanesi).

  • Bir çalışma alanında paketleri paylaşırken dikkatli olun. If you are preparing your next release and you decided to use a new dependency but forgot to declare it in the package.json file, your tests might still pass locally if another package already downloaded that dependency into the workspace root. Ancak, bağımlılık listesi şimdi eksik olduğundan, yeni bağımlılık karşıdan yüklemek için hiçbir yol yok, çünkü bir kayıt defterinden çekin tüketiciler için kırılacak. Şuan, bu senaryoda bir uyarı göstermek için bir yol yok.

  • Workspaces must be children of the workspace root in terms of folder hierarchy. You cannot and must not reference a workspace that is located outside of this filesystem hierarchy.

  • Iç içe geçmiş çalışma alanları şu anda desteklenmiyor.