NPM global kurulumu “modülü bulamıyor”


206

Bir dakika önce npm'de yayınladığım bir modül yazdım (https://npmjs.org/package/wisp)

Böylece komut satırından iyi yüklenir:

$ npm i -g wisp

Ancak, komut satırından çalıştırdığımda, iyimser yüklü olmayan bir hata alıyorum:

$ wisp 
Error: Cannot find module 'optimist'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:362:17)
    at require (module.js:378:17)
    at Object.<anonymous> (/usr/local/lib/node_modules/wisp/wisp:12:10)
    at Object.<anonymous> (/usr/local/lib/node_modules/wisp/wisp:96:4)
    at Module._compile (module.js:449:26)
    at Object.exports.run (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/coffee-script.js:68:25)
    at compileScript (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/command.js:135:29)
    at fs.stat.notSources.(anonymous function) (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/command.js:110:18)

Ancak, package.json'da bir bağımlılık olarak belirttim:

{
  "name": "wisp",
  "author": "Brendan Scarvell <bscarvell@gmail.com>",
  "version": "0.1.0",
  "description": "Global nodejs file server",
  "dependencies": {
    "optimist": "~0.3.4"
  },
  "repository": "git://github.com/tehlulz/wisp",
  "bin": {
    "wisp" : "./wisp"
  }
}

Herkes bunu çalıştırmak için ne yapacağını biliyor mu? Onun bin bölümü yürütülebilir bin ve bu dizindeki node_modules ekleyerek bin parçası ile yapmak biliyorum. Bunu nasıl çözeceğiniz hakkında hiçbir fikrim yok.


-g seçeneği olmadan yüklerseniz ne olur?
vinayr

Geçerli dizine içinde wisp olan bir node_modules klasörü yükler.
Menztrual

Biliyorum. Hala hata alıyor musunuz?
vinayr

Evet. Yerel bir npm i wisp yaptıktan sonra wisp'i çalıştırmaya çalışırsam, yine de aynı hatayı döndürür
Menztrual

Modülünüzü yeni kurdum. Benim için iyi çalışıyor. WISP'in nerede? Benim durumumda ./node_modules/wisp/wisphangisinin iyi çalıştığını koştum .
vinayr

Yanıtlar:


370

Bunun içine çalışan herkes için, benim npmolmayan bir konuma yüklemem nedeniyle bu sorunu yaşadım NODE_PATH.

[root@uberneek ~]# which npm
/opt/bin/npm
[root@uberneek ~]# which node
/opt/bin/node
[root@uberneek ~]# echo $NODE_PATH

NODE_PATH'ım boştu ve çalışmakta npm install --global --verbose promised-ioolduğunu gösterdi /opt/lib/node_modules/promised-io:

[root@uberneek ~]# npm install --global --verbose promised-io
npm info it worked if it ends with ok
npm verb cli [ '/opt/bin/node',
npm verb cli   '/opt/bin/npm',
npm verb cli   'install',
npm verb cli   '--global',
npm verb cli   '--verbose',
npm verb cli   'promised-io' ]
npm info using npm@1.1.45
npm info using node@v0.8.4
[cut]
npm info build /opt/lib/node_modules/promised-io
npm verb from cache /opt/lib/node_modules/promised-io/package.json
npm verb linkStuff [ true, '/opt/lib/node_modules', true, '/opt/lib/node_modules' ]
[cut]

Betiğim başarısız oluyor require('promised-io/promise'):

[neek@uberneek project]$ node buildscripts/stringsmerge.js 

module.js:340
    throw err;
          ^
Error: Cannot find module 'promised-io/promise'
    at Function.Module._resolveFilename (module.js:338:15)

Muhtemelen kaynak kullanarak düğüm ve npm yükledim configure --prefix=/opt. Bunun neden kurulu modülleri bulma yeteneğini kaybettiğini bilmiyorum. Şimdilik düzeltme, NODE_PATH öğesini doğru dizinde göstermektir:

export NODE_PATH=/opt/lib/node_modules

Benim require('promised-io/promise')şimdi başarılı olur.


10
bu NODE_PATH nerede ayarlanır ??
kum

8
@sandy NODE_PATH ortam değişkenini ayarladığınız yer işletim sisteminize bağlıdır. Ben bir Linux lezzet kullanıyorum, bu yüzden export NODE_PATH=...o kabukta çalışan komutlara ihraç böylece yerel kabuk ayarlamak için kullanılır . Değişikliği kalıcı veya tüm mermiler tarafından kullanılabilir hale getirmek için .profile veya benzeri bir yere koyun. Bir bütün olarak konsept yeni başlayanlar için can sıkıcı bir şekilde karmaşıktır, help.ubuntu.com/community/EnvironmentVariables adresini okumayı deneyin . Windows için Linux'a geçmek isteyeceksiniz. Tamam, şaka yapıyorum. Computerhope.com/issues/ch000549.htm dosyasını deneyin veya google.
Neek

13
OSX Lion için aşağıdakiler benim için çalıştı ... export NODE_PATH = / usr / local / lib / node_modules Doğru yolu izlemek için 'node_modules'i bul' kullandım.
k1eran

2
NODE_PATH, WINDOWS için de çalışıyor. Bu köklü düğümler hem yerel hem de küresel olarak kurulabilir modüller.
33'te zinking

5
Mac OS X'te Homebrew ile Node.js yüklediyseniz: open -a TextEdit ~/.bash_profileTerminal'de Çalıştır'ı tıklatın, ardından export NODE_PATH=/usr/local/lib/node_modulesdosyanın sonuna ekleyin . Terminal penceresini yeniden başlatın. Şimdi koşu echo $NODE_PATHyazdırmalı /usr/local/lib/node_modules.
Pwdr

39

bunu prog (mac) 'un başına ekle:

module.paths.push('/usr/local/lib/node_modules');


4
Bunu os olmayan bir şekilde yapmanın herhangi bir yolu var mı?
UpTheCreek

@UpTheCreek bu olduğunu olmayan bir os spesifik bir yol. It adlı JS kodunun, sadece için moduleyou aradığınız olan bir node_modules işaret gerekir
Adelin

@Adelin - Bu, sisteme özgü bir çözümdür, çünkü genel düğüm_ modülleri konumu işletim sistemine özeldir. Örneğin, pencerelerde gelişiyor ve üretimde linux çalıştırıyorsanız, bu harika bir çözüm değildir.
UpTheCreek

Bu kolayca üstesinden gelir. Örneğin, düğüm yolunu bir env değişkenine kaydedebilir ve sabit kodlu yolu os.environ.nodepath(bu satırlar boyunca bir şey) ile değiştirebilirsiniz.
Adelin

macOS Mojave 10.14.6, yerel .js kodunun etkilenmediğinden daha fazla bağımsız olan ~ / bash_profile dosyasına NODE_PATH = / usr / local / lib / node_modules / npm / node_modules ihracatının eklenmesini gerektirir.
vwvan

16

Varsayılan olarak, düğüm genel modülleri yüklemek için / usr / local / lib / node_module içine bakmaz. Http://nodejs.org/api/modules.html#modules_loading_from_the_global_folders içinde açıklanan modül yüklemesine bakın

Yani ya 1) / usr / local / lib / node_module'u NODE_PATH'a eklemeniz ve dışa aktarmanız ya da 2) kurulu düğüm modüllerini / usr / local / lib / node'a kopyalamanız gerekir. (Modül düğümü yükleme bağlantısında açıklandığı gibi bu yolda arama yapacak ve çalışacaktır)


10

Bazıları için (benim gibi) başka hiçbir şey işe yaramadı, şunu deneyin:

brew cleanup
brew link node
brew uninstall node
brew install node

Umarım birine yardımcı olur :)


9

Aşağıdaki genel düzeltme herhangi bir modül için geçerlidir. Örneğin ile request-promise.

değiştirmek

npm install request-promise --global

İle

npm install request-promise --cli

çalıştı ( kaynak ) ve ayrıca globalsveinherits

Ayrıca, ortam değişkenini ayarlamayı deneyin

NODE_PATH=%AppData%\npm\node_modules


3

$ vim /etc/profile.d/nodejs.sh

NODE_PATH=/usr/lib/nodejs:/usr/lib/node_modules:/usr/share/javascript
export NODE_PATH="$NODE_PATH"

Varsayılan olarak oradadır. Kullanıcılar için yüklenir, ancak kök olarak çalıştırılırken, bu nedenle kök kullanıcının yoluna dahil edilmesi gerekir.
stamster

2

Windows için, Nodejs yüklü modülü Windows'ta bulamıyor mu? benim için işe yarayan npm bağlantısı olduğu gibi çalışıyor

npm link wisp

Dikkatli bir kelime olsa - bunu yaptım ama sonra fermuar kodumu AWS lambda ile kullanamadı. Node_module npm install wisp --save(-g seçeneği olmadan) gibi yerel olarak oluşturulan olması gerekiyordu
PM

2

Mac Kullanıcısı için En iyisi manuel kurulumu kullanın:

İzin hatası olasılığını en aza indirmek için, npm'yi farklı bir dizin kullanacak şekilde yapılandırabilirsiniz. Bu örnekte, ana klasörünüzde gizli bir dizin olacaktır.

  1. Başlamadan önce bilgisayarınızı yedekleyin.

  2. Global kurulumlar için bir dizin oluşturun:

    mkdir ~ / .npm-global

  3. Npm'yi yeni dizin yolunu kullanacak şekilde yapılandırın:

    npm yapılandırma kümesi öneki '~ / .npm-global'

  4. Bir ~ / .profile dosyası açın veya oluşturun ve şu satırı ekleyin:

    ihracat PATH = ~ / .npm-global / bin: $ PATH

  5. Komut satırına geri döndüğünüzde, sistem değişkenlerinizi güncelleyin:

    kaynak ~ / .profile

  6. Test: sudo kullanmadan global olarak bir paket indirin.

    npm yükleme -g jshint

2-4. Adımlar yerine, karşılık gelen ENV değişkenini kullanabilirsiniz (örneğin, ~ / .profile dosyasını değiştirmek istemiyorsanız):

NPM_CONFIG_PREFIX=~/.npm-global

Referans: https://docs.npmjs.com/getting-started/fixing-npm-permissions


1

Aynı sorun Ubuntualtında çalışan test sunucularından birinde vardı root. Sonra kullanarak yeni bir kullanıcı oluşturdunuz useradd -m myuserve yüklü her şeyi ( nvm, nodeolarak, paketler) myuser. Şimdi iyi çalışıyor.


1

Windows'ta temiz bir kurulum yaptıysanız ve bunu alırsanız \ AppData \ Roaming'de npm önbelleğinizi havaya uçurmanız gerekir


1

Benim durumumda ikisi de nodeve npmaynı yoldaydı ( /usr/bin). NODE_PATHBöylece, boş npmiçine küresel modülleri yerleştirilir /usr/lib/node_modulesnerede require(...)başarıyla onları bulmak. Tek istisna npmnodejs paketi ile birlikte gelen modül oldu . 64 bit sistem kullandığım için yerleştirildi /usr/lib64/node_modules. Boş NODE_PATHve düğümün başladığı durumlarda requir (()) aramaları burası değildir /usr/bin. İki seçeneğim vardı:

  • bağlantı /usr/lib64/node_modules/npmvermek/usr/lib/node_modules/npm
  • modülleri 'den' /usr/lib/node_modules/*e taşı /usr/lib64/node_modules/ve ayarlaNODE_PATH=/usr/lib64/node_modules

İkisi de çalıştı. OpenSUSE 42.1 ve güncellemeler deposundan nodejs paketini kullanıyorum. Sürüm 4.4.5.


1

Bunu basit bir şekilde yaptım ...

  1. Düğümü kontrol panelinden kaldır [Windows 7]
  2. Düğümü tekrar yükle
  3. İletki npm install --global --verbose protractor
    yükleyin Web sürücüsü yöneticisini güncelleyin.

benim için iyi çalışıyor.

Umarım bu yardımcı olur ....


1

Ben Error: Cannot find module 'number-is-nan'modül aslında var iken bu hatayı aldım . Kötü / eksik Node.js kurulumundan kaynaklanıyordu.

Windows için, diğer cevapların önerdiği gibi, temiz bir Düğüm yüklemesine ihtiyacınız var :

  • Node.js dosyasını kaldırın
  • İki klasör silme npmve npm_cacheiçindeC:\Users\user\AppData\Roaming
  • Windows'u yeniden başlatın ve Node.js'yi yükleyin
  • Run npm initveya ( npm init --yesiçin varsayılan yapılandırma )
  • İçin Windows ortam değişkenini ayarlayın NODE_PATH. Bu yol, paketlerinizin yüklendiği yerdir. Muhtemelen böyle bir şeyNODE_PATH = C:\Users\user\node_modules or C:\Users\user\AppData\Roaming\npm\node_modules
  • Yeni bir cmd konsolu başlatın ve npmiyi çalışmalıdır

Not :

Node.js'yi yeniden yüklemeden önce son noktaları deneyin, size biraz zaman kazandırabilir ve tüm paketlerinizi yeniden yüklemekten kaçınabilir.


1

axiosModülün bu problemini yeni karşıladım . Sonra bunu denedim: koş rm -rf node_modulesve yarn. Ve çalışıyor.


0

Ben OP aynı hata vardı, ama görebiliyordu günlükleri kazma sh: node: command not found.

/ Usr / bin / node programının (symlink) artık yüklü olmadığı ortaya çıktı apt install nodejs. Bir kez sembolik olarak /usr/bin/node' tonodejs ,-g @ açısal yüklemek npm / cli` başardı.

Bunu debian'a kurmanın uygun yolu apt install nodejs-legacy.


0

Env değişkenlerime C: \ Users \ {Username} \ AppData \ Roaming \ npm eklemek zorunda kaldım ve sonra bir şeyler yükleyebilirim.

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.