NPM:「npmlink」モジュールが見つからない後


92

NodeJS用に2つのモジュールを開発しています。最初のモジュールは名前付きでaligator、2番目のモジュールは名前付きaligator-methodsです。2つ目は、最初の1つが機能するかどうかに依存します。これら2つのモジュールを同時に開発していて、グローバルリンクしaligatorて、npmレジストリにあるように使用できるようにし、グローバルにインストールしました。これを行うには、NPMのドキュメントに、使用する必要があると記載されていますnpm linkが、機能していません。

package.jsonモジュールのファイル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"
  }
}

package.jsonモジュールのファイル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"
 }
}

まず、モジュールをグローバルにリンクしました。

$ cd ~/aligator
$ npm link
/usr/local/lib/node_modules/aligator -> /Users/roc/aligator

これは、私が間違っていなければ、モジュールのグローバル参照を作成aligatorし、コンピューターのどこからでもこのモジュールを使用できるようになりました。

次に、他のモジュールに移動して依存関係をインストールしようとしましたが、次の出力が得られました。

$ 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

私はそれを直接リンクしようとさえしました:

$ cd ~/aligator-methods
$ npm link aligator
/Users/roc/aligator-methods/node_modules/aligator -> /usr/local/lib/node_modules/aligator -> /Users/roc/aligator

しかし、それも機能しませんでした。

何が起こっているのかについて何か考えはありますか?どこかで、nodenpmのインストールに関係があると読んだことがあります。これは、Homebrewによって作成されたためsudo、使用する必要がある場合があります。


投稿されたコードでは、最初のモジュールの名前が綴らaligtorれており、2番目のモジュールでそれをとして参照しようとしていますaligator。また、依存関係がクラッシュする可能性があります。
ブルーノ・トフォロ2016年

@BrunoToffoloええ、あなたは正しいですが、この場合、これは投稿のスペルミスでした。訂正しました、ありがとう。
roc 2016年

私の惨めな人生の4時間を失ったwebpackconfigをだまします:/あなたは私の命を救いました!+1
Tom Sarduy 2017

8
うわー、私は同じ問題が持っていたmain私のをpackage.json、あなたの修正との答えを更新していただき、ありがとうございます!
mattyb 2017年

あなたは答えを見つけた場合、答えとしてことを投稿する良いでしょうし、その1 :)で解決として質問を設定
アルベルト・S.

回答:


40

NVMが原因でこの問題が発生しました。依存関係用にノードのバージョンを実行し、依存関係用に別のバージョンを実行していました。


1
あなたや他の誰かが偶然これを解決する場所にリンクできますか?
Kevin Danikowski 2018年

4
私の場合、両方のパッケージで「nvm use <VERSION>」を実行する必要があります。ここで、VERSIONは両方のパッケージで同じです。
linuxdan 2018年

33

削除しpackage-lock.jsonてからnpm install再度実行すると、問題が解決しました。


3
これで現在の問題は解決する可能性がありますが、より大きな問題が発生する可能性があります。ロックファイルは非常に重要な役割を果たしているため、削除しないください。つまり、各チームメンバーがまったく同じ依存関係を使用していることを保証するメカニズムです。あなたはスタックオーバーフローでこの答えをチェックアウトすることができます:stackoverflow.com/questions/54124033/… しかし、それがドキュメントに存在する理由を読むことも良いスタートです。docs.npmjs.com/files/package-lock.json
SKuijers

1
これが完全に最後の手段であるべきであることを示す太字のメモがあった場合、私はこの答えを喜んで引き上げます。@SKuijersが指摘しているように、ロックファイルは依存関係のバージョンを維持する上で重要な役割を果たします。おそらく、依存関係のバージョンもロックダウンされてpackage.jsonいますが、ほとんどのpackage-lock.json場合、またはyarn.lockがこのためのゲートキーパーであることがわかります。
FrostyDog

33

問題は、のmainプロパティがpackage.json存在しないファイルを指していることでした。問題は複数の理由で発生する可能性があるようですので、必ず他の回答を確認してください。


1
私はこれを50回賛成し、賛成ごとに1回自分自身をフェイスパームしたいと思います。
ベン

プロジェクトにが必要であることを知るのは興味深いことmainです。ほとんど私はそれなしでやったが、それがこれらの小さな問題を引き起こすと思う。
cst19 9220年

素敵な発見!私はあなたの答えを見て、すぐにこれが私の問題であることがわかりました:)。
slashp

12

ディレクトリnpm linkから最初に実行するときにaligator、グローバルnode_modulesディレクトリからへのリンクを作成しますaligator。次にnpm link aligatoraligator-methodsディレクトリからを実行するときにaligator、ローカルにインストールされたnode_modulesから元のソースにリンクします(上記の例の出力を参照)。これが完了すると、すでに「インストール」されているため、インストールする必要はありません。npm link aligatorコマンドを実行した後、どのようなエラーが表示されますか?

ローカルディレクトリから依存関係をインストールするだけの場合は、npm install代わりに使用してみてください。例えば:

$ cd〜 / aligator-methods
$ npm install ../aligator


6
これを解決するためにあなたの努力に感謝します。私はnpm linkすべてのエラーを示しませんでした。私の場合の問題は、プロパティmainが存在しないファイルを指していることでした。私のnpm install場合、あなたが正しいのですが、私は何もインストールする必要はありませんでしたnpm link。そのおかげで私はそれを知りませんでした。
ロック2014

1
同じ問題が発生していますが、解決策が見つかりません...リンクされた各パッケージを個別に要求しようとすると、1つを除いてすべて機能します...機能しないものは、「エラー:モジュールが見つかりません」モジュールと表示されます。 -i-just-linked '"。
マイケル

@Michaelは、失敗したモジュールを「動的に」要求しようとした(つまり、require()に渡された文字列の名前がモジュールに渡された)より深いディレクトリにネストされたモジュールを持っていたようです。したがって、npmを実行する必要がありました。より深いディレクトリにリンクします。
マイケル

4

私の問題は、レポAが使用していてnpm、レポBが使用yarnしていたことでした。そのためyarn link、レポBを経由npm link package-nameしてレポAに取り込むには、レポBで実行する必要がありました。


あなた、サー、私の日を作った!ありがとう
アレック

3

私のために働いたのは:

  1. node_modules依存関係とコンシューマモジュールの両方でを削除します。
  2. 実行 npm unlink --no-save [dependency-module]
  3. npm-linkに従って2リンクコマンドで再リンクします

これで、未公開のモジュールをローカルで完全にテストできるようになりました。

さらに、npm packコマンドがあります。これは、それほど堅牢ではありませんが、未公開のモジュールをテストするのに役立ちます。

npm-pack


2

この問題の私のバージョンを修正します。npm v5.3.0では、node_modules別のプロジェクトにリンクしていたリポジトリから削除しました。

npm v3の後、すべてのnode_modules依存関係を1つのnode_modulesディレクトリ(プロジェクト内の1つ)に配置して、構造を可能な限りフラット化しようとしていることがわかりました(http://codetunnel.io/npm-5-changes-to-npm -link /)。


1

私にとってこれは、ローカルパッケージのバージョン番号を0.1.0から0.0.1に減らしたときに発生しました。そして、このパッケージにリンクしたプロジェクトでは、まだ高いバージョン番号を使用していました。依存関係を更新するとpackage.json修正されました。


0

peerDependencyを使用する場合

私は、二つのパッケージを開発していますstejs、とstejs-loader。としてstejs-loader持っstejsていpeerDependencyます。私が実行npm link stejs-loadernpm link stejsたとき、私のプロジェクトでは、stejs-loader見つけることができなかったエラーが発生していましたstejsnpm link stejsのディレクトリで実行して修正しましたstejs-loader


0

tsconfigmoduleResolutionを確認してください

私のように、たまたまtsconfigmodulees5からesnextなどにmoduleResolution変更した場合は、デフォルトが変更されている可能性があります。

なければmoduleResolution、「ノード」に設定して、typescriptですがnode_modulesパッケージを解決しません。

デフォルト値がの値にどのように依存するかについては、[コンパイラオプション]ページで読むことができます。この値のmoduleデフォルトはに依存しますtargetが、おそらく明示的に「ノード」に設定します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.