本文轉載自:衆成翻譯
譯者:網絡埋伏紀事
連接:http://www.zcfy.cc/article/1749
原文:https://blog.risingstack.com/node-hero-npm-tutorial/html
本章將學習什麼是 NPM,以及如何使用它。咱們開始吧!node
NPM 是 Node.js 應用程序所用的包管理器 - 你能夠在 NPM 中找到大量模塊,這樣你就不用從新造輪子了。它就像 Java 的 Maven 或者 PHP 的 Composer。與 NPM 交互有兩種主要的接口 - NPM 網站以及 NPM 命令行工具。git
網站和 CLI 使用一樣的註冊庫來顯示模塊以及查找模塊。web
NPM 網站地址爲 https://npmjs.com。你能夠註冊成一個新用戶,或者只查找包。npm
要運行 CLI,只需執行:編程
npm
注意,NPM 是與 Node.js 二進制文件捆綁在一塊兒的,因此沒必要安裝它 - 可是,若是想使用指定的 npm 版本,能夠更新它。若是想安裝 npm 第三版,那麼就能夠執行:npm install npm@3 -g
。json
在上一章 開始使用 Node.js 中,當建立 package.json
文件時,已經遇到了 NPM。下面咱們繼續擴展知識!api
本節將學習如何給應用程序添加運行時依賴。網絡
有了 package.json
文件以後,就能夠給應用程序添加依賴了。下面咱們先添加一個!試試下面的命令:異步
npm install lodash --save
用這一條命令,咱們作了兩件事情:首先,lodash
被下載,並放到 node_modules
文件夾。全部外部依賴都會放在這個文件夾中。通常不會將這個文件夾添加到源代碼管理,因此若是你在用 git,要確保將 lodash
添加到 .gitignore
文件中。
這對你的 .gitignore
是一個好起點。
# Logs logs *.log npm-debug.log* # Runtime data pids *.pid *.seed # Directory for instrumented libs generated by jscoverage/JSCover lib-cov # Coverage directory used by tools like istanbul coverage # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) .grunt # node-waf configuration .lock-wscript # Compiled binary addons (http://nodejs.org/api/addons.html) build/Release # Dependency directories node_modules jspm_packages # Optional npm cache directory .npm # Optional REPL history .node_repl_history
如今咱們來看看 package.json
文件中有啥變化!文件中出現了一個新屬性dependencies
:
"dependencies": { "lodash": "4.6.1" }
這意味着 lodash
版本 4.6.1
如今安裝好了,可使用了。注意,NPM 遵循 SemVer 規則來控制包的版本。
假設版本號格式爲 「主版本號.次版本號.補丁版本號」,看成出不兼容的 API 修改時,增長主版本號;當以向後兼容的方式添加功能時,增長次版本號;看成出向後兼容的錯誤修正時,增長補丁版本號。更多信息參見:http://semver.org/。
既然 lodash
已經能夠用了,咱們來看看能怎麼用!能夠像你用本身的模塊同樣的方式用它,不過如今不須要定義路徑,只須要模塊的名稱:
// index.js const _ = require('lodash') _.assign({ 'a': 1 }, { 'b': 2 }, { 'c': 3 }); // → { 'a': 1, 'b': 2, 'c': 3 }
本節將學習如何把構建時依賴添加到應用中。
在建立 Web 應用程序時,可能須要壓縮 JavaScript 文件,合併 CSS 文件等等。作這種事情的模塊只會在資源構建期間運行,因此運行的應用程序不須要它們。
你能夠像這樣安裝這些腳本:
npm install mocha --save-dev
以後,package.json
文件中會出現一個稱爲 devDependencies
的新小節。全部帶有 --save-dev
安裝的模塊都會被放在這裏 - 它們也會被放在同一 node_modules
目錄中。
NPM 腳本是一個很強大的概念 - 有了它們相助,就能夠建立小的實用工具,甚至構成複雜的構建系統。
最多見的就是 start
和 test
腳本。用 start
腳本能夠定義別人如何啓動你的應用程序,用 test
腳本定義如何運行測試。在 package.json
中,它們能夠像這樣:
"scripts": { "start": "node index.js", "test": "mocha test", "your-custom-script": "echo npm" }
這裏要注意的事情:
start
: 很簡單,它只描述應用程序的起點,能夠被 npm start
調用。
test
: 用途是執行你的測試 - 這裏有個陷阱,在本例中 mocha
不須要全局安裝,由於 npm 會在 node_modules/.bin
文件夾下查找它,而 mocha 也會放在這裏。它能夠用 npm test
調用。
your-custom-script
: 任何你想要的東西,你能夠挑任何名稱。它能夠用 npm run your-custom-script
調用 - 不要忘記 run
部分!
起初 NPM 對於模塊名稱有一個全局共享的命名空間 - 在註冊庫中有超過 250,000 個模塊,大部分簡單名稱都已經被採用了。此外,全局命名空間只包含公共模塊。
NPM 經過引入做用域包(Scoped Package)來解決此問題。做用域包有以下命名模式:
@myorg/mypackage
能夠採用與之前同樣的方式安裝做用域包:
npm install @myorg/mypackage --save-dev
它會以以下方式出如今 package.json
中:
"dependencies": { "@myorg/mypackage": "^1.0.0" }
不出所料,請求做用域包應該是以下方式:
require('@myorg/mypackage')
更多信息,請參考 NPM 做用域模塊文檔。
下一章學習使用回調和 Promises 實現異步編程的原理。