npm、cnpmとnvm

12034 ワード

NodeJSを使って開発をする時、初めてnpm、cnpmとnvmのいくつかの概念に接触しなければなりません.簡単にやられる方向転換ができます.ここでこれらの概念を区別します.
npm
依存管理
それぞれのプログラミング言語は自分の生態を持っています.この生態はこの言語と一緒に存在する開発者コミュニティと多くの開発者が共有するオープンソースライブラリです.しかし、ライブラリはますます多くなります.ライブラリとライブラリの間に依存が生まれ、同じライブラリは複数のバージョンが存在します.現在は任意のプロジェクトは多くのライブラリを参照してください.これらのライブラリを管理し、それらの依存関係を解決するのに時間がかかると考えています.これに基づいて、多くのプログラミング言語はオープンソースライブラリ管理ツールを確立しています.必要なライブラリとそれらの依存ライブラリを自動的にダウンロードしてくれます.例えば、iOS生態のcocoa、Java生態のmavenとgradleなどです.
npm
もちろん、NodeJSに対しては、オープンソースライブラリがmoduleであり、対応するライブラリ管理ツールをパケット管理ツール(package management)といい、略してnpmといい、対応する公式サイトはhttps://www.npmjs.com/. 注意:このサイトとNodeJSの公式サイトhttps://nodejs.org/en/同じウェブサイトではありません.
npm取付け
npm公式サイトGet npmには以下の説明があります.

npm is distributed with Node.js- which means that when you download Node.js, you automatically get npm installed on your computer.

Download Node.js and npm

つまり、node公式サイトからファイルをインストールする時、NodeJSをインストールする以外に、自動的に対応バージョンのnpmをインストールします.
cnpm
ご存知のように、中国の海外サイトへのアクセスはとても遅いです.npmからmoduleをダウンロードするのは遅いです.だから、宝を洗ってnpmに鏡像駅を開発して、鏡像駅の関連操作をcnpmにカプセル化しました.例えば、以前は$ npm install xxxを使っていました.今は$ cnpm install xxxに両替すればいいです.cnpm公式サイトによると.http://npm.taobao.org/cnpmサポートnpmは、publish以外のすべてのコマンドをサポートします.
nvm
nvm概要
macプラットフォームでは、node.jsとnpmのバージョンを管理するためのツールを使用して、指定されたバージョンのnodeをダウンロードできます.nvmを使用して、同じコンピュータ上に複数のバージョンのnodeをインストールできます.そして、バージョンを簡単に切り替えることができます.windowsプラットフォームはnvm-windowsを使用できます.デフォルトの各nodeバージョンのmoduleは相互分離されます.
nvmインストール
nvmの公式説明によると、nvmをインストールまたは更新するには同じコマンドを使用します.$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bashnvmアップグレード
本機にインストールされているnvmバージョンを確認します.$ nvm --versionターミナル出力0.31.0nvmのインストールとアップグレードは同じコマンドですので、下のコマンドを使ってnvmをアップグレードします.$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bashターミナル出力

 % Total % Received % Xferd Average Speed  Time Time  Time Current

 Dload Upload  Total  Spent Left Speed

100 12540 100 12540 0  0 17411 0 --:--:-- --:--:-- --:--:-- 17416

=> nvm is already installed in /Users/chenxin/.nvm, trying to update using git

=> => Compressing and cleaning up git repository

=> nvm source string already in /Users/chenxin/.bash_profile

=> Appending bash_completion source string to /Users/chenxin/.bash_profile

=> You currently have modules installed globally with `npm`. These will no

=> longer be linked to the active version of Node when you install a new node

=> with `nvm`; and they may (depending on how you construct your `$PATH`)

=> override the binaries of modules installed with `nvm`:

/Users/chenxin/.nvm/versions/node/v5.11.0/lib

├── [email protected]

=> If you wish to uninstall them at a later point (or re-install them under your

=> `nvm` Nodes), you can remove them from the system Node as follows:

 $ nvm use system

 $ npm uninstall -g a_module

=> Close and reopen your terminal to start using nvm or run the following to use it now:

export NVM_DIR="$HOME/.nvm"

[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion

新しいコードをインストールします
次の2つの等価コマンドの一つを使用して、本機に取り付けられているnodeを確認してください.$ nvm lsまたは$ nvm listターミナル出力

 v0.8.14

-> v5.11.0

default -> 5.11.0 (-> v5.11.0)

node -> stable (-> v5.11.0) (default)

stable -> 5.11 (-> v5.11.0) (default)

iojs -> N/A (default)

以下のコマンドを使ってリモートでインストールできるnodeを確認します.$ nvm ls-remoteターミナル出力

 v0.1.14

 v0.1.15

 ......

 v0.12.17

 v0.12.18

 iojs-v1.0.0

 iojs-v1.0.1

 ......

 iojs-v3.3.0

 iojs-v3.3.1

 v4.0.0

 v4.1.0

......

 v9.4.0

 v9.5.0

オプションバージョンが長すぎて、ここで使うと、ほとんど省略されています.
6.xの最新バージョンをインストールします.$ nvm install 6nvm install 6を使って、6.x.の最新バージョンをインストールします.nvm install 6.1を使って、6.1.xの最新バージョンをインストールします.もっと多い説明の使い方はHow to install NodeJS and NPM using NVM and Zsh-NVMを参照してください.ターミナル出力

Downloading https://nodejs.org/dist/v6.13.0/node-v6.13.0-darwin-x64.tar.gz...

######################################################################## 100.0%

Now using node v6.13.0 (npm v3.10.10)

自動的にnpmがインストールされているのが見えます.
nodeバージョンを表示:$ node -vターミナル出力v6.13.0npmバージョンを表示:$ npm -vターミナル出力3.10.10nodeとnpmがインストールされたばかりのバージョンに切り替わりました.
新しいnodeをインストールするデフォルトは前のnodeのmoduleをインストールしません.もし前のバージョンのnodeにインストールされたmoduleが必要なら、もう一度インストールする必要があります.--reinstall-packages-fromのパラメータを使って、nvm install 6.13.0 --reinstall-packages-from=5.11.0は前の5.10にインストールされたmoduleを全部6.13.0にインストールします.
インストール前のnodeバージョンのmodule
新しいnodeをインストールする時に--reinstall-packages-fromパラメータを使っていないなら、インストール後にnvm reinstall-packages 5.11.0を使って5.11.0のmoduleを6.13.0にインストールしてもいいです.
nodeバージョンを切り替え
切り替え前のバージョン:$ nvm use 5.11.0ターミナル出力Now using node v5.11.0 (npm v3.8.6)nodeバージョンを再確認:$ node -vターミナル出力v5.11.0npmバージョンを再確認します.$ npm -vターミナル出力3.8.6nodeはv 6.13.0からv 5.11.0に切り替えられました.対応するnpmは3.10.10から3.8.6に切り替わりました.ここでnpmでグローバルにmodulesをインストールすると、新しいnodeフォルダにインストールされます./Users/chenxin/.nvm/versions/node/v6.13.0/lib/node_modulesにインストールされています.このときにインストールされます./Users/chenxin/.nvm/versions/node/v5.11.0/lib/node_modules
alias値を変更
実行$ nvm lsターミナル出力

 v0.8.14

-> v5.11.0

 v6.13.0

default -> 5.11.0 (-> v5.11.0)

node -> stable (-> v6.13.0) (default)

stable -> 6.13 (-> v6.13.0) (default)

iojs -> N/A (default)

default、node、stable、iojsの4つの別名が見られます.defaultはバージョン番号5.11.0の別名です.現在は6.13.0の値を変更します.行頭にあるdefaultと括弧の中にあるdefaultは同じものではありません.括弧のdefaultは現在のバージョン番号を指します.
次のコマンドでalias値を更新します.$ nvm alias default 6.13.0ターミナル出力default -> 6.13.0 (-> v6.13.0)aliasを使ってnodeバージョンを切り替えます.$ nvm use defaultターミナル出力Now using node v6.13.0 (npm v3.10.10)aliasを削除
削除aliasコマンドを実行します.$ nvm unalias defaultターミナル出力
`Deleted alias default-restore it with nvm alias default 6.13.0
`
ヒントはnvm alias default 6.13.0を使ってこのaliasを回復できます.実際には新しいaliasです.
削除するかどうかを確認:$ nvm lsターミナル出力

 v0.8.14

 v5.11.0

-> v6.13.0

node -> stable (-> v6.13.0) (default)

stable -> 6.13 (-> v6.13.0) (default)

iojs -> N/A (default)

削除されました.
同前
今日はnodeを更新しました.hexo gを使ってブログを作成してからずっとエラーを報告しています.

Error: Module version mismatch. Expected 48, got 47.

 at Error (native)

 at Object.Module._extensions..node (module.js:604:18)

 at Module.load (module.js:494:32)

 at tryModuleLoad (module.js:453:12)

 at Function.Module._load (module.js:445:3)

 at Module.require (module.js:504:17)

 at require (internal/module.js:20:19)

 at Object. (/Users/chenxin/Workspaces/github/blog/node_modules/dtrace-provider/dtrace-provider.js:17:23)

 at Module._compile (module.js:577:32)

 at Object.Module._extensions..js (module.js:586:10)

 at Module.load (module.js:494:32)

 at tryModuleLoad (module.js:453:12)

 at Function.Module._load (module.js:445:3)

 at Module.require (module.js:504:17)

 at require (internal/module.js:20:19)

 at Object. (/Users/chenxin/Workspaces/github/blog/node_modules/bunyan/lib/bunyan.js:79:18)

 at Module._compile (module.js:577:32)

 at Object.Module._extensions..js (module.js:586:10)

 at Module.load (module.js:494:32)

 at tryModuleLoad (module.js:453:12)

 at Function.Module._load (module.js:445:3)

 at Module.require (module.js:504:17)

 at require (internal/module.js:20:19)

 at Object. (/Users/chenxin/Workspaces/github/blog/node_modules/hexo-log/lib/log.js:3:14)

 at Module._compile (module.js:577:32)

 at Object.Module._extensions..js (module.js:586:10)

 at Module.load (module.js:494:32)

 at tryModuleLoad (module.js:453:12)

{ Error: Cannot find module './build/default/DTraceProviderBindings'

 at Function.Module._resolveFilename (module.js:476:15)

 at Function.Module._load (module.js:424:25)

 at Module.require (module.js:504:17)

 at require (internal/module.js:20:19)

 at Object. (/Users/chenxin/Workspaces/github/blog/node_modules/dtrace-provider/dtrace-provider.js:17:23)

 at Module._compile (module.js:577:32)

 at Object.Module._extensions..js (module.js:586:10)

 at Module.load (module.js:494:32)

 at tryModuleLoad (module.js:453:12)

 at Function.Module._load (module.js:445:3)

 at Module.require (module.js:504:17)

 at require (internal/module.js:20:19)

 at Object. (/Users/chenxin/Workspaces/github/blog/node_modules/bunyan/lib/bunyan.js:79:18)

 at Module._compile (module.js:577:32)

 at Object.Module._extensions..js (module.js:586:10)

 at Module.load (module.js:494:32)

 at tryModuleLoad (module.js:453:12)

 at Function.Module._load (module.js:445:3)

 at Module.require (module.js:504:17)

 at require (internal/module.js:20:19)

 at Object. (/Users/chenxin/Workspaces/github/blog/node_modules/hexo-log/lib/log.js:3:14)

 at Module._compile (module.js:577:32)

 at Object.Module._extensions..js (module.js:586:10)

 at Module.load (module.js:494:32)

 at tryModuleLoad (module.js:453:12)

 at Function.Module._load (module.js:445:3)

 at Module.require (module.js:504:17)

 at require (internal/module.js:20:19) code: 'MODULE_NOT_FOUND' }

{ Error: Cannot find module './build/Debug/DTraceProviderBindings'

 at Function.Module._resolveFilename (module.js:476:15)

 at Function.Module._load (module.js:424:25)

 at Module.require (module.js:504:17)

 at require (internal/module.js:20:19)

 at Object. (/Users/chenxin/Workspaces/github/blog/node_modules/dtrace-provider/dtrace-provider.js:17:23)

 at Module._compile (module.js:577:32)

 at Object.Module._extensions..js (module.js:586:10)

 at Module.load (module.js:494:32)

 at tryModuleLoad (module.js:453:12)

 at Function.Module._load (module.js:445:3)

 at Module.require (module.js:504:17)

 at require (internal/module.js:20:19)

 at Object. (/Users/chenxin/Workspaces/github/blog/node_modules/bunyan/lib/bunyan.js:79:18)

 at Module._compile (module.js:577:32)

 at Object.Module._extensions..js (module.js:586:10)

 at Module.load (module.js:494:32)

 at tryModuleLoad (module.js:453:12)

 at Function.Module._load (module.js:445:3)

 at Module.require (module.js:504:17)

 at require (internal/module.js:20:19)

 at Object. (/Users/chenxin/Workspaces/github/blog/node_modules/hexo-log/lib/log.js:3:14)

 at Module._compile (module.js:577:32)

 at Object.Module._extensions..js (module.js:586:10)

 at Module.load (module.js:494:32)

 at tryModuleLoad (module.js:453:12)

 at Function.Module._load (module.js:445:3)

 at Module.require (module.js:504:17)

 at require (internal/module.js:20:19) code: 'MODULE_NOT_FOUND' }

INFO Start processing

INFO Files loaded in 1.09 s

INFO Generated: sitemap.xml

......

stackoverのModule version mismatch.Expected 11,got 1を見て、hexoブログのあるルートディレクトリ/Users/chenxin/Workspaces/github/blogに入力してコマンド$ npm updateを実行してからエラー警告が消えました.このコマンドは-gパラメータを追加していません./Users/chenxin/Workspaces/github/blog/node_modulesというローカルnode moduleを更新するだけで、/Users/chenxin/.nvm/versions/node/v6.13.0/lib/node_modulesという大域のnode moduleを更新しません.npmのグローバルインストールとローカルインストールはNPM expressモジュールを参照してローカルインストールとグローバルインストールの詳細を参照することができます.hexoブログはMacbookを参照してHexoブログ教程をインストールすることができます.
参照
  • MacにNodeとNPM
  • をインストールします.
  • How to Install npm&Manage npm Versions
  • は、nvmを使用して異なるバージョンのnodeとnpm
  • を管理する.
  • npmモジュール取付機構概略