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には以下の説明があります.
cnpm
ご存知のように、中国の海外サイトへのアクセスはとても遅いです.npmからmoduleをダウンロードするのは遅いです.だから、宝を洗ってnpmに鏡像駅を開発して、鏡像駅の関連操作をcnpmにカプセル化しました.例えば、以前は
nvm
nvm概要
macプラットフォームでは、node.jsとnpmのバージョンを管理するためのツールを使用して、指定されたバージョンのnodeをダウンロードできます.nvmを使用して、同じコンピュータ上に複数のバージョンのnodeをインストールできます.そして、バージョンを簡単に切り替えることができます.windowsプラットフォームはnvm-windowsを使用できます.デフォルトの各nodeバージョンのmoduleは相互分離されます.
nvmインストール
nvmの公式説明によると、nvmをインストールまたは更新するには同じコマンドを使用します.
本機にインストールされているnvmバージョンを確認します.
次の2つの等価コマンドの一つを使用して、本機に取り付けられているnodeを確認してください.
6.xの最新バージョンをインストールします.
nodeバージョンを表示:
新しいnodeをインストールするデフォルトは前のnodeのmoduleをインストールしません.もし前のバージョンのnodeにインストールされたmoduleが必要なら、もう一度インストールする必要があります.
インストール前のnodeバージョンのmodule
新しいnodeをインストールする時に
nodeバージョンを切り替え
切り替え前のバージョン:
alias値を変更
実行
次のコマンドでalias値を更新します.
削除aliasコマンドを実行します.
`Deleted alias default-restore it with nvm alias default 6.13.0
`
ヒントは
削除するかどうかを確認:
同前
今日はnodeを更新しました.
参照 MacにNodeとNPM をインストールします. How to Install npm&Manage npm Versions は、nvmを使用して異なるバージョンのnodeとnpm を管理する. npmモジュール取付機構概略
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 | bash
nvmアップグレード本機にインストールされているnvmバージョンを確認します.
$ nvm --version
ターミナル出力0.31.0
nvmのインストールとアップグレードは同じコマンドですので、下のコマンドを使って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 6
nvm 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.0
npmバージョンを表示:$ npm -v
ターミナル出力3.10.10
nodeと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.0
npmバージョンを再確認します.$ npm -v
ターミナル出力3.8.6
nodeは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ブログ教程をインストールすることができます.参照