npm makes it easy for JavaScript developers to share and reuse code, and it makes it easy to update the code that you're sharing.javascript
簡單來講,npm就是javascript的包管理工具,相似java語法當中的maven, gradle, python的pip。vue
npm是和Node.js一塊兒發佈的,只要安裝了Node.js,npm也安裝好了,能夠從Node.js的下載頁下載對應操做系統的安裝包安裝便可。 安裝好後,執行以下命令,檢查是否安裝成功。java
$ node -v v6.10.0 $ npm -v 4.4.1
可是因爲npm自身的更新頻率比Node.js高不少,因此經過上面的命令安裝的npm可能不是最新版本,能夠經過下面的命令單獨更新npmnode
$ npm install npm@latest -g
執行命令python
$ npm install <package_name>
即可以安裝對應的包到執行命令的當前目錄,並建立一個node_modules
的文件夾,而後把須要安裝的安裝包下載到裏面。webpack
package.json
經過上面的命令,直接安裝的包默認都是最新版本的。可是在項目中,咱們怎麼讓一塊兒開發的同事知道項目中用了哪些包,具體包的版本信息呢?這時package.json
就上場了,能夠把它想成是java語言中的pom.xml
,
python語言中的requirements.txt
。git
一個基本的package.json
文件至少須要包含兩個重要信息: 包名name
和版本信息version
。
例如:github
{ "name": "my-awesome-package", "version": "1.0.0" }
package.json
咱們可使用命令npm init
來初始化一個package.json
文件,運行這個命令後,它會詢問一些關於包的基本信息,根據實際狀況回答便可。若是不喜歡這種方式,可使用npm init --yes
命令直接使用默認的配置來建立package.json
文件,最後根據須要修改建立好的package.json
文件便可。web
package.json
文件建立好後,咱們來看看它長得什麼樣子吧!vue-cli
{ "name": "my_package", "description": "", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { "type": "git", "url": "https://github.com/ashleygwilliams/my_package.git" }, "keywords": [], "author": "", "license": "ISC", "bugs": { "url": "https://github.com/ashleygwilliams/my_package/issues" }, "homepage": "https://github.com/ashleygwilliams/my_package" }
主要字段的含義以下:
name: 模塊名, 模塊的名稱有以下要求:
version: 模塊版本信息
READMD.md
或README
文件讀取第一行內容做爲它的默認值。index.js
。相似git同樣,npm也能夠作一些簡單的配置來設置一些咱們經常使用的信息
$ npm set init.author.email "wombat@npmjs.com" $ npm set init.author.name "ag_dubs" $ npm set init.license "MIT"
這樣下次執行npm init
的時候,就會用上咱們配置的一些默認信息啦!
使用npm install
會讀取package.json
文件來安裝模塊。安裝的模塊分爲兩類dependencies
和devDependencies
,分別對應生產環境須要的安裝包和開發環境須要的安裝包。
一樣在安裝模塊的時候,能夠經過指定參數來修改package.json
文件,如
$ npm install <package_name> --save $ npm install <package_name> --save-dev
來將新安裝的模塊信息記錄到package.json
文件。
$ npm update
$ npm uninstall <package_name>
若是要在卸載模塊的同時,也將他從package.json文件中移除,能夠添加跟安裝時候同樣的參數,例如:
$ npm uninstall --save lodash
默認狀況下。咱們執行默認的安裝命令安裝的包都是安裝到當前目錄下的,只能在當前目錄下使用。可是假如咱們須要使用一些全局的軟件,如grunt
,咱們能夠在安裝的時候,添加-g
選項來安裝,方便後面在任何目錄下均可以使用grunt
相關的命令
$ npm install -g grunt
同理,更新全局的安裝包只須要執行命令
$ npm update -g
爲了查看當前哪些包須要更新,可使用以下命令來查看
$ npm outdated -g --depth=0 Package Current Wanted Latest Location vue-cli 2.7.0 2.8.1 2.8.1 webpack 1.13.2 2.2.1 2.2.1 webpack-dev-server 1.14.1 2.4.1 2.4.1
卸載全局安裝的包也只須要加上-g
選項便可。如
$ npm uninstall -g jshint
一個Node.js模塊就是一個能夠發佈到npm,供其餘開發者下載和使用的模塊。那麼,到底怎樣和其餘開發者分享咱們的模塊呢?
首先,咱們必須建立一個package.json
文件,添加上關於咱們想要分享的模塊信息,如:模塊功能,開發者信息等。
一旦package.json
文件建立好後,咱們須要建立一個模塊被引入時,就加載的文件。
即package.json
中main
字段指定的文件,默認爲index.js
。咱們須要在文件中將一個函數賦值給exports
模塊,方便其餘開發者調用咱們的模塊。如
exports.printMsg = function() { console.log("This is a message from the demo package"); }
在使用npm的時候,有兩個概念容易搞混,那就是包(Pacakges)和模塊(Modules)。簡單來講,包和模塊的區別以下:
package.json
文件描述了的文件或者目錄什麼是包?
a) a folder containing a program described by a package.json file
b) a gzipped tarball containing (a)
c) a url that resolves to (b)
d) a <name>@<version> that is published on the registry with (c)
e) a <name>@<tag> that points to (d)
f) a <name> that has a latest tag satisfying (e)
g) a git url that, when cloned, results in (a).
什麼是模塊?
- A folder with a package.json file containing a main field.
- A folder with an index.js file in it.
- A JavaScript file.
在使用npm時,咱們能夠根據我的的須要,指定不少配置信息。
npm的配置信息加載優先級以下(從高到低)
npmrc
文件
查看配置
$ npm config list -l
最後介紹一個比較重要的配置,當咱們使用默認配置從npm官網下載模塊時,因爲網絡的因素,會致使咱們的下載速度特別慢。因此,咱們能夠配置一些國內的鏡像來加快咱們的下載速度。在這裏,我推薦使用淘寶的npm鏡像, 具體使用方式以下:
臨時使用, 安裝包的時候經過--registry
參數便可
$ npm install express --registry https://registry.npm.taobao.org
全局使用
$ npm config set registry https://registry.npm.taobao.org // 配置後可經過下面方式來驗證是否成功 npm config get registry // 或 npm info express
使用cnpm使用
// 安裝cnpm npm install -g cnpm --registry=https://registry.npm.taobao.org // 使用cnpm安裝包 cnpm install express
請參考官方文檔