2013-03-20 25 views
7

Ben Düğüm yeniyim dışında dizini node_modules koyabilir miyim ama şimdiye kadar kendimi hoşuma gidiyor. Ben devlet 'webroota' dışında benim node_modules (kütüphaneler) dizini taşımaya çalışıyor ve tavsiye ve rehberlik ihtiyacı edildi.Ben npm benim 'webroota'

şöyle ben setup benim basit expressJS tabanlı Düğüm proje ettik: Ben webroot /node_modules dir dışında olması ve benim uygulamayı bozamadı herhangi bir yolu olup olmadığını merak ediyorum

/my_project 
    /config 
    /public   
    /node_modules 
    server.js 

. Ben sadece genel olarak açıktaki webroot'umda en azı tutmaya alışığım ve orada bulunan lib'lerle doğru hissetmiyorum. Bana eski moda diyoruz ama ben PHP ve C# dünyasında bir şeyler yapmaya alışkınım.

ben kurulum projesi aşağıdaki gibi olursa:

/my_project 
    /config 
    /node_modules 
    /public   
    server.js 

o zaman tüm titrek gider ve düğümü'nü require() sihirli sonları.

aşağıdaki denedim: ya beni vererek 'modülünü Bulamıyor' türü hatası çalışmıyor

var express=require('../express');.

  1. Mümkün olanı sorarsam, eğer öyleyse nasıl olur?
  2. benimle herhangi bir büyük riskler bir webroot benim kütüphanelerini sahip var mıdır yoksa yolu Düğüm çalışmalarıyla burada temel bir şey kaçırmış var.
  3. siz üretim uygulamaları için en iyi yöntem nedir, ne yapmalıyım? Üretim uygulamalarınızdan bazı örnekler alabilir miyim ve neden.
+0

'var express = gerekli ('../ node_modules/express');' çalışıyor gibi görünüyor. Yine de biraz rahatsız görünüyor. En iyi uygulamaların ne olduğu konusunda hala çok ilgileniyorum. –

+2

gerektirir ('ifade') hala çalışmalıdır. [Bu kullanışlı yazı] bölümüne bakın (http://www.bennadel.com/blog/2169-Where-Does-Node-js-And-Require-Look-For-Modules-.htm). Özellikle bu bölüm: "Verilen modül bir çekirdek modül değilse, Node.js" node_modules "adlı bir dizini aramaya başlar. Geçerli dizinde başlayacaktır (Düğümdeki şu anda çalıştırılan Javascript dosyasına göre)) ve sonra klasör hiyerarşisinde, bir node_modules klasörü için her bir seviyeyi kontrol ederek yukarı doğru çalışır. Yani senin problemin başka bir yermiş gibi görünüyor. –

+2

Bir yan notta,/public istemciler tarafından erişilebilen dosyaları koymak için düğümde yaygın bir uygulamadır. server.js muhtemelen olmamalıdır. –

cevap

4

1. mümkün projenin

Evet dışında bir klasörde modüllere sahip olmak mı. Bir webroota modülleri sahip herhangi bir büyük riskler

2.

var mı? Eğer "webroota" tarafından sunucu veya projeniz dışında herhangi bir klasörün kök anlamına varsayarsak

: evet. Küresel olarak npm ile g-flag: npm install -g express'u kullanarak modülleri kurmak mümkündür. Bu genellikle farklı projeler olarak kötü uygulama olarak kabul edilir aynı modülün farklı sürümlerine bağlı olabilir. Yerel olarak yüklemek, farklı projelerin farklı sürümlere sahip olmasını sağlar.

sürüm kontrolü kullanıyor ve dış modüllerin ortak kontrol etmek istemiyorsanız (ve NPM standart) desen ./node_modules görmezden gelip bir package.json dosyada bağımlılıkları belirtmektir.

3. "üretim uygulamaları için en iyi yöntem nedir?" Bunda olduğumdan beri

Değil iyi bir uyum SO için, ama yine de denemek gerekir.hepsini tutarken

/my_project 
    /node_modules 
    /lib 
    # actual project files 
    /public 
     # files that are meant to be sent to clients 
    /test 
    package.json # specifies dependencies, main script, version etc 
    README.md # optional 

Bu yapı açıkça çekirdek dosyaları, bağımlılıkları ve herhangi bir test ayıran avantajları vardır: Eğer grunt (çok popüler bir görev otomasyon aracı) kullanıyorsanız Genellikle böyle bir yapı ile bitireceğiz aynı klasörde.

+0

Teşekkürler Andreas, homurdanmaya gideceğim. –

+1

Göz önünde bulundurulması gereken birkaç nokta. Modülleri tek bir projenin yanında depolarsanız, dosya yolları Windows'ta 255 karakterlik sınırı aşabilir. Bu, onları daha yüksek bir dizin düzeyinde depolamanın temel sebebimdi, bkz: http://stackoverflow.com/questions/13318364/how-to-deploy-node-js-application-with-deep-node-modules-structure -on-pencereler. Ek olarak, modüllerinizi kontrol etmenin dezavantajları vardır, bir zamanlar benim bir zamanlar benim derleme sürecimi kırdı. http://stackoverflow.com/questions/11459475/should-i-check-in-node-modules-to-git-when-creating-a-node-js-app-on-heroku –

+1

@AdamMarshall Evet. Node_modules –