私は次のことを試みました( 公式サイト からの指示に従って):
mkdir hapi && cd hapi
npm init
npm install hapi --save
しかし、これは私にこのようなエラーを与えます:
npm WARN install hapiをそれ自体の依存関係としてインストールすることを拒否
ここで、hapiTest
という新しいテストフォルダーを作成し、コマンドを繰り返したところ、すべて正常に機能しました。
フォルダーgulp
とnpm install gulp --save
を使用して同じプロセスを試しましたが、同じエラーが発生したため、フォルダーの名前をパッケージと同じにすることはできませんインストールしたいが、誰かがこの声明をいくつかの公式文書でバックアップできますか?
コマンドnpm init
を実行したとき、おそらく答える必要のある関連する質問がいくつかありました。具体的には、モジュールの名前。 npm init
を使用すると、作成しているモジュールの名前を、その中にあるフォルダーの名前と呼ぶことになります。
したがって、依存関係のインストールを停止しているのは、folderの名前ではなく、作成するnpm moduleの名前。
結果のpackage.json
をhapi
ディレクトリ内で開き、モジュールの名前をhapi
以外に変更します。以下は、hapiというフォルダーにある場合でも機能する「package.json」の例です。
{
"name": "hapi-test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"hapi": "^7.5.2"
}
}
メモを追加
これまでのところ、npmのコンテキストでこの現象を説明するドキュメントを見つけることができませんでした。しかし、それは簡単なことではありません。同じアプリケーション内で同じ名前のモジュールを要求することは、 CommonJS 哲学と矛盾します。
モジュールの名前は、インストールしようとしているモジュールと同じです。 NPMは、モジュールを自分自身にインストールしていると考えています。モジュールの名前を変更すると、完全にインストールされます。
理由モジュール名はライブラリ名と同じです
ソリューション
これは私の最初のコードでした
{
"name": "react",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"react": "^15.6.1"
}
}
エラーを投げました
npm WARN package.json [email protected] No description
npm WARN package.json [email protected] No repository field.
npm WARN package.json [email protected] No README data
npm WARN install Refusing to install react as a dependency of itself
次に、reactからreact_appに名前を変更し、私のコードは次のようになります
{
"name": "react_app",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"react": "^15.6.1"
}
}
それは働いた
この問題は次のように簡単に説明できますpackage.json
のパッケージまたはモジュールの名前は、インストールしようとしているパッケージまたはモジュールの名前と同じにすることはできません。
ここで、hapi
はモジュールの名前であり、npm install hapi --save
でhapi
という名前のモジュールをインストールしようとしています。