2016-01-25 44 views
6

Przy użyciu SystemJS, w jaki sposób określić, że jedna biblioteka zależy od innej? Na przykład biblioteka JavaScript Bootstrap zależy od wersji jQuery. W oparciu o SytemJS docs, Przypuszczałem byłoby określić tę zależność za pomocą System.config.meta właściwość:Jak mogę określić zależności bibliotek przy użyciu SystemJS?

System.config({ 
    baseUrl: './scripts', 
    defaultJSExtensions: true, 
    map: { 
     jquery: './lib/jquery-2.2.0.min.js', 
     bootstrap: './lib/bootstrap.min.js' 
    }, 
    meta: { 
     bootstrap: { 
      deps: ['jquery'] 
     } 
    } 
}); 
System.import('./scripts/app.js'); 

Ale to wydaje się nie mieć wpływu. Kiedy uruchamiam moją aplikację, biblioteka Bootstrap zgłasza błąd Bootstrap's JavaScript requires jQuery - co oznacza, że ​​Bootstrap jest ładowany przed jQuery.

Jak mogę zapewnić, że jQuery jest zawsze ładowana przed uruchomieniem Bootstrap?

+0

jQuery musi być jawnie dodany do 'okna'. –

+0

@StephanBijzitter - czy możesz podać przykład? Nie jestem pewien, co to oznacza w kontekście SystemJS. –

+0

'window. $ = Window.jQuery = require ('jQuery')', umieść ten kod w dowolnym miejscu przed dołączeniem plików bootstrap. To brzydkie, ale w ten sposób Twitter to lubi. –

Odpowiedz

4

Po ślepo zmieniającej się rzeczy, zdarzyło mi się na konfiguracji, która wydaje się działać. Oto mój config:

System.config({ 
    defaultJSExtensions: true, 
    paths: { 
     jquery: './scripts/lib/jquery-2.2.0.min.js', 
     bootstrap: './scripts/lib/bootstrap.min.js' 
    }, 
    meta: { 
     bootstrap: { 
      deps: ['jquery'] 
     } 
    } 
}); 

System.import('./scripts/app.js'); 

Myślę, że kluczem zmieniał od map do paths.

EDIT

marginesie: po zapoznaniu się nieco więcej o SystemJS, jestem odkryciu, że jest znacznie łatwiej pozwolić jspm wykonać ciężką pracę zarządzaniu moją konfigurację SystemJS.

+0

To nie działa na mnie. Próbuję rozwiązać ten problem: http://stackoverflow.com/questions/39528718/how-to-globally-import-javascript-library-in-angular2-typescript-project – smartmouse

+0

Jeśli 'jquery' jest w' node_modules', to działa => ... ścieżki: {jquery: 'node_modules/jquery/dist/jquery.js'} ... – Akash