2016-04-01 18 views
1

Tepki-sortable-mixin browserify-shim global'e uymayan bir sorunum var: package.json dosyasındaki sortable bildirimi, Sortable modülüne neden oluyor Paketime paketlen. Diğer modüller ile benzer bir soruna girdim, bu yüzden bölümümde bir yapılandırma sorunu olabilir. Sadece sorunu göstermek için tepki ve reaksiyona-sortbable-mixin amacıyla gerektiren küçük bir test paketi oluşturduk:browserify-shim Sortable global reatable sortable-mixin tarafından tanınmıyor

package.json

{ 
    "name": "test", 
    "version": "1.0.0", 
    "description": "Just a test", 
    "main": "index.js", 
    "dependencies": { 
    "react": "^0.14.8", 
    "sortablejs": "^1.4.2" 
    }, 
    "devDependencies": { 
    "browserify-shim": "^3.8.12" 
    }, 
    "browserify": { 
     "transform": [ 
      "browserify-shim" 
     ] 
    }, 
    "browserify-shim": { 
    "react": "global:React", 
    "sortablejs": "global:Sortable", 
    "sortablejs/react-sortable-mixin": { 
     "depends": "sortablejs:Sortable" 
    } 
    } 
} 

index.js

"use strict"; 
var React = require('react'); 
var SortableMixin = require('sortablejs/react-sortable-mixin'); 

react-sortable-mixin.js (Sadece modülün ilk kısmı ...)

Yukarıda da belirtildiği gibi, ancak sıralanabilir dahil ediliyor ...

% BROWSERIFYSHIM_DIAGNOSTICS=1 browserify index.js -t browserify-shim -o bundle.js 

{ file: '/home/jlafosse/test/index.js', 
    info: 
    { package_json: '/home/jlafosse/test/package.json', 
    packageDir: '/home/jlafosse/test', 
    shim: undefined, 
    exposeGlobals: { react: 'React', sortablejs: 'Sortable' }, 
    browser: undefined, 
    'browserify-shim': 
     { react: 'global:React', 
     sortablejs: 'global:Sortable', 
     'sortablejs/react-sortable-mixin': { depends: 'sortablejs:Sortable' } }, 
    dependencies: { react: '^0.14.8', sortablejs: '^1.4.2' } }, 
    messages: 
    [ 'Resolved "sortablejs/react-sortable-mixin" found in package.json to "/home/jlafosse/test/sortablejs/react-sortable-mixin"', 
    'Found depends "sortablejs" as an installed dependency of the package', 
    { resolved: 
     { '/home/jlafosse/test/sortablejs/react-sortable-mixin': 
      { exports: null, 
      depends: { sortablejs: 'Sortable' } } } } ] } 

{ file: '/home/jlafosse/test/index.js', 
    info: 
    { package_json: '/home/jlafosse/test/package.json', 
    packageDir: '/home/jlafosse/test', 
    resolvedPreviously: true, 
    shim: undefined, 
    exposeGlobals: { react: 'React', sortablejs: 'Sortable' }, 
    browser: undefined, 
    'browserify-shim': 
     { react: 'global:React', 
     sortablejs: 'global:Sortable', 
     'sortablejs/react-sortable-mixin': { depends: 'sortablejs:Sortable' } }, 
    dependencies: { react: '^0.14.8', sortablejs: '^1.4.2' } }, 
    messages: [] } 

ben paket dahil değildir Tepki çünkü küresel pullanma çalıştığını biliyorum:

(function (factory) { 
'use strict'; 

if (typeof module != 'undefined' && typeof module.exports != 'undefined') { 
    module.exports = factory(require('./Sortable')); 
} 
else if (typeof define === 'function' && define.amd) { 
    define(['./Sortable'], factory); 
} 
else { 
    /* jshint sub:true */ 
    window['SortableMixin'] = factory(Sortable); 
} 
})(function (/** Sortable */Sortable) { ... 

İşte browserify gelen tanı çıkışıdır. Ayrıca benim index.js dosyasında sortablejs/react-sortable-mixin yerine sadece '(' sortablejs ') gerekiyorsa Sorb, beklediğim gibi pakete dahil OLMAYACAK, bu yüzden benim düşüncem yanlış mı yoksa modül mü? Reaksiyona karışabilir mikser formatı browserify-shim'e uymaz.

Herhangi bir yardım için teşekkür ederiz.

+0

'Sortable' kitaplığınız genel olarak kullanılabilir, yani bir komut dosyası etiketiyle mi? Aynı 'package.json' dosyasında hem global: Sortable' hem de ./node_modules/sortablejs/Sortable.js: Sortable'ı kullanmanız mantıklı değildir. – YPCrumble

+0

@YPCrumble - Evet Tarayıcı/istemci tarafında Sortable CDN'yi ekliyorum.Başlangıçta şunu denedim: "sortablejs/react-sortable-mixin": {"depends": "Sortable"} benim anlayışımın, bunun global "Sortable" referansı olduğunu söylemesiydi, ancak bu da işe yaramadı. . – Athan

+0

Browserify shim 'transform' direktifini belirttiğinizi varsayar mıyım? 'Package.json' örneğinizden eksik. – YPCrumble

cevap

0

Bu, Sortable kütüphanesinin içeriğini değiştirmeden mümkün değildir. Browserify Shim, bundle.js dosyanızın package.json ürününüzdeki browserify-shim yönergesine bağlı olarak window.PackageName veya paketin tamamını içerecek şekilde değiştirir. senin durumda

, size Browserify Shim node_modules/sortablejs/react-sortable-mixin.js böyle require('./Sortable') o dosyanın içine window.Sortable olur Bununiçeriği değiştirmek için bekliyoruz require('sortablejs/react-sortable-mixin');. Sorun, Browserify Shim'in node_modules dizininin içeriğini değiştirmemesidir, bu mümkün değildir.

birkaç seçenek vardır:

  1. Aksine CDN üzerinden sıralanabilir yüklemek yerine, sadece bir defa yüklenir emin olmak için bundle.js komut dizisi ile küresel yükleyin. react-sortable-mixin.js için

    window.Sortable = require('sortablejs'); 
    var SortableMixin = require('sortablejs/react-sortable-mixin'); 
    
  2. Çatal kendi başına dosya ve Browserify Shim üzerinde hareket edebilir, böylece paket içinde doğrudan bu paket: Sizin index.js olarak değişir.

+0

Açıklama için teşekkürler. Bu seçenek # 1 ile ilgili olarak, bu hala Sortable kütüphanesini final bundle.js'ye ekler .... amaçlanan davranış bu mu? Seçenek 2 ile ilgili olarak, bunu düşünmüştüm ama genellikle lib'leri korumaktan kaçınmayı seviyorum. – Athan

+0

@Athan evet - öneri gerçekten söylemek gerekirse, kütüphaneyi 'bundle.js' dosyanıza yerleştirin ve CDN'yi kullanmak yerine ** bu şekilde yükleyin **. Global olarak "Sortable" olarak CDN yoluyla yüklenmiş gibi bir değişkene ihtiyaç duyduğunuzu farz ediyorum, bu yüzden "window.Sortable" ı dahil ettim. Kodunuzun diğer bölümleri için "window" nesnesinde bir değişken olarak kullanmanıza gerek yoksa, bu satırı sadece "require ('sortablejs'); – YPCrumble

+0

Tamam, teşekkürler. Seçenek 2 ile ilgili olarak, reade-sortable-mixin.js'yi node_modules'den kopyalayıp yerel kopyaya ihtiyaç duyarak hızlı bir test yaptım, ancak yine de Sortable paketlendiğinde aynı sonucu elde ediyorum ... – Athan

İlgili konular