2016-10-20 53 views
6

Üç yerel npm paketim var: C:\projects\A, C:\projects\B ve C:\projects\main. Main, Webpack ile oluşturulmuş React uygulamasıdır. Main, A ve B, ayrıca A, B bağlıdır. Paketlerin aynı üst klasörde yer alacağını garanti eden kendi "global" paket yöneticimiz var. Ben Main yılında npm install I A veya BYerel paketlere bağlı olan NPM paketini düzgün şekilde yapılandırın

değiştirmek her zaman gerekmez

  1. düğümü'nü (ve webpack en) require çözecektir yerel paketler

  2. :

    Bunları uyacak istiyorum

Bunu Main 's'da yaptım:

.... 
"dependencies": { 
    "A": "file:../A", 
    "B": "file:../B", 
    "react": ... 
    ......... 

Ama garip bir sorun koştu: WebPack inşa başarısız böylece npm, node_modules A tüm paketleri yükleme 's ve B' ın ​​etmez. Ve her seferinde npm install'u çalıştırmam gerekiyor.

Tüm yerel paketleri simetrik olarak değiştiren linklocal ürününü buldum ve buldum. bir kez NPM sırasında yüklemek, sonra tekrar Yani LINKLOCAL

sonra: genellikle iki kez bağlantılı bağımlılıkları bağımlılıkları yükleme sonunda gibi

LINKLOCAL bağlantılı bağımlılıkları bağımlılıkları yüklemez: Ama başka bir sorun koştu postinstall komut dosyasında linklocal ve npm install komut dosyalarını yeniden çalıştırdım. Ama 3 @ npm sembolik olarak klasörlerle şey yapmadım:

npm WARN update-linked node_modules/A needs updating to 1.0.0 from 1.0.0 but we can't, as it's a symlink 

Sonra her sembolik olarak modülüne gidip oradan npm install çalıştırmak için postinstall değiştirmeye karar verdi. Ve ilk görüşte çalıştı: yükleme yanı sıra webpack paketleme koştu. Ancak Webpack, React'ın iki kopyasını paketlemeye başladı (yasaklandı).

Paketlerim nasıl düzgün yapılandırılır?

cevap

0

Eğer yerel kalkınma versiyonlarına sembolik korumak için yerel npm link kullanabilirsiniz ..

Yani, Main içinde package.json reset yayınlanan paketler aslında yaşayacak yerde işaret etmek:

"dependencies": { 
    "A": "<PUBLISHED_PACKAGE_REPO>", 
    "B": "<PUBLISHED_PACKAGE_LOCATION>", 
    "react": ... 

Bu sağlıyor Projeniz her zaman CI/diğer makineler vb.

Ardından, "proje A" dizinine gidin ve bir bağlantı oluşturmak:

cd projects\A 
npm link 

Bu C:\projects\A işaret eden bir npm özgü sembolik yaratacaktır.

Sonra B projesi için aynı şeyi:

cd projects\B 
npm link 

Artık yaratılmış hem proje bağlantıları vardır ve sadece gerçekte Main projeye onları bağlamak gerekir:

cd projects\Main 
npm link A 
npm link B 

da A ise B'a bağlı olarak, bu projeleri de bağlamanız yeterlidir:

Eğer gelişmekte olan ve sadece bağlantısını kaldırın ve yüklemek package.json belirtilen ne olursa olsun kullanmak istediğiniz bittiğinde

: Ben şahsen benim bağımlılıkları paketlemek için npm pack kullanmak ve daha sonra yüklemek npm `kullanarak benim ana projede bunları yüklemek

cd projects\Main 
npm unlink A 
npm unlink B 
npm install 
0

. /path/to/pack/result.tgz Bu A ve B yapılan her değişiklikleri yayınlamaya önlemek ancak

npm install sizi engellemez here

olarak ayrıntılı Main her zaman paket A'da A veya B

1

değiştirmek ve paket B webpackyürütmek bir önyükleme komut olabilir. Bu, tüm bağımlılıkları çözmelidir. Eğer Yine bu kütüphaneyi wml kontrol dist paket A'nın (build) klasörüne ve B
yönlendirmelidir ana paketin üzerinde
, bu senkronize yerel bağımlılıkları tutmaya yardımcı olabilir.

package.json:

"scripts": { "preinstall": "webpack" }

1

diğer makinelerde Main inşa etmek gerekmiyorsa sadece Ana projenizde böyle bir şey/yapabileceğini

let C = require('C:\projects\A\index.js') 

Yoksa olabilir ile

require('C:\projects\A\index.js') 

Ve başka bir dal:

require('C')