Meskipun ada solusi hebat untuk mengelola ketergantungan di sisi server, saya tidak dapat menemukan solusi yang memenuhi semua kebutuhan saya untuk memiliki alur kerja pengelolaan ketergantungan JavaScript sisi klien yang koheren. Saya ingin memenuhi 5 persyaratan ini:
- Mengelola klien saya sisi dependensi dalam format yang sama dengan NPM ini package.json atau pondok 's
bower.json
- Ini harus memiliki fleksibilitas untuk menunjuk ke git repo atau file js aktual (baik di web atau lokal) di
dependency.json
file saya untuk perpustakaan yang kurang dikenal (npm membiarkan Anda menunjuk ke git repos) - Itu harus mengecilkan dan memberi namespace semua perpustakaan menjadi satu file seperti ender - itulah satu-satunya file js yang perlu saya masukkan ke
<script>
tag saya di sisi klien - Ini harus memiliki dukungan di luar kotak untuk CoffeeScript seperti BoxJS 4 (sekarang mati)
Di browser, saya harus dapat menggunakan salah satu gaya yang dibutuhkan :
var $ = require('jquery'); var _ = require('underscore');
Atau lebih baik lagi, lakukan gaya headjs :
head.js(['jquery', 'underscore', 'mylib'], function($, _, mylib) { // executed when all libraries are loaded });
Jika tidak ada satu alat pun yang ada, kombinasi alat apa yang terbaik, yaitu rantai alat yang dapat saya gabungkan menggunakan sesuatu seperti volo (atau grunt )?
Saya telah meneliti semua alat yang telah saya tautkan di sini dan alat tersebut hanya memenuhi hingga 3 persyaratan saya paling baik secara individual. Jadi, tolong jangan memposting lagi tentang alat ini. Saya hanya akan menerima jawaban yang menyediakan satu alat yang memenuhi semua 5 persyaratan saya atau jika seseorang memposting contoh alur kerja / skrip / kerja konkret dari sebuah rantai alat dari beberapa alat yang juga memenuhi semua persyaratan saya. Terima kasih.
sumber
require
Jawaban:
Requirement.js melakukan semua yang Anda butuhkan.
Jawaban saya atas pertanyaan ini semoga membantu Anda
Contoh:
Hierarki proyek aplikasi klien:
main.js adalah tempat Anda menginisialisasi aplikasi klien Anda dan mengkonfigurasi require.js:
Dependensi akan menggunakan plugin cs jika diawali dengan "cs!". Plugin cs mengkompilasi file coffeescript.
Ketika Anda pergi di prod, Anda dapat pre-mengkompilasi seluruh proyek Anda dengan r.js .
Berikut adalah kebutuhan Anda:
Kelola dependensi sisi klien saya dalam format yang mirip dengan package.json npm atau component.json bower. Berbeda tapi BAIK!
Saya harus memiliki fleksibilitas untuk menunjuk ke git repo atau file js aktual (baik di web atau lokal) di file dependency.json saya untuk pustaka yang kurang dikenal (npm mari kita arahkan ke git repos). IYA
Itu harus mengecilkan dan memberi namespace semua perpustakaan menjadi satu file seperti ender - itulah satu-satunya file js yang perlu saya masukkan ke dalam tag-skrip saya di sisi klien. YA dengan r.js.
Ini harus memiliki dukungan di luar kotak untuk coffeescript seperti Box. IYA
Di browser saya bisa menggunakan membutuhkan gaya atau headjs. IYA
sumber
r.js
, dapatkah saya menarik versi non-minified dari semua library, atau bagaimana saya harus memutuskan antara library yang dikecilkan dan yang tidak dikecilkan?http://requirejs.org/ adalah yang Anda cari saya percaya
sumber
Sebagai @ Guillaume86 saya pikir hem akan membawa Anda paling dekat ke tempat yang Anda inginkan.
Dalam ketergantungan hem dikelola menggunakan kombinasi npm dan hem. Gunakan npm untuk menginstal secara eksplisit semua dependensi eksternal project Anda. Gunakan hem untuk menentukan dependensi mana (baik eksternal dan lokal) yang harus digabungkan untuk operasi sisi klien Anda.
Saya membuat proyek kerangka ini sehingga Anda dapat melihat bagaimana ini akan bekerja - Anda dapat melihatnya di https://github.com/dsummersl/clientsidehem
Menambahkan dependensi
Gunakan npm untuk mencari dependensi tertentu lalu ubah file package.json untuk memastikan bahwa dependensi tersebut dilacak di masa mendatang. Kemudian tentukan ketergantungan untuk aplikasi Anda di slug.json.
Misalnya, Anda ingin menambahkan dependensi skrip kopi. Cukup gunakan npm untuk menginstal dependensi dan simpan ke file package.json Anda:
Misalkan Anda ingin memasukkan modul Anda sendiri 'bloomfilters' dan itu tidak ada di registri npm. Anda dapat menambahkannya ke proyek Anda dengan cara berikut:
Modul lokal
Jika Anda ingin memasukkan kopi atau javascript Anda sendiri, Anda dapat melakukannya dengan menambahkan file tersebut ke folder app /. Perhatikan bahwa untuk mengekspos skrip Anda melalui metode 'require', Anda harus menjadikannya sebagai modul CommonJS. Ini sangat sederhana - lihat dokumen hem .
File lokal
Jika Anda ingin menyertakan kode non-CommonJS non 'require', Anda juga dapat menggabungkannya dengan mereferensikan javascript atau coffeescript kustom Anda melalui daftar 'libs' di slug.json.
CSS
Hem akan menjahit CSS Anda juga, jika Anda mau. Lihat dokumen hem .
Bangunan
Setelah dependensi Anda terdaftar, Anda dapat menggunakan hem untuk menjahit semuanya.
Catatan
Hem dimaksudkan untuk proyek spinejs - tetapi Anda tidak harus menggunakannya untuk itu. Abaikan dokumen apa pun yang menyebutkan tulang belakang sesuai keinginan ...
sumber
Yah, saya terkejut karena belum ada yang menyebut Browserify .
sumber
napa
atau tidak? npmjs.org/package/napaSaya cukup yakin Hem memenuhi kebutuhan Anda (saya menggunakan garpu pribadi dengan kompiler tambahan - giok dan stylus - mudah untuk menyesuaikan dengan kebutuhan Anda). Ini menggunakan npm untuk mengelola depedensi.
sumber
Anda mungkin ingin melihat Yeoman , yang menggunakan beberapa teknik untuk membantu Anda memenuhi kebutuhan Anda.
Dukungan bawaan untuk CoffeeScript, Kompas, dan lainnya. Bekerja dengan r.js ( RequireJS ), unittesting dll.
Adapun kebutuhan Anda:
Semua fitur:
sumber
Bower mungkin sesuai dengan kebutuhan Anda (1) dan (2) untuk sisanya yang Anda butuhkan Dari readme:
Untuk menginstal paket:
sumber
Lihat manajer paket Jam . Berikut adalah deskripsi dari homepage-nya
Sepertinya sangat mirip dengan npm dalam cara kerjanya.
Instal paket seperti di bawah ini
memperbarui paket dengan mengeksekusi
Mengoptimalkan paket untuk produksi
Dependensi kemacetan dapat ditambahkan
package.json
file.Untuk dokumentasi lengkap, baca Dokumentasi Jam
sumber
Saya baru saja menemukan inject.js
Beberapa fitur, dari situs proyek :
sumber
Ada beberapa pilihan:
Komponen mungkin juga menarik, tidak mengelola dependensi per se tetapi memungkinkan Anda untuk menggunakan versi pustaka yang sudah dipotong-potong.
sumber
Saya menggunakan hem dengan npm, dan saya ingin menambahkan beberapa manfaat tambahan yang menurut saya belum tercakup sejauh ini.
hem build
kecuali saya memublikasikan aplikasi.cake
metode di atas, Anda cukup menautkan langsung ke coffeescript dari proyek dependen.eco
(Coffeescript tertanam) untuk tampilan dan Stylus untuk CSS, dan mengkompilasi semua itu, bersama dengan Coffeescript Anda, menjadi satu file JS dan satu CSS.Berikut adalah daftar dasar untuk menyiapkan aplikasi Spine, hem, coffeescript. Jangan ragu untuk mengabaikan bagian Spine. Nyatanya, terkadang saya menggunakan
spine app
untuk menyiapkan struktur direktori untuk aplikasi non-Spine, lalu mengeditslug.json
untuk mengubah ke struktur kompilasi yang berbeda.curl http://npmjs.org/install.sh | sh
pada sistem * nix. Saya akan menganggap itu tersedia dari baris perintah.npm install -g hem
). Pengembangan telah bercabang akhir-akhir ini sehingga Anda mungkin ingin mendapatkannya langsung dari github ( https://github.com/spine/hem ), memeriksa cabang, dannpm install -g .
di folder itu.npm install -g spine.app
akan membuat spine tersedia sebagai perintah globalspine app folder
akan membuat sebuah proyek Spine disebutapp
dalamfolder
, menghasilkan struktur direktori yang tepat dan sekelompok file kerangka untuk memulai.cd
ke folder dan editdependencies.json
untuk perpustakaan yang Anda butuhkan. Tambahkan merekaslug.json
sehingga hem tahu di mana menemukannya juga.npm link
salah satu paket lokal Anda dalam pengembangannode_modules
, dan Anda dapat menambahkannya keslug.json
for hem (baikindex.js
untuk menyertakan secara langsung atauindex.coffee
jika Anda ingin hem untuk mengkompilasinya.)npm install .
untuk mengunduh semua dependensi yang baru saja Anda masukkan.Jika Anda melihat pada konfigurasi spine default, di
app/lib/setup.coffee
sanalah Andarequire
semua perpustakaan yang Anda butuhkan dari dependensi Anda. Contoh:Masuk
index.coffee
, Anda cukuprequire lib/setup
dan memuat pengontrol utama untuk aplikasi Anda. Selain itu, Anda perlurequire
kelas lain di pengontrol lain tersebut. Anda dapat menggunakanspine controller something
atauspine model something
membuat template untuk pengontrol dan model. Pengontrol Spine tipikal terlihat seperti berikut, menggunakan noderequire
:Default yang dibuat
index.html
biasanya akan baik-baik saja untuk memuat aplikasi Anda, tetapi ubah sesuai kebutuhan. Sesuai kebutuhan Anda, itu hanya menarik satujs
dan satucss
file, yang tidak perlu Anda modifikasi.css
folder. Ini jauh lebih fleksibel daripada CSS :)folder
, jalankanhem server
untuk memulai server hem, dan arahkan kelocalhost:9294
untuk melihat aplikasi Anda. (Jika Anda menginstal hem secara global.) Ini memiliki beberapa argumen tersembunyi, misalnya--host 0.0.0.0
mendengarkan di semua port.Satu hal lagi: biasanya,
hem server
akan diperbarui secara otomatis saat Anda memperbarui kode dan menyimpan file, yang membuatnya mudah untuk di-debug. Berjalanhem build
akan mengompilasi aplikasi Anda menjadi dua fileapplication.js
, yang diperkecil danapplication.css
. Jika Anda menjalankannyahem server
setelah ini, itu akan menggunakan file-file itu dan tidak lagi memperbarui secara otomatis. Jadi janganhem build
sampai Anda benar-benar membutuhkan versi yang diperkecil dari aplikasi Anda untuk penerapan.Referensi tambahan: Spine.js & hem memulai
sumber
Berikut solusi yang mengambil pendekatan yang sangat berbeda: mengemas semua modul menjadi objek JSON dan memerlukan modul dengan membaca dan menjalankan konten file tanpa permintaan tambahan.
Implementasi demo sisi klien murni: http://strd6.github.io/editor/
https://github.com/STRd6/require/blob/master/main.coffee.md
STRd6 / require bergantung pada ketersediaan paket JSON saat runtime. The
require
fungsi dihasilkan untuk paket itu. Paket tersebut berisi semua file yang mungkin diperlukan aplikasi Anda. Tidak ada permintaan http lebih lanjut yang dibuat karena paket menggabungkan semua dependensi. Ini sedekat yang bisa didapatkan dengan gaya Node.js yang dibutuhkan pada klien.Struktur paket adalah sebagai berikut:
Tidak seperti Node, sebuah paket tidak mengetahui nama eksternalnya. Terserah pacakge termasuk ketergantungan untuk menamainya. Ini memberikan enkapsulasi lengkap.
Mengingat semua pengaturan itu, inilah fungsi yang memuat file dari dalam sebuah paket:
Konteks eksternal ini memberikan beberapa variabel yang dapat diakses modul.
Sebuah
require
fungsi diekspos ke modul sehingga mereka mungkin memerlukan modul lain.Properti tambahan seperti referensi ke objek global dan beberapa metadata juga akan diekspos.
Akhirnya kami menjalankan program dalam modul dan konteks yang diberikan.
Jawaban ini akan sangat membantu bagi mereka yang ingin memiliki pernyataan memerlukan gaya node.js sinkron di browser dan tidak tertarik dengan solusi pemuatan skrip jarak jauh.
sumber
Lihat cartero jika Anda menggunakan node / express di backend.
sumber
Saya sarankan untuk memeriksa toolkit dojo yang tampaknya memenuhi sebagian besar kebutuhan Anda. Yang saya tidak yakin adalah CoffeeScript.
dojo bekerja dengan modul yang ditulis dalam format Asynchronous Module Definition (AMD). Ini memiliki sistem build dengan paket dan Anda dapat menggabungkannya dalam satu atau beberapa file (disebut lapisan). Rupanya itu menerima repositori tipe git, detail lebih lanjut tentang sistem build di sini:
http://dojotoolkit.org/documentation/tutorials/1.8/build/
Sebagai catatan, v1.9 beta diharapkan bulan depan.
sumber
Kerangka kerja lain yang memenuhi semua kriteria saya yang dirilis baru-baru ini: http://duojs.org/ (dan juga mendukung memperlakukan sumber daya lain seperti CSS sebagai dependensi).
sumber
injeksi ketergantungan dengan pemuatan asinkron + browserify akan menjadi pilihan bagus lainnya, dibandingkan dengan requirejs
asynchronous-frontend-dependency-management-without-AMD
sumber