2015-08-03 14 views
10

Aynı webpack JS paketini birden çok farklı ortama dağıttığım bir projem var. Bazı ortamlar, JS dosyaları gibi statik varlıklara hizmet vermek için bir CDN kullanır ve bazıları da projenin geri kalanıyla aynı kökten sunulan statik varlıklara sahip değildir ve yoktur.`publicPath`, webpack ile tarayıcıda dinamik olarak yapılandırılabilir mi?

Bu projede, birden çok eşzamansız webpack parçası vardır ve bu nedenle doğru bir şekilde yüklenmeleri için bir publicPath tanımladım.

CD4 olmayan bir bilgisayara konuşlandırırken, webpack, /static/ gibi bir şeyden herşeyi sunarak webpack yapılandırmamda statik olarak yapılandırılmış bir publicPath ile iyi çalışır.

Ancak bir CDN kullanan ortamlara dağıtma yaparken, bu artık uyumsuz yığınlar için işe yaramaz, çünkü web paketi bunlara /static/'dan erişmeye çalışacaktır, bu da ana uygulama sunucusuna değil, CDN'ye sordukları anlamına gelir.

Açıkçası bu sorunu çözmek için projemi CDN'imle publicPath içinde yeniden yapılandırabilirim. Bununla birlikte, her iki durumda da sadece bir dağıtım paketi kullanabilmeyi tercih ederim.

Sunucu tarafı uygulamam, window.staticCDNRoot satırları boyunca CDN kök yolunu ayrıntılandıran bir javascript global sağlar. Ve bu global aynı zamanda CDn olmayan durumlarda da mevcut, sadece uygulama sunucusuna geri dönüyor - bu yüzden her zaman statik varlıkların yükleneceği doğru yere gider.

Webpack'i çalışma zamanında kullanabilmem için herhangi bir yol var mı, bu nedenle publicPath büyük bir korsanlık olmadan window.staticCDNRoot + publicPath olur?

Veya bu sorun için daha iyi bir çözüm var mı?

+0

Merhaba @Mike_Driver size öbek dosya komut kaynağının önünde CDN sunucu yolunu oluşturmak başardık? __webpack_public_path__ çalıştım ama şanssız. Buradaki soruma bakın [link] (http://stackoverflow.com/questions/41467564/webpack-chunk-files-on-cdn-server/41467705?noredirect=1#comment70142227_41467705) – doorman

cevap

9

Tamam, bütün gün bunu arıyordum ve daha sonra burayı göndermeye karar verdikten sonra buldum! Sadece başka durumda herkes

bu ihtiyacı:

çözüm üretim yapı yaparken zamanında __webpack_public_path__ tanımlamaktır. Ancak, modülün sıcak yüklenmesini bozabileceğinden, geliştirme aşamasında kullanmamaya dikkat edin. Burada

diğer bilgiler:

http://webpack.github.io/docs/configuration.html#output-publicpath

+2

Birkaç kişiden bahsettim ama Hayır - bir örnek yükledi, giriş dosyasının bir özüne ve değişkeni nasıl eklediniz? Teşekkürler – redroot

+1

Yapmanız gereken tek şey genel var: '__webpack_public_path__' giriş noktası js dosyasında tanımlamaktır. Yani örneğin 'main.js'imde şöyle bir şey yapıyorum: __webpack_public_path__ = __DEV__? '/ Development /': '/ Production /'; '' __DEV__' '' webpack.DefinePlugin' ile tanımlanmış derleme işlemimde derleme zamanı tanımlı bir seçenektir ancak istediğiniz herhangi bir şey olabilir. –

+0

'__webpack_public_path__', bir [serbest değişken] olmalıdır (https://github.com/webpack/webpack/issues/443#issuecomment-59843035) ve ** global değişken olarak tanımlanmışsa ** çalışmayacaktır. window .__ webpack_public_path__' olarak. – Daniel

İlgili konular