Saya membaca dokumen requirejs dari sini API
requirejs.config({
shim: {
'backbone': {
//These script dependencies should be loaded before loading
//backbone.js
deps: ['underscore', 'jquery'],
//Once loaded, use the global 'Backbone' as the
//module value.
exports: 'Backbone'
},
'underscore': {
exports: '_'
},
'foo': {
deps: ['bar'],
exports: 'Foo',
init: function (bar) {
//Using a function allows you to call noConflict for
//libraries that support it, and do other cleanup.
//However, plugins for those libraries may still want
//a global. "this" for the function will be the global
//object. The dependencies will be passed in as
//function arguments. If this function returns a value,
//then that value is used as the module export value
//instead of the object found via the 'exports' string.
return this.Foo.noConflict();
}
}
}
});
tetapi saya tidak mendapatkan bagian shim darinya. mengapa saya harus menggunakan shim dan bagaimana cara mengkonfigurasi, dapatkah saya mendapatkan klarifikasi lebih lanjut
tolong ada yang bisa menjelaskan dengan contoh mengapa dan kapan kita harus menggunakan shim. Terima kasih.
Underscore
dan diBackbone
sini digunakan seperti biasa, apa yangshim
dilakukan dalam kasus ini? Dapatkah saya menggunakanrequire( function() { _.extend({}); })
? Apakah itu mengerti_
?Sesuai dokumentasi RequireJS API, shim memungkinkan Anda
- Konfigurasi dependensi
Katakanlah Anda memiliki 2 modul javascript (moduleA dan moduleB) dan salah satunya (moduleA) bergantung pada yang lain (moduleB). Keduanya diperlukan untuk modul Anda sendiri sehingga Anda menentukan dependensi di require () atau define ()
Tetapi karena mengharuskan dirinya mengikuti AMD, Anda tidak tahu mana yang akan diambil lebih awal. Di sinilah shim datang untuk menyelamatkan.
Ini akan memastikan moduleB selalu diambil sebelum moduleA dimuat.
- Konfigurasi ekspor
Ekspor Shim memberi tahu RequireJS anggota apa pada objek global (jendela, dengan asumsi Anda berada di browser, tentu saja) adalah nilai modul yang sebenarnya. Katakanlah moduleA menambahkan dirinya ke
window
as 'modA' (seperti jQuery dan underscore masing-masing sebagai $ dan _), lalu kita membuat nilai ekspor 'modA'.Ini akan memberi RequireJS referensi lokal ke modul ini. ModA global akan tetap ada di halaman juga.
-Inisialisasi kustom untuk skrip "browser global" yang lebih lama
Ini mungkin fitur terpenting dari shim config yang memungkinkan kita menambahkan skrip 'browser global', 'non-AMD' (yang juga tidak mengikuti pola modular) sebagai dependensi dalam modul kita sendiri.
Katakanlah moduleB adalah javascript lama biasa dengan hanya dua fungsi funcA () dan funcB ().
Meskipun kedua fungsi ini tersedia dalam cakupan jendela, RequireJS merekomendasikan kita untuk menggunakannya melalui pengenal / pegangan globalnya untuk menghindari kebingungan. Jadi mengkonfigurasi shim sebagai
Nilai yang dikembalikan dari fungsi init digunakan sebagai nilai ekspor modul daripada objek yang ditemukan melalui string 'ekspor'. Ini akan memungkinkan kita untuk menggunakan funcB dalam modul kita sendiri sebagai
Semoga ini bisa membantu.
sumber
Anda harus menambahkan jalur di requirejs.config untuk dideklarasikan, contoh:
sumber