一、前言
NPM作為Node的模塊管理和發布工具,作用與Ruby的gem、Python的pypl或setuptools、PHP的pear和.Net的Nuget一樣。在當前前端工程化極速狂奔的年代,即使不做nodejs的開發,也需要學習和使用NPM的,誰叫grunt、bower、yeoman這一堆的工具都通過NPM發布呢?!
本文為針對非nodejs的開發者整理的NPM使用說明。當然最好的教程還是官網的啦!
二、什么是包?
nodejs以包的形式組織程序模塊,而包的定義卻十分簡單——包含文件內容符合規范package.json文件的目錄或歸檔文件。并通過<package-name>@<version>來唯一標識每個包。
三、靈魂——package.json
包的定義和NPM都圍繞著package.json文件做文章,package.json文件其實就相當于JAVA中的MANIFEST.MF文件,用于存放模塊的名稱、版本、作者、機構、模塊入口、依賴項等信息。首先我們通過 npm init 命令在當前工作目錄下以用戶引導的方式創建一個全新的package.json文件。然后通過 npm help json 命令打開幫助文檔,并根據實際的項目需求自行初始化package.json的項目即可。下面將對基礎配置項進行敘述。
name,必選項,表示模塊名稱。命名時不能包含js、node、和url中需要轉義的字符,不能以.和_為開頭。
version,必選項,表示模塊的版本號。版本號以 主版本號(Major).副版本號(Minor).補丁版本號(Patch) 構成(如1.2.0)。而engines、dependencies和devDependencies等配置項中可使用語義化版本號語法,具體如下:(注意:版本號格式不對的話,在執行npm install時會報警告哦!)
1.1.1:精確下載安裝1.1.1版本的包
>、<=、>、>=1.1.1:分別表示下載安裝大于、小于等于、大于等于1.1.1版本的包
1.0.1-1.1.1:表示版本范圍是包含1.0.1到1.1.1版本的包
~1.1.1:表示盡量采用靠近1.1.1版本的包,但可用的包版本范圍是1.1.1-0到1.1.x-x版本的包
~1.1:表示下載安裝1.1.x-x版本的包
~1:表示下載安裝1.x.x-x版本的包
^1.1.1:表示包版本范圍是1.1.1到1.x.x-x
^0.1.1:表示包版本范圍是1.1.1到1.1.x-x
^1.1:表示包版本范圍是1.1.x-x到1.x.x-x
^1:表示包版本范圍是1.x.x-x
空格、x、*:表示任意版本即可
兩個版本選擇器間,空格表示and關系,||表示or關系。
main,必選項,模塊入口文件相對路徑(相對于模塊根目錄)。
description,可選項,表示模塊功能描述,顯示在 npm search <package-name> 中
keywords,可選項,數組類型,表示模塊的關鍵字,顯示在 npm search <package-name> 中
author,可選項,表示發起者信息。示例如下:
"author":{ "name": "fsjohnhuang", "url": "http://fsjohnhuang.cnblogs.com/" }
engines,可選項,依賴的node版本。示例如下:
"engines":{ "node": ">= 0.8.0" }
repository,可選項,源碼托管地址。示例如下:
"repository":{ "type": "git", "url": "https://github.com/fsjohnhuang/iPromise.git" }
scripts,可選項,自定義在cli中輸入 npm <script> 時實際執行的程序。npm默認提供大量的script供我們調用。
dependencies和devDependencies,可選項,用于配置模塊的生產環境依賴包和開發環境依賴包。當執行npm install時,npm會根據這兩個配置項的值去下載安裝相關的依賴包。兩者的區別是devDependencies是模塊開發過程的依賴包(如:grunt只在開發時有用的模塊),并且當其他模塊需要依賴當前模塊時,當通過npm install <package-name>時會自動下載安裝dependencies的包而不會下載devDependencies的包。
四、NPM的配置信息
現在我們對package.json有一定的了解了,現在就到理論+實踐時間咯。在實踐之前我們要先配置一下NPM的資源庫(國內被墻,你懂的),內網用戶還要配置一下網絡代理地址等信息。
查看部分配置信息—— npm config ls
查看所有配置信息—— npm config ls -l
修改配置信息的三種方式:
1. 修改用戶家目錄的.npmrc文件(沒有則新建一個);
2. 通過 npm config set <config> <config-value> 命令;
npm config set registry http://registry.npm.taobao.org/ npm config set proxy http://proxy.com:8081/
3. 通過--registry=<registry-uri>等命令可選項臨時配置。
npm install grunt --registry=http://registry.npm.taobao.org
五、查找、安裝/卸載、更新依賴包
在安心玩耍之前我們要先了解一件事件,就是包的作用范圍分為 全局 和 本地 兩種。
全局:用作在cli上直接調用,而無法在項目中通過require導入依賴包。如將grunt-cli安裝到全局時,則可在cli中輸入grunt調用了!
npm install -g grunt-cli
cmd或shell中直接調用
> grunt
本地:用作在項目中通過require導入依賴包,供項目使用。
那么全局和本地的依賴包到底是存放在哪里的呢?通過 npm root -g 和 npm root 可分別查看全局和本地的依賴包下載安裝的絕對目錄了。本地的依賴包會存放在當前項目根目錄下的node_modules目錄下。
現在我們可以正式操作依賴包了!
搜索階段(操作遠程資源庫中的依賴包)
1. 搜索依賴包, npm search <package-name> 。
2. 查看依賴包的package.json信息, npm view <package-name> 。另外我們可以單獨查看package.json某個配置。
查看包的依賴關系:`npm view <package-name> dependencies` 查看包的源文件地址:`npm view <package-name> repository.url` 查看包所依賴的node版本號:`npm view <package-name> engines`
查看本地包信息
1. 查看當前項目的本地依賴包, npm list
2. 查看全局依賴包, npm list -g
3. 查看本地依賴包是否不是最新版, npm outdated <package-name>
安裝/卸載,更新包
1. 安裝本地/全局依賴包, npm install <package-name> / npm install -g <package-name> (這樣會下載安裝最新的包,若下載安裝特定版本號的包則 npm install <package-name>@<version> )
2. 卸載本地/全局依賴包, npm uninstall <package-name> / npm uninstall -g <package-name>
3. 更新本地/全局依賴包, npm update <package-name> / npm update -g <package-name>
六、發布包
站在使用者的角度,掌握上述章節的內容已經足夠了,但當我們開發出好玩的項目而且又想和大家分享時,那么下面的內容就不得不了解了!
1. 注冊一個registry帳號, npm adduser ,然后根據引導輸入帳號、密碼和郵箱地址。
2. 登錄registry帳號, npm login ,登錄信息會保存在客戶端。
3. 發布項目, npm publish 。(建議發布版本從1.0.0開始)
經過上述步驟我們就可發布模塊了。但這個時候你也許會考慮到項目中部分目錄和文件不應該被發布出去,應該有一個像.gitignore的文件來配置這些排除項。看來你猜對了,那就是.npmignore文件,不過npm做得更靈活一些!
1. 默認不帶.npmignore文件,若項目中帶.gitignore則使用.gitignore文件內容的配置項;
2. 若帶.npmignore文件則不使用.gitignore文件中的配置項;
3. 即使配置.npmignore文件,也無法排除package.json和README.*文件;
4. NPM內置設定以下文件必須被排除
.*.swp .*.swp ._* .DS_Store .git .hg .lock-wscript .svn .wafpickle-* CVS npm-debug.log
七、總結
現在我們終于可以安心下載各種node依賴包來推進前端工程化的步伐了!
尊重原創,轉載請注明來自:http://www.cnblogs.com/fsjohnhuang/p/4178019.html^_^肥仔John
八、參考
http://www.cnblogs.com/linjiqin/p/3765772.html
http://www.infoq.com/cn/articles/nodejs-npm-install-config/
http://www.infoq.com/cn/articles/msh-using-npm-manage-node.js-dependence
文章列表