2016-03-26 13 views
3

私はpackage.jsonファイル内の依存関係は、彼らがNPM-NPM package.jsonファイルの主な用途は何ですか?

を通して、あなたのプロジェクトをインストール最後に、依存関係のフィールドは、すべての依存関係をあなたの をリストするために使用されている場合、人々が依存関係をインストールできるようにすることhereから読み取りますプロジェクトはnpmで利用可能です。誰かが プロジェクトをnpmでインストールすると、リストされたすべての依存関係は としてインストールされます。さらに、プロジェクトのルートディレクトリ に誰かがnpmをインストールすると、すべての依存関係が ./node_modulesにインストールされます。

誰かがあなたのプロジェクトのルートディレクトリにnpm installを実行していない場合はどこにインストールされますか?

また、Githubを通じてこのプロジェクトを複製することを選択した場合はどうなりますか?それはとにかく行く準備ができていますよね?その時点で、ユーザーはプロジェクトに関するメタデータを提供するだけでなく、package.jsonファイルの目的は何ですか?

答えて

5

誰かがあなたのプロジェクトのルートディレクトリにnpm installを実行していない場合、どこにすべての依存関係がインストールされますか?

あなたは、NPMは、それがpackage.jsonを見つけるまで親ディレクトリを通って上方検索し、node_modulesフォルダ内の依存関係をインストールします「あなたが別のディレクトリでコマンドを実行すると、どこがインストールされます」を意味していることにより、場合そのファイルの横に表示されます。 I.彼らは常にプロジェクトのルートに終わるでしょう。

さらに、このプロジェクトをGithubで複製することを選択した場合はどうなりますか?それはとにかく行く準備ができていますよね?その時点で、ユーザーはプロジェクトに関するメタデータを提供するだけでなく、package.jsonファイルの目的は何ですか?

これは該当しません。ノードプロジェクトは常に.gitignoreというファイルを持っており、node_modulesがバージョン管理にコミットされることを明示的に排除しており、ソースをダウンロードした後にnpm installを実行することを期待しています。

あなたのGitHubリポジトリにあなたの依存関係を持っていることは非常にいくつかの理由があります - 限り、プロジェクトがSemantic Versioningに準拠して(パッケージの大半がそう)、npm installは互換性のないバージョンをダウンロードすることが原因とすることはありません、あなたは絶対に必要がある場合依存関係のバージョンをロックダウンするには、npm shrinkwrapを使用してください。

EDIT:Mattのコメントは非常に親切に指摘したように、シンプルなメタデータを越えて行くNPMのいくつかの機能があります - 私はおそらくほとんどが使用してのScriptsで取得1、あなたがのために、プロジェクト固有のエイリアスを作成することができますコマンドライン操作。

Webpack開発サーバーは、devDependenciesのプロジェクトにローカルにインストールされています(パッケージをインストールするときに--save-devオプションを使用して実行できます)。手動で行うと、次の行に何か入力する必要があります。

"./node_modules/.bin/webpack-dev-server" --inline --hot 

これはかなり率直に言えば、少し痛みを感じます。代わりに、私は(あなたがいることを毎回入力する必要はありませんので、NPMのスクリプトを使用した場合node_modules/.binは、自動的にシステムパスに追加されることに注意してください)私のpackage.jsonにこれを追加することができます。

"scripts": { 
    "dev": "webpack-dev-server --inline --hot" 
} 

そして、その後、私は実行する必要があり、すべてがある: - 例えば、prepublishがにパッケージを公開する前に実行されるこの単純なユースケースを越えて

npm run dev 

、自動的に特定のイベント時に呼ばれているいくつかの特別な 'スクリプト名もありますレジストリ。

+1

私は[scripts](https://docs.npmjs.com/misc/scripts)を追加し、[config](https://docs.npmjs.com/misc/config)はパッケージの2つの用途です。 jsonは単純なメタデータを超えています。 – Matt

+0

良い点!私は私の答えを編集して少し詳しく説明します。 –

+0

@JoeClayので、package.jsonファイルはnode_modulesフォルダ内のパッケージを使用するために必要ではありませんか?これらのパッケージをインストールした後、npm ___を使ってそれらを使用することができます。 package.jsonは、スクリプト、設定、メタデータのためのもので、もっと重要なのは、git.ignoreファイルのためにこれらのモジュールがアップロードされないため、プロジェクトに必要なすべてのパッケージをインストールすることです – akantoword

関連する問題