NPMの研究ノート

I.はじめに


1何があります

npmフルネームは、すなわちノードノードパッケージマネージャであり、パッケージ管理ツール

しかし、それは後に開発され、唯一のNode.jsのパッケージには適用されません。

だから今見てみると、今自分自身をNPM、名前が少し偏っているnode_modules彼らが言う多目的なパッケージ管理ノードに限定されるものではなく、しかし、名前が変更されていません。

30億回程度NPM週間ダウンロードは、より多く含まれている600000個のパッケージを。

2、歴史

NPM開発は、相補のNode.jsの開発です。

Node.jsのはドイツとアメリカのライアン・ダールで働くプログラマが書いています。彼は、Node.jsのを終えたが、彼ので、パッケージマネージャの欠如を感じたし、ヒット、それをオフのNPM著者は、暖かさ、Node.jsの最終的に構築されたNPMのために一緒に保持します。

3、何が含まれています

  • ウェブサイト
  • レジストリ
  • コマンドラインツール(CLI)

第二に、インストール


1、インストール

Node.jsの直接インストールすることができます。

Node.jsのをインストールすると、自動的にNPMインストールされます。

しかし、NPM更新頻度は、Node.jsのの更新頻度よりも高く、

2.アップデート

npm install npm@latest -g

3、バージョンを確認

npm -v

この書き込みはv6.13.0である場合には

4、のNode.jsとの対応関係のNPMバージョン

利用可能:https://nodejs.org/zh-cn/download/releases/

一行は次の通り:

LTS 日付 V8 海抜
Node.jsの13.1.0 2019年11月5日 7.8.279.17 6.12.1

第三に、パッケージ


1、どのようにパッケージを検索します

  • :直接パッケージ名を検索できQuguanネットワークhttps://www.npmjs.com/を

  • それをグーグル

  • オンライン公共選択リストを探します

  • 他のよく知られたオープンソースのライブラリが使用されているものを参照してください。

2、グローバル・パッケージ

あなたは(たとえば、うなり声CLIなど)、コマンドラインツールとしてパッケージ化したい場合は、選択する必要があります全局安装

(1)インストール

npm install -g <package_name>

(2)更新

更新する必要性を探します:

npm outdated -g

赤はマイナーバージョンアップを表し、あなたは脳なしでアップグレードすることができます。

黄色がメジャーバージョンアップグレードを表し、アップグレードは互換性の問題が発生することがあります。


直接更新:

npm update -g

ただ、むしろ最新の(黄色)よりも、望んでいた(赤)に更新します。アップデートの異なるバージョンを指定したい場合は、代わりにインストールNPM使用してください。

(3)閲覧インストール

npm list

ここでは非常に詳細では、あまりにも深くネストされた、彼らはNPM時代遅れの冗長性を感じた場合、上記の-gビューを使用することができます。

(4)アン

npm uninstall -g <package_name>

3、ローカルパッケージ

プロジェクトは、を介してパッケージに依存し、Node.jsの場合はrequire、負荷、あなたは選択する必要がありますローカルインストールを


コンセプトは含まれます。

  • /package.jsonファイル

  • /package-lock.jsonファイル

  • /node_modulesフォルダ

(1)package.json

npm init:現在のディレクトリ新しいではpackage.jsonファイル

npm init Package.jsonは、インタラクティブな方法を作成することです、

そして、npm init -yまたはnpm init --yesサイレントpackage.jsonを作成することができます(自動的にあなたのプロジェクトの情報を認識)。

基本package.jsonファイルがデモ:

{
  "name": "npm",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}
(2)インストール

npm install lodash = npm install --save lodash

npm install --save-dev lodash

  • --save このパッケージは、lodashとして、生産のために必要とされています。

  • --save-dev このようなモカとして、唯一の開発とテストに必要とされます。

注:デフォルトのインストールパッケージの最新のバージョン


上記のコマンドの後に、次の手順の特定の実装:

図1に示すように、カレントディレクトリはpackage.json、パッケージに記載されたバージョンに加算される(注:バージョンスタンプ^付き)

  • yesの場合--save、その後に追加"dependencies"フィールド

  • yesの場合--save-dev、その後に追加"devDependencies"フィールド

実際には、より多くのシーンカテゴリがあります。

  • peerDependencies
  • optionalDependencies
  • bundledDependencies / bundleDependencies

リトル導入は、書き込まれます。

図2に示すように、カレントディレクトリはpackage-lock.json、パッケージに記載されたバージョンに加算される(注:タグの特定のバージョンで)

3、インストールパッケージは、現在のディレクトリに置かれますnode_modulesフォルダー。


あなたが使用するどのようにインストールした後:

var lodash = require('lodash');

var output = lodash.without([1, 2, 3], 1);
console.log(output);
(3)更新

更新する必要性を探します:

npm outdated


直接更新:

npm update

のみ更新たかったのではなく、最新の。アップデートの異なるバージョンを指定したい場合は、代わりにインストールNPM使用してください。

(4)アン

npm uninstall lodash = npm uninstall --save lodash

npm uninstall --save-dev lodash

上記のコマンドの後に、次の手順の特定の実装:

1、/node_modulesパッケージファイルの削除で

図2は、/package.jsonバージョンが削除パッケージに記載しました

モジュール(モジュール)で4違い、パケット(パッケージ)の

模块:世界でCommonJSは、ほとんどの場合、ファイルがモジュールであり、そして()必要になることができます。

:ほとんどの場合、Node.jsのアプリケーションは(パッケージである彼は、多くのモジュールが含まれていてもよい)、およびpackage.jsonファイルがあります。

:シンプルで、粗であると理解パック>モジュール

注1:ほとんどのパッケージは、()を必要とするために、モジュールとして使用することができますが、(そのようなだけのCLIコマンドを提供するなど)ではない、ごく一部。

注2:なぜ、それは代わりにnode_packagesと呼ばれるnode_modulesと呼ばれているのですか?オブジェクトへのパッケージはnode_modulesが必要となるので、()を使用し、そしてモジュールが必要です()。

第四に、ミラー


上記グローバル/ローカルパッケージのインストールについて説明し、遅すぎる国でインストールした場合、あなたが使用することができます淘宝網NPMミラーhttp://npm.taobao.org/

# 临时
npm install express --registry https://registry.npm.taobao.org
# 永久
npm config set registry https://registry.npm.taobao.org

第五に、リリースパッケージ


書き込まれます。

https://www.npmjs.cn/getting-started/publishing-npm-packages/

.npmignoreファイルは、ファイルをパックしnpmjsに無関係ないくつかの文書のリリースを避けるためにしたくない一覧表示することができます。しかし、一貫性のある使用が.gitignore会うほとんどのシーンで必要とします。また、だけが存在する.gitignore場合は、とnpm publish尊重.gitignore宣言が、.npmignoreおよび.gitignore、同じ時間の存在をnpm publish無視し.gitignore、むしろ組合のいずれかより。

シックス・パックのバージョン


パッケージのバージョンにインストールパッケージを含みます。パッケージのように2つのバージョンがあります。

1、セマンティックバージョン管理

(1)はじめに

まず第一に、semverそれはセマンティックバージョン管理モジュールです。あなたはのバージョン番号を実現することができ、比較、解析し、仕様を

フォームのsemverバージョン番号のフォーマット[X,Y,Z] 或 [major, minor, patch]、など2.0.1、およびプロジェクトが開始すべきです1.0.0

(「semver」)必要もコードより複雑な機能で実現することができます。

(2)規則

(3)書き込み

1 ^:変更の左端の非ゼロ数の[X、Y、Z]を許可しません。

用途:開発者は、パッケージを再インストールするか、このパッケージの展開に依存するたびに^を経由して、すべての新機能とバグ修正を享受することができますのでことを、モジュールの大規模なバージョンをロックすることができます。

注:バージョン番号でpackage.jsonで、その結果、ローカルパッケージをインストールすると、デフォルトでは^追加されます。

^15.6.1:>=15.6.1 && <16.0.0
# 因 semver 版本号格式规定必须从 1.0.0 开始,所以下面的情况只用于理论比较,实际情况并不会发生。
^0.1.2:>=0.1.2 && <0.2.0
^0.0.2:>=0.0.2 && <0.0.3

2 ~:より大きいまたは[X、Y、Z]更新一致に等しいZバージョン番号を

用途:開発者は、〜により、モジュールの小型版をロックすることができますので、あなたは、パッケージを再インストールするか、このパッケージの展開に依存しているすべての時間は、バグ修正のすべてを楽しむことができます。

~1.2.3:>=1.2.3 && <1.3.0
# 因 semver 版本号格式规定必须从 1.0.0 开始,所以下面的情况只用于理论比较,实际情况并不会发生
~0.2.3:>=0.2.3 && <0.3.0
~0.0.3:>=0.0.3 && <0.1.0

3、x/ */空気:いずれかを表します

1.2.x / 1.2.* / 1.2: >=1.2.0 && <1.3.0

4 -:指定された範囲

1.3.0-1.4.2: >=1.3.0 && <=1.4.2

注:これは、開閉左に右に右に近い近い左、および上記のすべてです。

(4)使用

npm install [email protected]

2、物流ラベル

(1)はじめに

分发标签(dist-tags)セマンティックバージョン管理は、上記の補完。

利点:

  • マークがある特別な意味のバージョン

  • もっとセマンティックバージョンコントロールよりも読みやすいです

(2)書き込み

例えば:

  • XYZアルファ:プライベートベータ
  • XYZ-ベータ:ベータ
  • XYZ-STABLE:安定
  • XYZ-最新:最新バージョン
(3)その他

書き込まれるタグ&ラベル配布章を追加します。

(4)使用

npm install somepkg@latest

実際には、デフォルトは次のとおりです。npm install <pkg>=npm install <pkg>@latest

七、インストールプロジェクトの依存関係とロック機構


あなたはgithubの上の新しいプロジェクト、または継続的インテグレーション自身のプロジェクトをプルダウンすると、常にの依存(すなわち、生成node_modules)をインストールするためのファイルpackage.json(またはpackage.json +パッケージ-lock.json)に応じてケースに関連します。

だから、NPMは二つの方法が用意されています。

  • 1、バージョンをロックしていない:プロジェクトはを通じて、package.jsonが含まれていますnpm install依存インストール

    共通package.json ^〜、など、およびバージョンのバージョン番号が再びインストールNPMので、私は、特定のインストールのバージョンはまったく同じ二倍であることを保証することはできませんので、package.json、ベース。

  • 2、ロック解除:プロジェクトはにより、package.jsonとパッケージlock.jsonが含まれていますnpm ciマウント依存性

    ここでは、主に特定のバージョンのパッケージ-lock.jsonは、NPM CIので。これは、ロック解除効果に達しました。

    注1:使用NPMのCIので、パッケージ-lock.jsonのgitリポジトリに参加することを忘れないでください。

    注2:package.jsonとパッケージlock.jsonのバージョンの競合した場合、それはエラーになります。

    注3:自動的にインストールする前に、そのNPM CIは自然に矛盾が生じないよう、既存のnode_modulesをクリアしますNPM ciは、増分インストールの問題をもたらす可能性があります

これらの2つの方法に関しては優れている、実際には、外観を知りたい、インターネットの多くを主張します:

なぜ私は、シュリンクラップ(ロック)を使用していません

バグ[email protected]ビューを通じて、NPMデフォルトのロック機構が重要なのでしょうか?


サポートは、バージョンをロックしません。

  • だから、プロジェクトが良性環境、残っていることを前方に移動FIX新機能やバグ、前提がある信頼性の高いオープンソースのモジュールを選択してください

  • あなたはモジュールのインストール済みのバージョンの数を制限することができますが、モジュールの依存モジュールのバージョン番号をインストールするように制限することはできません

ロックバージョンをサポートしています:

  • チーム全体が依存、統合開発環境のまったく同じバージョンを使用していることを確認してください。

  • 各展開は、セキュリティを確保するために、依存関係のまったく同じバージョンを使用することであることを確認してください。(NPM CI名から、このコマンドはのためにある表示することができます継続的な統合準備)

私のポイントはある、またはするために特定のシーンを見てください生産環境、安全第一、またはロック解除のプロジェクトは、より快適にしばらくたとえば、オープンソースとしてリリースされたパッケージは、それが、ロックではないバージョンをお勧めします(あなたが/いくつかのパッケージを更新したい場合は、ライン上で再びテスト回帰を行うようにしてください)。

八、競合分析 - 糸


yarn Facebookが出ています。

初期の糸が多くの新しい便利な機能より速いインストールスピードがありますが、上に描画するために連続してアップグレードの新バージョンでは、後にNPM。

6それが機能しているか、私はまだNPMを使用してパフォーマンスのNPMは、非常に近い糸になっている今か。

ここで原糸の目を引く機能です。

1、ネスティング

node_modulesの質問の前にNPMは次のとおりです。

  • ディレクトリのネストレベルが深すぎ
  • モジュールのインスタンスを共有することはできません
  • インストールは非常に遅いです

簡単に言えば、モジュールは独立しており、例えば、位置のexpress下にpath-to-regexp及び配置されているconnectの下path-to-regexpのバージョンが同じであるが、モジュールが、さらに別のパッケージと見なされ、インストールが二回繰り返され、そして別の場所に配置されています。

その後、それはこの問題を解決するために、ソフトリンクプログラムの導入は、サードパーティのライブラリがたくさんあるでした。

以降、npm3ソフトリンクは、プログラムを使用していないが、の使用フラット方式は、すなわち、すべてのモジュールが直接実装されているnode_modules次。初めてパッケージをnode_modulesで依存関係の深いレベルに入れられますバック(一貫性のないバージョン)を繰り返し含めて、トップレベルに引き上げられます。

これらの糸はすでに達成しました。

2、ロック

糸は、デフォルトのロック機能(すなわちロックバージョンは上記)を提供します。

そして、NPM 5を導入しpackage-lock.json、糸に相当yarn.lock

実際には、早期のNPMは、ロック機能を提供しますshrinkwrapしかし、彼は作成するために、NPMシュリンクラップのユーザーを実行する必要があるnpm-shrinkwrap.jsonファイルを手动锁定版本

3、オフラインインストール

npm6出現は、さらに、インストールの速度を向上するためにキャッシュに参加しました。

  • npm install --offline
    • キャッシュラインをフルに活用
  • npm install --online
    • データラインをフルに活用
  • npm install --prefer-offline
    • 優先利用オフラインキャッシュ(NPMのインストールの速度を改善するためにこれを使用することをお勧めします)
  • npm install --prefer-online [デフォルト]
    • オンラインデータが優先して使用します

4、対話更新

インタラクティブな更新機能があり、糸。

また、サードパーティ製のツールをインストールすることができNPMはnpm-check、それはコマンドラインでグラフィカルなインターフェイスを提供し、手動でアップグレードするにはどのモジュールを選択することができます。

5、NPX

npm5アウトnpxの代わりに、yarn runこのコマンドを実行します。


原理:

1、それぞれの現在のディレクトリnode_modules/.binと環境変数$PATH

2、コマンドがある場合は、[実行

3.コマンドは、一時ディレクトリにインストール、削除後の実行を存在しない場合


使用します。

1、簡単に呼び出しローカルパッケージ

プロジェクトはsequelizeパッケージをインストールする前に、たとえば、彼は移行コマンドを実行しようとするたびに長い文字列を入力する必要があります。

# old
./node_modules/sequelize-cli/lib/sequelize db:migrate
# new
npx sequelize db:migrate

2、ちょうどパッケージの一時的な使用の下で、それをインストールしたくない(グローバルとローカルをインストールする必要はありません)

提案:毎日の使用のための世界的なツールのベストを使用するインストール

プロジェクトはWebPACKのパッケージを使用したが、前に例えば、今の変化の影響下で、一時的なロールアップパッケージを試してみたいです。

9.その他のコマンド


1、npm audit

維持期のいくつかの項目は、新しい機能を追加する予定がない、とさえあまり深刻なバグ修正が進んでいないのかもしれないが、このようなセキュリティホール等やチューブに深刻な問題。そして、あなたがNPM監査を使用することができ、記載されているプロジェクトの依存関係が持つセキュリティの脆弱性のバージョンを。

しかし、NPMは、ときに、新しいの導入に加え、定期的に時代遅れ実行NPMにNPM監査依存手動で実行NPM監査する機会があまりないので、実行して自動的にインストールされているため。

2、npm repoあなたは(ほとんどの場合、GitHubの)ソースコードリポジトリのプロジェクトを開くことができます

3、npm homeあなたはプロジェクトのホームページ(公式サイト)を開くことができます

4、npm xmasコマンドラインプリントメリークリスマスツリー(純粋な退屈)

テン、書き込まれます


スコープパッケージ(スコープパッケージ)

二因子認証

セキュリティトークン

プライベート源(例えばcnpm、上述した例、たとえミラー淘宝)

XIの物語


1、2016年には、NPMの開発者は、不満を抱い非公開自分自身のリリース前に、すべてのモジュールを。広く使われているを含むleft-padビルドの失敗にバベル、ReactNative、ツールのエンバー多数で、その結果、。

2、2019年には、GitHubには、新しいリリースのパッケージ管理サービスと呼ばれる、GitHub Package Registry完全に無料に。そしてそれはまた、NPMと互換性があります。

おすすめ

転載: www.cnblogs.com/xjnotxj/p/11823148.html