Saya sedang mengembangkan dua modul untuk NodeJS, yang pertama bernama aligator
dan yang kedua aligator-methods
. Yang kedua tergantung pada yang pertama untuk bekerja. Saya mengembangkan dua modul ini pada saat yang sama dan saya ingin tautan global aligator
sehingga saya dapat menggunakannya seperti di registri npm dan saya baru saja menginstalnya secara global. Untuk melakukan ini, dokumentasi NPM mengatakan bahwa saya perlu menggunakan npm link
tetapi tidak berfungsi.
File package.json
modul aligator
:
{
"name": "aligator",
"version": "0.0.1",
"description": "",
"main": "index.js",
"private": true,
"directories": {
"doc": "docs",
"example": "examples",
"test": "spec"
},
"scripts": {
"test": "gulp jasmine"
},
"license": "MIT",
"devDependencies": {
"gulp": "^3.6.2",
"gulp-jasmine": "^0.2.0",
"gulp-jshint": "^1.6.1",
"gulp-rename": "^1.2.0",
"jasmine-node": "^1.14.3"
},
"dependencies": {
"bluebird": "^1.2.4",
"lodash": "^2.4.1",
"mathjs": "^0.22.0"
}
}
File package.json
modul aligator-methods
:
{
"name": "aligator-methods",
"version": "0.0.1",
"description": "",
"main": "index.js",
"private": true,
"directories": {
"doc": "docs",
"example": "examples",
"test": "jasmine"
},
"scripts": {
"test": "gulp jasmine"
},
"author": "",
"license": "MIT",
"devDependencies": {
"gulp": "^3.6.2",
"gulp-jasmine": "^0.2.0",
"gulp-jshint": "^1.6.1",
"gulp-rename": "^1.2.0",
"jasmine-node": "^1.14.3"
},
"dependencies": {
"lodash": "^2.4.1",
"mathjs": "^0.22.0",
"aligator": "^0.0.1"
}
}
Pertama-tama saya menautkan modul secara global:
$ cd ~/aligator
$ npm link
/usr/local/lib/node_modules/aligator -> /Users/roc/aligator
Ini jika saya tidak salah telah membuat referensi global modul saya aligator
dan sekarang saya dapat menggunakan modul ini dari mana pun yang saya inginkan di komputer.
Kemudian saya pergi ke modul lain dan mencoba menginstal dependensi tetapi itu memberi saya output ini:
$ cd ~/aligator-methods
$ npm install
npm ERR! 404 404 Not Found: aligator
npm ERR! 404
npm ERR! 404 'aligator' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it
npm ERR! 404 It was specified as a dependency of 'aligator-methods'
npm ERR! 404
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, or http url, or git url.
npm ERR! System Darwin 13.2.0
npm ERR! command "node" "/usr/local/bin/npm" "install"
npm ERR! cwd /Users/roc/aligator-methods
npm ERR! node -v v0.10.28
npm ERR! npm -v 1.4.16
npm ERR! code E404
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /Users/roc/aligator-methods/npm-debug.log
npm ERR! not ok code 0
Saya bahkan mencoba menautkannya langsung dengan:
$ cd ~/aligator-methods
$ npm link aligator
/Users/roc/aligator-methods/node_modules/aligator -> /usr/local/lib/node_modules/aligator -> /Users/roc/aligator
Tapi itu juga tidak berhasil.
Ada pemikiran tentang apa yang mungkin terjadi? Saya membaca di suatu tempat bahwa mungkin itu ada hubungannya dengan instalasi node dan npm saya karena dibuat oleh Homebrew dan terkadang saya perlu menggunakan sudo
, sepertinya tidak mungkin tetapi saya mencoba apa yang mereka usulkan dan itu tidak berhasil juga.
aligtor
dan Anda mencoba merujuknya di modul kedua sebagaialigator
. Itu juga dapat membuat ketergantungan Anda macet.main
sayapackage.json
, terima kasih telah memperbarui jawaban dengan perbaikan Anda!Jawaban:
Saya mengalami masalah ini karena NVM, saya menjalankan satu versi node untuk dependensi dan satu lagi untuk dependensi.
sumber
Menghapus
package-lock.json
lalu menjalankannpm install
kembali menyelesaikan masalah bagi saya.sumber
package.json
juga, tetapi sebagian besar waktu saya melihat bahwapackage-lock.json
atauyarn.lock
telah menjadi penjaga gerbang untuk ini.Masalahnya adalah
main
properti daripackage.json
menunjuk ke file yang tidak ada. Tampaknya masalah dapat terjadi karena berbagai alasan, jadi pastikan untuk melihat jawaban lain.sumber
main
. Sebagian besar saya melakukannya tanpa itu, tapi tebak itu menciptakan masalah kecil ini.Saat Anda pertama kali menjalankan
npm link
darialigator
direktori, Anda membuat tautan dari direktori global node_modules kealigator
. Kemudian ketika Anda menjalankannpm link aligator
darialigator-methods
direktori, Anda menautkanaligator
dari node_modules yang diinstal secara lokal ke sumber asli (seperti yang ditunjukkan keluaran dalam contoh Anda di atas). Setelah ini selesai, tidak perlu menginstal lagi karena sudah "diinstal". Kesalahan apa yang Anda lihat setelah Anda menjalankannpm link aligator
perintah?Jika Anda hanya ingin menginstal dependensi dari direktori lokal, Anda dapat mencoba menggunakan
npm install
. Sebagai contoh:sumber
npm link
tidak menunjukkan kesalahan apa pun. Masalah dalam kasus saya adalah propertimain
tersebut mengarah ke file yang tidak ada. Adapun saya,npm install
Anda benar, saya tidak perlu menginstal apa pun dannpm link
melakukan semuanya. Terima kasih untuk itu saya tidak mengetahuinya.Masalah saya akhirnya adalah bahwa repo A digunakan
npm
dan repo B sedang digunakanyarn
, jadi saya perlu menjalankanyarn link
di repo B untuk menariknya masuk melaluinpm link package-name
ke repo A.sumber
Apa yang berhasil bagi saya adalah:
node_modules
di modul ketergantungan dan konsumen.npm unlink --no-save [dependency-module]
Sekarang saya dapat menguji sepenuhnya modul saya yang tidak dipublikasikan secara lokal.
Selain itu, ada perintah paket npm yang dapat membantu Anda menguji modul yang tidak diterbitkan, meskipun tidak sekuat itu.
npm-pack
sumber
Perbaiki untuk versi saya tentang masalah ini; di npm v5.3.0, saya menghapus
node_modules
dari repo yang saya tautkan ke proyek lain.Saya menemukan bahwa setelah npm v3 mereka mencoba untuk menempatkan semua dependensi node_modules ke dalam satu direktori node_modules (satu di proyek Anda) untuk meratakan struktur sebanyak mungkin ( http://codetunnel.io/npm-5-changes-to-npm -link / ).
sumber
Bagi saya ini terjadi ketika saya menurunkan nomor versi paket lokal saya dari 0.1.0 menjadi 0.0.1. Dan dalam proyek tempat saya menautkan ke paket ini, saya masih menggunakan nomor versi yang lebih tinggi. Memperbarui dependensi dalam
package.json
memperbaikinya.sumber
Saat menggunakan peerDependency
Saya sedang mengembangkan dua paket
stejs
,, danstejs-loader
.stejs-loader
memilikistejs
sebagai apeerDependency
. Ketika saya menjalankannpm link stejs-loader
dannpm link stejs
dalam proyek saya, saya mendapatkan kesalahan itustejs-loader
tidak dapat ditemukanstejs
. Saya memperbaikinya dengan menjalankannpm link stejs
direktoristejs-loader
.sumber
Periksa tsconfig moduleResolution
Jika seperti saya, Anda kebetulan mengubah tsconfig
module
daries5
menjadiesnext
atau semacamnya, makamoduleResolution
defaultnya mungkin telah berubah.Tanpa
moduleResolution
disetel ke "node", skrip tidak akan menyelesaikan paket node_modules.Anda dapat membaca di halaman Compiler Options tentang bagaimana nilai default bergantung pada nilai
module
, yang defaultnya bergantung padatarget
- tapi mungkin secara eksplisit mengaturnya ke "node".sumber