Node.js kullanarak “Modül bulunamıyor” hatasını nasıl çözebilirim?


616

GitHub'dan bir modül indirdikten ve oluşturmak için talimatları izledikten sonra, aşağıdakileri kullanarak mevcut bir projeye çekmeye çalışıyorum:

> npm install ../faye

Hile yapıyor gibi görünüyor:

> npm list
/home/dave/src/server
└─┬ faye@0.7.1
  ├── cookiejar@1.3.0
  ├── hiredis@0.1.13
  └── redis@0.7.1

Ancak Node.js modülü bulamıyor:

> node app.js
node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
Error: Cannot find module 'faye'
    at Function._resolveFilename (module.js:334:11)
    at Function._load (module.js:279:25)
    at Module.require (module.js:357:17)
    at require (module.js:368:17)
    at Object.<anonymous> (/home/dave/src/server/app.js:2:12)
    at Module._compile (module.js:432:26)
    at Object..js (module.js:450:10)
    at Module.load (module.js:351:31)
    at Function._load (module.js:310:12)
    at Array.0 (module.js:470:10)

Burada neler olup bittiğini gerçekten anlamak istiyorum, ama sonra nereye bakacağım konusunda biraz kaybım var. Herhangi bir öneri?


8
node_modulesDizin alongisde, projenizin kök olması bekleniyor app.jssizin durumda. Neden ..npm kurulum yolunu kullandınız?
Alex Wayne

1
"Npm install ../faye" yi "npm install ../faye/build" olarak değiştirdikten sonra beklendiği gibi çalışır. Bunun ne kadar tipik olduğunu bilmiyorum, ama faye inşa edildiğinde bir yapı dizini oluşturur ve orada package.json'un bir kopyasını koyar. npm, kök düzeyinde package.json'dan şikayet etmez, ancak bu düzeyde bulunmayan dosyalara başvurur.
Dave Causey

2
Sorunu çözdüm, ancak gerçek soruma herhangi bir çözüm alamadım, bu da bu sorunu nasıl gidereceğiydi. Yeni gelenlerin bu durumdan kaçınmasını kolaylaştırmak için npm ve / veya düğümü iyileştirmek için bazı öneriler geliştirmeye çalışacağım.
Dave Causey

1
Bu bağlantı üzerinden gidin , tam olarak nerede modülleri
aramak

1
Yüklediğiniz klasörde bulunduğunuz hava durumunu kontrol ettiniz mi? global olarak yüklemediyseniz.
Ashwani Panwar

Yanıtlar:


513

Kullanmak npm installmodülü yalnızca geçerli dizine yükler (çağrılan bir alt dizine node_modules). App.js altında home/dave/src/server/mı yer alıyor ? Değilse ve modülü herhangi bir dizinden kullanmak istiyorsanız, kullanarak küresel olarak yüklemeniz gerekir npm install -g.

Genellikle çoğu paketi yerel olarak yüklerim, böylece proje kodumla birlikte kontrol edilirler.

Güncelleme (8/2019):

Günümüzde , npm node_modules dizininizi değiştirdiğinde otomatik olarak oluşturulan package-lock.json dosyasını kullanabilirsiniz . Bu nedenle package-lock.json, şu anda kullandığınız node_modules'ünüzün tam sürümlerini izlediği için paketleri kontrol etmeyi bırakabilirsiniz . Paketleri yüklemek package-lock.jsonyerine package.jsonkomutunu kullanmak için npm ci.

Güncelleme (3/2016):

Özellikle kodumun bağlı olduğu paketleri kontrol ettim, yanıtı için bir sürü plak aldım. Birkaç gün önce, birisi React, Babel ve hemen hemen her şeyi bozan tüm paketlerini ( https://kodfabrik.com/journal/i-ve-just-liberated-my-modules ) yayından kaldırdı. Umarım şimdi üretim kodunuz varsa, sizin için bağımlılıklarınızı koruyan NPM'ye güvenemeyeceğiniz açıktır.


264
"Çoğu paketi yerel olarak, proje kodumla birlikte teslim alınacak şekilde yüklerim." package.jsonHangi npm modüllerine bağımlı olduğunuzu listelemek ve node_modulesklasörü görmezden gelmek genellikle daha iyidir . Sonra sadece npm installrepo klonladıktan sonra kurulum almak için.
Alex Wayne

53
package.jsonBağımlılıkları listelemeye ek olarak , bağımlı olduğum şeylerin bilinen iyi kopyalarını saklamayı seviyorum. Disk alanı ucuzdur ve npm veya paket npm'den kaybolursa, depomda hala tamamen çalışan bir projem olacak.
Bill

165
Eski bir geliştirici olarak Node devs "paradigmasını" okuduğumda neredeyse boğuldum. Kullandığım kütüphaneler var. 100 kopya (ya da daha kötüsü, YAKIN kopya) olabileceği fikri midemi çeviriyor. Disk alanı ucuz, ancak bakım süresi pahalı. Belki bir kerelik oyuncak projesi yapıyorsanız, bakım ucuzdur. Bununla birlikte, gerçek iş için bakım pahalıdır ve disk alanı maliyetini etkilemez.
Lloyd Sargent

66
Bu son yorumu gerçekten anlamıyorum. Kimse herhangi bir kod parçasının 100 kopyasına sahip olduğunu söylemez, sadece projenizin bağlı olduğu kodun 1 kopyasına sahip olmak için. Alternatif, NPM veya bağımlılık bir gün kaybolursa, işlevsel olmayan bir projeye sahip olmaktır. Sıfırdan bir bağımlılığın yeniden yazılmasının da oldukça pahalı olduğunu düşünürdüm. Bir yana, Microsoft'ta 10 yıl çalıştım ve kaynak ağacımızda her zaman 3. taraf bağımlılıkları kontrol ettik.
Bill

33
@LloydSargent "YAKIN kopyalar" a sahip olmak daha da kötü değildir , daha iyidir , çünkü her projenin tanımladığınız belirli bir bağımlılığı vardır ve kodunuzun geri kalanı güvenir. Eğer olsaydı aynı güncellemek o zaman birden fazla proje arasında sürümlerini şey sen gerekir güncelleştirmek her şeyi . Sabitleme bağımlılıkları parça parça yükseltmelere izin verir - önemli ölçüde daha az bakım. Gerçek iş, oyuncak olmayan projeler.
Dave Newton

459

Çok benzer bir sorun yaşadım. Tüm node_modulesklasörü kaldırmak ve yeniden yüklemek benim için çalıştı:

rm -rf node_modules
npm install

13
Ben de bir npm önbellek, tıpkı bir güvenlik şey olarak temiz yapardı :)
Tony Tai Nguyen

1
Muhtemelen çözülecek npm install/ npm updateçözülmeyecek garip bir bağımlılık sorunu ortaya çıktığında iyi bir ilk sorun giderme adımı . Bu, Error: Cannot find module 'http-errors'Express uygulamamı çalıştırmayı denediğimde rastgele gösterilmeye başladığı bir sorunu çözdü .
Matt Vukas

İnanılmaz, @ carelesslyChoosy'nin cevabı eksik bir bağımlılığı çözdü. Yükseltme ve npm yükleme ile downgrading yerde düzenli tutmaz gibi görünüyor.
eel ghEEz

3
Burada eksik bir adım, çalıştırmadan önce package-lock.json dosyanızı kaldırmaktır npm install.
Rick Quantz

bu benim için çalışmadı, hatta bilgisayarı yeniden başlattı;)
Jason G

83
npm install --save module_name

Örneğin, hata:

{[Hata: '/root/.npm/form-data' modülü bulunamadı]: 'MODULE_NOT_FOUND'}

komutu uygulayarak bu sorunu çözebilirsiniz npm install --save form-data.


1
Ben küresel olarak npm / düğüm-modülleri klasörü boştu ve ben ng new project-namebazı modülleri eksik olduğunu gösteren kullanmaya çalışıyordu ... Verilen komutu kullanarak her birini yüklemek zorunda kaldı gibi görünüyor. hepsini yüklemek için tek bir komut var mı?
Vishal Nair

25

Typescript kullanıcıları için, ithal eğer bir Düğüm modülünde dahili (örneğin http, pathya url) ve aşağıdaki gibi bir hata alıyorsanız "Cannot find module "x"o zaman hata koşu yoluyla sabitlenebilir

npm install @types/node --save-dev

Komut, NodeJS TypeScript tanımlarını projenize aktararak Düğümün yerleşik modüllerini kullanmanızı sağlar.


18

Bu, bir nedenle ilk npm yüklemesi çöktüğünde (npm'nin SIGINT'i) veya gecikmenin çok uzun olduğu veya verilerin bozuk olduğu durumlarda olur. Bir npm yüklemesini tekrar denemek sorunu kurtarmaz.

Bir şey npm ilk kontrolünde yanlış var, bu yüzden en iyi seçim dosyayı kaldırmak ve npm yüklemesini yeniden başlatmaktır.


16
bu benim için sorunu teşhis etti. i npm cache clearve npm installsorunu çözmek için takip node_modules temizleyerek sona erdi .
meklarian

9

Nvm kullanıyorsanız, diğer kitaplıklara bağlanan varolan node_modules öğelerinin doğru Node.js sürümü için derlendiğinden emin olun.

Aynı hatayla karşılaşıyordum. Nedeni şuydu: Bir sunucuda iki uygulama çalıştırdığımız için nvm kullanıyoruz, biri Node.js 5.6 gerektiriyor, çünkü node-gd kullanıyor (bu şimdilik Node.js 6'da çalışmıyor), diğeri gerektiriyor Node.js 6. Node.js 6, apt-get kurulumudur.

Ayrıca, dağıtmak için pm2 aracını kullanıyoruz.

Bu nedenle, varsayılan kurulum, nvm etkin olmadığında pm2 işleminin başlamasıdır, bu nedenle Node.js'nin (sürüm 6) apt-get kurulumunu kullanır. Bu nedenle ana pm2 arka plan programı Node.js 6 ile başlar. Uygulamaları çatal modunda çalıştırırsam ayrı işlemlerde başlarlar ve nvm ayarları geçerlidir. Uygulamaları küme modunda çalıştırdığımda - nvm olmayan ortamı devralırlar.

Bu nedenle, küme moduna geçmeye çalıştığımda, 5.6 için derlenen bağlamalar bu iletiyle başarısız olduğundan uygulama başlatılamadı.

Ben nvm ayarları yürürlükte iken pm2 yeniden başlatarak düzeltildi. Ayrıca başlatma komut dosyaları da düzeltilmelidir.


Bunu nasıl kontrol edersin?
tamj0rd2

8

Çevre değişkeninin NODE_PATH değerinin doğru ayarlandığını ve düğüm_modülleri yolunu işaret ettiğini kontrol edin. nodejs bu değişkeni kütüphaneleri aramak için kullanır


Hemen sorunumu çözdüğü için bunu iptal ettim ve beni bu node.js belgelerine yönlendirdim . Ancak, belgelerin modülleri bulmak için alternatif stratejileri gösterdiğinden, bunun kapsamlı bir cevap olmadığını düşünüyorum.
Graham Klyne

6

Dün bu hatayı yaşadım. mainGirişin package.jsontaşındığım bir dosyayı işaret ettiğini fark etmem bir süre aldı . Bir kez hata kayboldu ve paket çalıştı güncelleme.


2
Kutsal inek ... çaresizlikten "Hata: Modül bulunamadı" yazıp google'a yazdım ve bu soruyu buldum. Cevabınız sorunumu çözdü. Böyle belirsiz bir arama teriminin doğru cevabı verdiğine inanamıyorum. Size ve Google'a şeref!
Jamon Holmgren

1
Çok fazla. Ben işaret başarmıştı mainben yoluyla dahil çalışırsa onun deposundan çıkarılmıştır bir dizinde benim altmodülün girdisini npm installişe yaradı, ancak gerekli olduğunda hiçbir ihracatı bulundu! Bu açık ama kullanışlı cevap için çok teşekkürler.
Dragos

Bunun için teşekkürler. İplik çalışma alanlarını kullanırken bu durum vardı, bu yüzden her yerde yol çözümleme algoritmaları ve her türlü arıyordum. :) Hata mesajının modülü 'bulma' ile ilgili konuşması ve ESLint'in de benzer hata mesajları veriyordu. Ve sonra cevabını gördüm ve kararsız olduğumu fark ettim. Teşekkürler!
Mark Birbeck

5

node_moduleKök klasörünüzü projenizden kaldırın (örneğin:) myApp. myAppKlasöre gidin ve terminalden aşağıdaki komutu yazın

>myApp>npm install

Projeniz için gerekli tüm bağımlılık modüllerini kuracaktır.


Verdiğiniz çözüm hakkında biraz daha açıklama ekleyerek cevabınızı biraz daha açıklayabilir misiniz?
abarisone

5

Bu hata , package.json dosyasında requireeksik veya yanlış bir mainalana sahip bir modül kullanıyorsanız karşılaşılabilir . Modülün kendisi kurulu olsa da, npm / düğümü modülünüzün giriş noktası olarak tek bir .js dosyası kullanmalıdır. Eğer mainalan değil orada, varsayılan olarak arayan etmektir index.jssizin modülün klasöründe. Senin modülün ana dosyası ise değil index.js denilen, bu mümkün olmayacaktır requireona.

Bir browserifytabanlı modülü CommonJS uyumlu bir modüle dönüştürürken keşfedildi require; browserifyeksik mainalan umurumda değildi ve bu yüzden hata fark edilmemişti.


4

Node_modules klasörünün içinde olacak şekilde restler klasörünün yolunu belirtin: var rest = requir ('./ node_modules / restler');

Bu benim için çalıştı.


3

Typescript kullanıyorsanız ve tüm düğüm modüllerini kurduktan sonra bir hata alıyorsanız kaldırın package-lock.json. Ve sonra koş npm install.


2

PRO İPUCU:

Bu hata, yorgunluk ve hafif hastalıklarla savaşırken başıma geldi, çünkü node blahbunun yerine yazdım npm blah.

Alınan hata mesajı beni kendi çılgınlığımı uyaracak kadar kızgın değildi!


2

Aynı sorunla karşılaştım, takımdaki başka biri package.jsonSVN'de güncelledi . Sadece node_modulesdizini kaldırmak yardımcı olmadı. Sorunu nasıl çözdüm:

rm -rf node_modules
rm package.json
rm package-lock.json
svn up
npm install
ng build --env=prod

Umarım bu birine yardımcı olur!


Hatırlatma için teşekkürler. Benim durumumda package-lock.json tekrar işleri karıştırıyordu ama sildikten ve node_modules'ü sildikten sonra npm installhepsini çalıştırmak yine iyi.
TaeKwonJoe

6
Kaldırırsanız package.jsonNPM ne yüklemeyi biliyor?
Michał

1

Kontrol etmek için bir yer daha ekleyebilirim; kullanmaya çalıştığım paket, özel bir NPM deposunda yayınladığım kendi paketlerimden biriydi. Package.json 'ana' özelliği düzgün yapılandırmak unuttum. Yani, paket tüketen paketin node_modules klasöründe vardı, ama ben "modülü bulamıyorum" alıyordum. Gaflarımı fark etmem birkaç dakika aldı. :-(


1

Benim durumumda UNMET PEER DEPENDENCY redux@^3.0.0bu hata mesajına neden oldum , hepsini görüyorum ve --save kullanarak eksik modülleri tekrar yükledim

npm install redux --save

1

Düğüm / npm kaldırıldıktan sonra kararlı (en son değil) sürümü yeniden yüklemek benim için çalıştı.

sudo rm -rf /usr/local/{lib/node{,/.npm,_modules},bin,share/man}/{npm*,node*,man1/node*}

https://nodejs.org/en/download/


0

Kendi paketimi yayınlamaya ve daha sonra başka bir projeye dahil etmeye çalışıyordum. İlk modülü nasıl oluşturduğum yüzünden bu sorunu yaşadım. Im modül oluşturmak için ES2015 verme kullanarak, örneğin diyelim ki modül şöyle görünüyor:

export default function(who = 'world'){
    return `Hello ${who}`;
}

Babel ile derlendikten sonra yayınlandı:

'use strict';

Object.defineProperty(exports, "__esModule", {
    value: true
});

exports.default = function () {
    var who = arguments.length <= 0 || arguments[0] === undefined ? 'world' : arguments[0];


    return 'Hello ' + who;
};

Sonra npm install module-namebaşka bir projede (hiçbiri ES2015) yapmak zorunda kaldım

var hello = require('module-name').default;

Aslında paketi ithal etmek için.

Umarım yardımcı olur!


0

Kullanırken bu sorunla karşılaştı webpackile webpack-dev-middleware.

Bir dönmüştü tek bir dosya bir içine klasöre .

İzleyici yeni klasörü görmüyordu ve modül şimdi eksikti.

İşlem yeniden başlatılarak düzeltildi.


0

Birisi için yararlı olabilecek ve kırmızı bir ringa balığı olan alışılmadık bir senaryo buldum.

Ayrıca Can't Find Module hatası alıyordum ama garip bir şekilde her şey yerel (Mac tarafından barındırılan) Node.js ortamında mükemmel çalıştı. Bu sorun yalnızca kod Linux sunucumuza dağıtıldığında ortaya çıktı.

Şey ... Mac tabanlı Node.js kurulumunun görmezden geldiği için mutlu olduğu bir yazım hatası olduğu ortaya çıktı.

Dahil etmek şöyle görünüyordu:

var S3Uploader = require('./S3Uploader.class');

Ancak asıl dosyaya "s3Uploader.class.js" adı verildi

Kod ile dosya adı arasındaki 's' ve 'S' arasındaki kasa farkına dikkat edin.

Yani - buradaki diğer çözümlerin hiçbirinin sorununuzu çözmemesi tuhaf bir şekilde, dahil edilen dosya adınızdaki karakterleri yanlış koymadığınızı üç kez kontrol edin! :)

ve DUH!


1
Varsayılan olarak osx dosya sistemi (HFS +) büyük / küçük harfe duyarsızdır ... çok uzun zaman önce keşfedilmemiş, kesinlikle yapılandırılabilir
giulp

0

Belki benim gibi 'görüntüleme motoru'nu, var olmayan bir motora açık olarak ayarladınız veya kayıtlı olmayan bir şablonlama motoru kullanmaya çalıştınız. Kullandığınızdan emin olun: app.engine('engine name',engine) app.set('view engine','engine name')


0

Lütfen yeni CLI v3'ü yükleyin (npm install -g ionic @ latest).

Bu sorun CLI v3'te hala bir sorunsa. Teşekkür ederim!


0

Paket başarıyla yüklendiyse node_modules klasörünüze gidin, ardından dosyayı ve yolu kontrol edin. Ardından içe aktarın. Bu yardımcı olur umarım.


-3

Her şeyden önce, evet, cevabımın bir kısmı OP tarafından gönderilen hatayı çözmek için kesinlikle yararlıdır . İkincisi, aşağıdaki adımı denedikten sonra, birkaç başka hatayla karşılaştım ve böylece bunların çözümünü de yazdım.

(Psst! Yukarıdaki hatayı çözmede başarılı bir şekilde yardımcı olup olmadığımdan emin değilim veya yanıtlamanın bir kuralını veya biçimini kırdıysam, ancak yukarıdaki hatayla ve bazılarıyla karşılaştım ve bulmam çok zaman aldı Tam bir çözüm yazıyorum çünkü başka biri de bu hatalarla karşılaşırsa, umarım burada bir çözüm elde eder.)

Bu yüzden PrashanthiDevi tarafından verilen cevabı ekleyerek ve detaylandırarak ve ayrıca kişisel deneyimimi ekleyerek, işte burada:

Tüm e2e ve birim testleri bölümünde yeniyim. Bu bölüme İletki'den bakmaya başladım . Şimdi testlerin yazıldığı dosyalara zaten sahiptim, ama testleri yapmak zorunda kaldım.

Gerekli tüm yazılımları ve araçları zaten yükledim, ancak testleri çalıştırmak için kodu ilk çalıştırdığımda, gulp itestbu 'Modül bulunamıyor' Hatası aldım . SO hakkında birçok farklı sorudan geçtikten sonra, bir çözüm bulmaya yardımcı olabileceğini düşündüğüm bir cevap buldum.

Kişi komutu npm installbenim proje klasörümde çalıştırmayı önermişti .

Bunu yapmanın nedeni , proje klasörümüz içindeki düğüm modülleri klasörünü gerekli ve gerekli tüm dosyalar ve bağımlılıklarla güncellemekti.

(Aşağıdaki bölüm bu soru ile ilgisiz olabilir, ancak karşılaştığım aynı durumla karşılaşan biri yardımcı olabilir.)

Yukarıdaki adım kesinlikle önceki hatamı çözdü , ancak yeni bir hata attı! Bu kez hata Could not find chromedriver at '..\node_modules\protractor\selenium\chromedriver'.

Ancak, bu hatanın çözümü bana oldukça aptalca (ve komikti) oldu. Selenyum klasörümde zaten kromografi dosyası vardı . Ancak, yukarıdaki hatanın geldiği ortaya çıktı, çünkü krometrom dosyalarım selenyum klasörünün içinde ve içinde değil, kromedriver klasörünün içinde değil . Yani, bir chromedriver klasörü oluşturmak ve orada chromedriver dosyaları kopyalamak benim sorunumu çözdü!

Ayrıca, hata için: WebDriver Sunucusunu beklerken zaman aşımına uğradı , bu kod satırını ekleyebilirsiniz için conf.js dosya içeriden exports.config{}:

seleniumAddress: 'http://localhost:8080/'

Bu yardımcı olur umarım!


-4

Bu sorunu çözmek için basit bir çözüm buldum.

C: \ Users \ KullanıcıAdı \ AppData \ Roaming \ npm \ öğesini kaldırmanız yeterlidir

ve sonra düğümü yükleyin.

Şimdi probleminiz çözülecek.


Unix kullanıyor. Windows değil.
Saif Al Falah

-4

Yalnızca aşağıdaki komutu çalıştırın:

npm install

Gerekli tüm modülleri node_modulesklasöre yükleyecektir .


-5
rm -rf node_modules
npm install
npm fund

bu iş benim için.


-38

Dizini değiştirin ve geçerli proje klasörünüzün üzerine gelin ve sonra "npm install". .

Bu, tüm bağımlılıkları ve modülleri proje klasörünüze yükleyecektir.


2
Bu cevap yanlış görünmüyor, olumsuz oylamanın bazı önyargıların ve destekleyici alaycı yorumların bir sonucu olduğunu hissediyorum.
Muqsith

2
bu kadar aşağı vekil biraz fazla. Tamamen belirsiz değil. Kabul edilen cevapla ilgilidir. Tüm cevaplar npm installdoğru dizinde yapmaktır . Bu konuda olumsuz bir şey yok
shinobi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.