npm windows install secara global menghasilkan npm ERR! asing

121

Saya baru mendengus dan npm. Jadi saya mencoba beberapa "contoh buku masak" di situs ' http://tech.pro/tutorial/1190/package-managers-an-introductory-guide-for-the-uninitiated-front-end-developer#front_end_developers ' . Anda seharusnya tidak perlu melihat ke sana sekarang, tetapi saya pikir akan lebih baik jika membagikan situs ini. Sejauh ini bagus, sampai itu datang ke instalasi global. (Ok, beberapa kesalahan saya harus mencari tahu, tapi sekarang saya sudah bekerja npm).

Ketika sampai pada titik mencoba menginstal sesuatu secara global, saya terjebak.

Apa yang saya lakukan sejauh ini untuk menguji menginstal beberapa paket secara global:

  1. Membuat direktori uji grunttest

  2. Di dalam direktori itu:

    npm install -g jshint

Output yang saya lihat:

 npm http GET https://registry.npmjs.org/jshint
 npm http 304 https://registry.npmjs.org/jshint
 ...
 npm http 304 https://registry.npmjs.org/string_decoder
 C:\Program Files\nodejs\node_modules\npm\jshint -> C:\Program Files\nodejs\node_modules\npm\node_modules\jshinnt
 [email protected] C:\Program Files\nodejs\node_modules\npm\node_modules\jshint
 ├── [email protected]
 ├── [email protected]
 ├── [email protected]
 ├── [email protected]
 ├── [email protected] ([email protected], [email protected])
 ├── [email protected] ([email protected])
 └── [email protected] ([email protected], [email protected], [email protected], [email protected])

Saya baru menyadari 304, yang seharusnya baik-baik saja, karena hanya mengatakan sumber daya tidak diubah sejak instalasi terakhir (beberapa menit sebelumnya).

Memeriksa apakah jshint ada dengan:

`npm -global list`

Keluaran:

[email protected] C:\Program Files\nodejs\node_modules\npm
├── [email protected]
├── [email protected]
├─...
├──
├── [email protected]
├── [email protected]
├── [email protected]
├─┬ [email protected]
│ └── [email protected]
├─┬ [email protected] extraneous
│ ├─┬ [email protected]
│ │ └─┬ [email protected]
│ │   └── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├─┬ [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ └─┬ [email protected]
│ │   └─... ├── [email protected]
├── [email protected]
└── [email protected]

**npm ERR! extraneous: [email protected] C:\Program Files\nodejs\node_modules\npm\node_modules\jshint npm**

Pertanyaan:

  1. Mengapa saya mendapatkan npm ERR! asing ...?
  2. Apa artinya?
  3. Bagaimana cara mengatasi masalah ini?

Informasi:

Saya menggunakan mesin windows Windows 7, menggunakan cygwin sebagai shell. mencoba hanya jshint ( jshint someTestfile.js) saja tidak berhasil.

Terima kasih sebelumnya, Meru

Meru
sumber

Jawaban:

208

npm ERR! extraneousberarti sebuah paket diinstal tetapi tidak terdaftar dalam proyek Anda package.json.

Karena Anda membuat daftar paket yang telah diinstal secara global, itu akan memberi Anda banyak kesalahan yang tidak relevan yang dapat diabaikan begitu saja karena sebagian besar hal yang diinstal secara global tidak akan ada dalam proyek Anda package.json.

Kyle Robinson Young
sumber
1
Hai! Terima kasih atas jawabannya. Apakah ini juga berarti, bahwa saya sebenarnya harus bisa menjalankan "jshint", benar?
Meru
Benar. Menjalankan jshint myfile.jsharus menjalankan jshint myfile.js.
Kyle Robinson Young
1
Ah begitu. Dengan Grunt, semuanya berjalan melalui tugas. Anda akan memuat dan mengkonfigurasi grunt-contrib-jshinttugas di file Gruntfile.js. Satu-satunya hal yang Anda instal secara global adalah npm i grunt-cli -gyang memberi Anda akses untuk menjalankan gruntperintah untuk menjalankan file Gruntfile.js. Lihat panduan ini untuk info lebih lanjut: gruntjs.com/getting-started
Kyle Robinson Young
8
Jika Anda memiliki perpustakaan asing yang disimpan secara lokal (tidak secara global), Anda dapat menjalankan npm pruneuntuk menghapusnya.
krx
2
@Robinson Young: Bagaimana kalau menyebutkan ini dalam jawaban. Anda dapat menghapus semua paket yang tidak digunakan menggunakannpm prune --your-env
geek_guy
21

1 & 2: Ini berarti Anda tidak memiliki jshint yang terdaftar di file package.json proyek Anda, tetapi itu diinstal secara global. Jadi itu bukan masalah besar.

3: Untuk menghindari kesalahan asing ini , Anda dapat menjalankan atau menjalankan ulang penginstalan dengan opsi --save. Ini akan memperbarui secara otomatis file package.json Anda:

npm install -g jshint --save

Atau perlu memperbarui file package.json Anda secara manual dengan file "dependencies": {...}

rebe100x
sumber
dalam banyak kasus hanya bekerja dengan lokal tanpa duplikat global
BG BRUNO
2
--savetidak bekerja sama dengan -g. Daftar paket global tidak memiliki package.json.
Guido Bouman
5

Saya menyelesaikan ini dengan melakukan npm updatedi folder paket induk yang menghapus beberapa paket asing dari daftar dan kemudian melakukannya npm uninstall <package>untuk beberapa yang tersisa.

Tampaknya berhasil, karena saya tidak mendapatkan kesalahan setelah melakukan ini.

metakermit
sumber
3

Saya menyelesaikannya dengan menggabungkan semua jawaban. Awalnya saya menginstal paket secara global.

npm install -g packagename --save

Karena npm menginstal paket ini juga secara global tetapi tidak menambahkannya ke file package.json lokal saya, saya harus melakukan sesuatu.

Saya memilih, solusi untuk menghapus yang lokal dan kemudian menginstalnya secara global.

npm uninstall packagename
npm install -g packagename

Dengan cara ini saya tidak memiliki peringatan lagi dan tidak mengacaukan file package.json.

pencetak gol
sumber
Ditambah 100. Saya harus menghapus instalasi secara lokal dan menginstal secara global.
Collin Peters
1

Saya kasus saya, saya melihat 'npm ERR ini! pesan 'asing' di terminal cygwin saya ketika saya melakukan 'npm ls'. Saya pikir ini adalah semacam pengaturan yang rusak secara global setelah banyak mengutak-atik. Saya mempelajari pengamatan berikut di sini:

  • 'npm ls' memberikan keluaran yang berbeda bergantung pada lokasi folder Anda saat ini.
  • 'npm ls' mencoba mendeteksi keberadaan folder 'node_modules' di lokasi folder saat ini, dan mencantumkan isinya. BUKAN yang global!
  • Selain itu, jika folder saat ini yang berisi 'node_modules' juga memiliki file package.json yang berisi lebih sedikit modul yang tercantum di sini, kesalahan akan muncul.

Saya 'rm package.json' dan 'npm ls' tidak lagi menampilkan pesan kesalahan. Jadi saya katakan, itu selalu memeriksa lokasi saat ini untuk keberadaan folder 'node_modules' dan file package.json karena ini diprioritaskan pertama kali di cek dan jika ini hilang, pemeriksaan berlanjut ke folder induk dan seterusnya, dan jika Anda telah mengotak-atik banyak cuplikan kode, maka Anda mungkin telah menyebarkan banyak sekali folder node_modules dan file package.json. Tidak ada yang benar-benar rusak di sini, tidak seperti pengalaman yang kami alami saat melakukan pengembangan Java / eclipse IDE J2EE atau pada hari-hari ketika kami harus menggunakan regedit untuk mengubah pengaturan di Windows.

kebenaranadjustr
sumber
1

Dalam kasus saya, itu karena nama paket di package.jsonfilenya tidak sama dengan nama depensi yang tercantum di package.jsonmodul dependen. Kesalahan saya, karena ini adalah modul baru yang saya buat, tetapi sulit dikenali, karena npm tidak akan memberikan petunjuk apa pun.

Ini terjadi saat menggunakan dependencies: { "my-module": "file:local-modules/mymodule" }sintaks, dengan kesalahan ketik pada nama "modul-saya".

youen
sumber
0

Ini karena paket Anda tidak ada di package.json Anda. Jika Anda menambahkannya, masalah akan terpecahkan, silakan lihat gambar di bawah ini:

masukkan deskripsi gambar di sini

Narendra Sagadevan
sumber