Saya suka Bundler , sangat bagus dalam manajemen ketergantungan. Saya suka npm , menginstal paket node itu mudah! Saya memiliki aplikasi nodejs dan ingin sekali dapat menentukan dependensi aplikasi saya dan menginstal / memperbaruinya dengan mudah di mana pun saya menerapkan aplikasi saya. Ini bukan perpustakaan yang saya rilis, ini adalah aplikasi web lengkap.
Saya mengetahui npm bundle
perintahnya, tetapi itu sepertinya hanya menimpa direktori tempat paket diinstal.
Saya terbiasa menggunakan bundler dengan cara ini:
# Gemfile
gem "rails", "3.0.3"
Menginstal rails v3.0.3 dan permata lain yang diperlukan di mesin host hanya jika belum ada
> bundle install
Bagaimana saya bisa mencapai sesuatu yang serupa dengan npm?
javascript
dependencies
node.js
bundler
npm
Daniel Beardsley
sumber
sumber
Jawaban:
Pada npm 1.0 (yang sekarang Anda dapatkan secara default jika Anda mengikuti langkah-langkah dalam file README), "bundle" tidak lagi menjadi hal yang terpisah - ini hanya "cara kerjanya".
Begitu:
package.json
file di root proyek AndaCantumkan deps Anda di file itu
{ "name" : "my-project" , "version" : "1.0.0" , "dependencies" : { "express" : "1.0.0" } }
npm install
Karena Anda memanggil ini tanpa args, dan bukan dalam mode global, itu hanya akan menginstal semua deps Anda secara lokal.require("express")
dan berbahagialah.sumber
your_app/node_modules
direktori lokal menjadi symlink di luar direktori aplikasi Anda. Anda tidak ingin mengunduh, membangun, dan menginstal setiap dependensi setiap kali Anda menerapkan.my-project
di./node_modules/my-project/node_modules
. Saya tidak yakin apakah ada cara yang mudah untuk menginstal semua dependensi di./node_modules
Anyone?Sunting: Ini hanya berlaku untuk versi npm <1.0
Cukup sulit untuk memahami hal ini, tetapi NPM memungkinkannya .
Anda membutuhkan tiga komponen
deps/
)package.json
file dalam direktori di atas bahwa daftar dependensiindex.js
file dalam direktori di atas yang membutuhkan dependensi AndaContoh
Bayangkan bahwa ekspres adalah satu-satunya ketergantungan Anda
deps / package.json
catatan: Tingkatkan versi # setiap kali Anda mengubah dependensi
{ "name": "myapp_dependencies", "version": "0.0.1", "engines": { "node": "0.4.1" }, "dependencies":{ "express": "2.0.0beta2" } }
deps / index.js
export.modules = { express: require('express') //add more }
Sekarang Anda dapat menginstal dependensi Anda menggunakan npm. Anda bahkan dapat menjadikan ini sebagai bagian dari proses penerapan Anda
Kemudian dalam kode aplikasi Anda, Anda bisa mendapatkan akses ke versi ekspres tertentu seperti ini:
var express = require('myapp_dependencies').express;
sumber
require('express')
in deps / index.js hanya mengimpor versi ekspres terbaru, dan belum tentu versi yang kami instal? Saya seorang noob nodeJS jadi mohon bersabarlah.npm install
, ia menambahkan symlink di dalam direktori paket yang Anda instal ke versi yang benar dari paket dependen. Jika paket dependensi Anda diperlukan,require('express')
pemeriksaan direktori lokal terlebih dahulu dan temukan symlink ke versi express yang benar.Anda harus membaca dua artikel ini dari blog Isaacs (penulis npm). Saya pikir mereka sangat bagus, dan saya yakin memberi tahu Anda bagaimana mencapai tujuan Anda:
Saya percaya tautan # 1 (poin # 11) menjelaskan ini:
sumber
npm bundle
digunakan untuk mengumpulkan semua dependensi Anda ke direktori tertentu selain default. Saya mungkin akan menemukan solusi saya sendiri yang kinerjanya mirip denganbundle install
(bundler
untuk ruby)npm
versi 1.0+,npm bundle
telah dihapus. Sebagai gantinya, cukup gunakannpm install
perintah tanpa nama paket, itu akan membaca package.json dan menarik paket yang diperlukan.Pada Npm versi 1.1.2, ada perintah baru
npm shrinkwrap
yang membuatnpm-shrinkwrapped.json
file, mirip denganGemfile.lock
. Sangat penting untuk membuatnya, untuk mencegah pembusukan perangkat lunak (lihat alasan Bundler ). Terutama karena Nodejs memiliki komunitas yang bergerak cepat.While
bundle install
membuat secaraGemfile.lock
otomatis,npm install
tidak akan membuatnpm-shrinkwrapped.json
(tetapi akan menggunakannya jika ada). Karenanya Anda harus ingat untuk menggunakannpm shrinkwrap
.Baca panduan lengkapnya di http://blog.nodejs.org/2012/02/27/managing-node-js-dependencies-with-shrinkwrap/
sumber
Bagi saya, solusi paling sederhana adalah menggunakan
package.json
file denganprivate
flag (ditambahkan ke npm bulan lalu) disetel ketrue
. Dengan cara itu, Anda dapat menjalankannpm install
ataunpm bundle
mengambil dependensi proyek Anda, tetapi Anda mencegah siapa pun secara tidak sengaja menerbitkan proyek non-publik Anda.Berikut contohnya
package.json
:{ "name": "yourProject" ,"version": "1.0.0" ,"dependencies": { "express" : ">=2.1.0" } ,"private": true }
Menjalankan
npm install
akan menginstalexpress
di sistem lokal jika belum ada; berjalannpm publish
memberikan kesalahan karena"private": true
.Anda dan tim Anda dapat menggunakan tag versi secara internal untuk melacak perubahan dependensi dari waktu ke waktu — setiap kali Anda mengubah dependensi, ubah versinya. Untuk melihat versi mana yang telah Anda instal, gunakan
npm ls installed
.sumber
true
dan itu hanya berfungsi karena string adalah nilai kebenaran (yaitu,!!"false" === true
).Publikasikan aplikasi Anda
npm
juga, dan cantumkan dependensinya di file package.json Anda.Ketika seseorang menggunakan
npm
untuk menginstal paket Anda,npm
akan mengurus menyelesaikan dependensinya.Spesifikasi paket: http://wiki.commonjs.org/wiki/Packages/1.0
sumber
npm
untuk menginstal sebelum menginstal aplikasi Anda. Saya tidak berpikir adagem
padanan lain untuk node.js.