Saya mencoba memuat Backbone dan Garis Bawah (serta jQuery) dengan RequireJS. Dengan versi terbaru dari Backbone dan Underscore, sepertinya agak rumit. Untuk satu, Underscore secara otomatis mendaftar sendiri sebagai modul, tetapi Backbone mengasumsikan Underscore tersedia secara global. Saya juga harus mencatat bahwa Backbone tampaknya tidak mendaftarkan dirinya sebagai modul yang membuatnya agak tidak konsisten dengan lib lainnya. Ini main.js terbaik yang bisa saya dapatkan dengan bekerja:
require(
{
paths: {
'backbone': 'libs/backbone/backbone-require',
'templates': '../templates'
}
},
[
// jQuery registers itself as a module.
'http://cdnjs.cloudflare.com/ajax/libs/jquery/1.7/jquery.min.js',
// Underscore registers itself as a module.
'http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.2.1/underscore-min.js'
], function() {
// These nested require() calls are just due to how Backbone is built. Underscore basically says if require()
// is available then it will automatically register an "underscore" module, but it won't register underscore
// as a global "_". However, Backbone expects Underscore to be a global variable. To make this work, we require
// the Underscore module after it's been defined from within Underscore and set it as a global variable for
// Backbone's sake. Hopefully Backbone will soon be able to use the Underscore module directly instead of
// assuming it's global.
require(['underscore'], function(_) {
window._ = _;
});
require([
'order!http://cdnjs.cloudflare.com/ajax/libs/backbone.js/0.5.3/backbone-min.js',
'order!app'
], function(a, app) {
app.initialize();
})
});
Saya harus menyebutkan bahwa, saat berfungsi, pengoptimal tersedak. Saya menerima yang berikut:
Tracing dependencies for: main
js: "/home/httpd/aahardy/requirejs/r.js", line 7619: exception from uncaught JavaScript throw: Error: Error: Error evaluating module "undefined" at location "/home/httpd/aahardy/phoenix/trunk/ui/js/../../ui-build/js/underscore.js":
JavaException: java.io.FileNotFoundException: /home/httpd/aahardy/phoenix/trunk/ui/js/../../ui-build/js/underscore.js (No such file or directory)
fileName:/home/httpd/aahardy/phoenix/trunk/ui/js/../../ui-build/js/underscore.js
lineNumber: undefined
http://requirejs.org/docs/errors.html#defineerror
In module tree:
main
Apakah ada cara yang lebih baik untuk menangani ini? Terima kasih!
javascript
backbone.js
underscore.js
requirejs
Aaronius
sumber
sumber
Jawaban:
Wajib 2.X sekarang secara organik menangani modul non-AMD seperti Backbone & Underscore jauh lebih baik, menggunakan
shim
konfigurasi baru .The
shim
konfigurasi sederhana untuk digunakan: (1) satu menyatakan dependensi (deps
), jika ada, (yang mungkin daripaths
konfigurasi, atau mungkin jalur yang valid sendiri). (2) (secara opsional) tentukan nama variabel global dari file yang Anda pilih, yang harus diekspor ke fungsi modul Anda yang memerlukannya. (Jika Anda tidak menentukan ekspor, maka Anda hanya perlu menggunakan global, karena tidak ada yang akan diteruskan ke fungsi memerlukan / menetapkan Anda.)Berikut adalah contoh sederhana penggunaan
shim
untuk memuat Backbone. Itu juga menambahkan ekspor untuk garis bawah, meskipun tidak memiliki ketergantungan.Catatan: kode yang disederhanakan ini mengasumsikan bahwa jquery, backbone, dan garis bawah berada dalam file yang bernama "jquery.js", "backbone.js" dan "underscore.js" di direktori yang sama dengan kode "utama" ini (yang menjadi basisURL untuk memerlukan ). Jika ini tidak terjadi, Anda harus menggunakan path konfigurasi .
Saya pribadi berpikir dengan
shim
fungsionalitas bawaan, keuntungan dari tidak menggunakan versi bercabang dari Backbone & Underscore melebihi manfaat menggunakan garpu AMD yang direkomendasikan dalam jawaban populer lainnya, tetapi cara apa pun berfungsi.sumber
Sample RequireJS 2.0.1 + jQuery 1.7.2 project
requireejs.org/docs/download.html#samplejquery ?Pembaruan : Pada versi 1.3.0 Dukungan underscore AMD (RequireJS) dihapus .
Anda dapat menggunakan garpu amdjs / Backbone 0.9.1 dan amdjs / Underscore 1.3.1 dengan dukungan AMD dari James Burke (pengelola RequireJS).
Info lebih lanjut tentang dukungan AMD untuk Underscore dan Backbone .
Modul didaftarkan dengan benar dan tidak perlu untuk plugin pesanan:
Underscore sebenarnya opsional, karena Backbone sekarang mendapatkan dependensinya sendiri:
Dengan sedikit gula AMD Anda juga bisa menulis seperti ini:
Mengenai kesalahan pengoptimal: periksa kembali konfigurasi konfigurasi Anda. Saya menganggap konfigurasi jalur Anda tidak aktif. Jika Anda memiliki pengaturan direktori yang mirip dengan RequireJS Docs, Anda dapat menggunakan:
sumber
Sebagai referensi, pada versi 1.1.1 (~ Feb '13), Backbone juga mendaftarkan dirinya sebagai modul AMD . Ini akan bekerja dengan requireejs tanpa perlu menggunakan konfigurasi shim-nya. ( Garpu amdjs James Burke juga belum diperbarui sejak 1.1.0)
sumber
Berita bagus, Underscore 1.6.0 sekarang mendukung persyaratan!
versi di bawah ini memerlukan shims, atau memerlukan underscore.js kemudian secara membabi buta berharap bahwa variabel global "_" belum dihancurkan (yang seharusnya adil adalah taruhan yang adil)
cukup masukkan dengan
sumber
Saya akan menuliskannya secara langsung, Anda dapat membaca penjelasan tentang requireejs.org, Anda dapat menggunakan kode di bawah ini sebagai potongan untuk penggunaan sehari-hari Anda; (ps saya menggunakan kamu) (karena banyak hal diperbarui, saya posting ini pada Februari 2014)
Pastikan Anda memasukkan skrip ke index.html Anda
Kemudian, di main.js
app.js
Semoga bermanfaat.!
sumber
sumber