2016-05-09 24 views
8

Varlıkları derlemek için webpack 2'yi kullanan bir izomorfik uygulamasına sahibim. Webpack tarafında çalışan ancak işlev bulunmayan sunucu tarafında olmayan System.import ile yığınlama ekledim.Web paketi ile sunucu tarafı tepki 2 System.import

Bunu nasıl çözebilirim? Bu seçeneklerden

+0

CSS modüllerini kullanıyor? CSS'nizi bileşeninize aktardığınızda oluyor mu? – QoP

+0

Sunucuda webpack bağımlı özellikleri kullandığınızda bazı şeyler düşebilir. Sunucu kodunu da paketlemek için web paketi kullanan evrensel bir tepki plakası oluşturdum. Böylece sunucu ve istemci kodu arasında daha fazla paylaşabilirsiniz. [Buraya bakın.] (Https://github.com/ctrlplusb/react-universally) Sizin için yararlı bir referans olabilir. Web paketini çok fazla yorumlamaya çalıştım. – ctrlplusb

cevap

21

izomorf/sunucu tarafı render ile çalışan System.import almak için sunulan birkaç seçenek vardır:

Özellik-algılamak System ve polyfill

Düğüm size bir dizi require() olabilmesinin önünü yerler ve aşağıdaki gibi System.import shimming çalışmalıdır:

Daha sağlam bir uygulama arıyorsanız, hem tarayıcıda hem de düğümde çalışan bir System polyfill uygulayan es6-micro-loader da var.

kullanımlar babel-plugin-system-import-transformer

yani, aşağıdaki şeklini alır eşdeğer UMD desenli System.import yerine:

System.import('./utils/serializer').then(function(module){ 
    console.log(module); 
}); 

ve aşağı dönüştürür:

new Promise(function (resolve, reject) { 
    var global = window; 

    if (typeof global.define === 'function' && global.define.amd) { 
     global.require(['utilsSerializer'], resolve, reject); 
    } else if (typeof module !== 'undefined' && (module.exports && typeof require !== 'undefined') || 
       typeof module !== 'undefined' && (module.component && (global.require && global.require.loader === 'component'))) { 
     resolve(require('./utils/serializer')); 
    } else { 
     resolve(global['utilsSerializer']); 
    } 
}).then(function(module){ 
    console.log(module); 
}); 

veya

Build with Webpack targeting Node (ki parçalarını yüklemek için gerektirir kullanılır):

webpack --target node 
+0

Webpack v2 ve reaktifi kullananlar için buna yardımcı olacak bir kitaplık oluşturdum. [ 'Kod iki-component'] (https://github.com/ctrlplusb/code-split-component) – ctrlplusb

2

Bir ihtiyaçlarınız olabilir:

  1. target 'node' w/WebPack kullanarak kodunuzu derlemek ve paket sunucu tarafı çalıştırın.
  2. Eğer babel-register veya benzeri kullanarak babel ile derliyorsanız, babel-plugin-remove-webpack gibi bir şey deneyebilirsiniz (require.ensure'a ek olarak System.import ile çalışmak için bir PR'ye ihtiyaç duyabilir).
  3. System.import için global bir alam tanımlayın, yalnızca require() 'd module ile çözümlenmiş bir söz verir.
İlgili konular