nodejs這些年的發展很是快,相信沒有哪一個前端不知道的了,npm也成爲了前端開發中常常用到了的一個命令。那麼npm不是隻用一個 "npm install xxx"命令就夠了嗎?實際上並非這樣,發現有些團隊在使用npm的時候沒有認真去搞懂npm在團隊裏面或者說是在項目裏面的一些用法。前端
在團隊裏面開發,通常會分爲開發模式和生產模式(可能會有不一樣的叫法),有時候還有測試模式,那麼這些模式其實跟npm有很大的聯繫的。首先看一個簡單的例子,先從npm依賴的package.json文件開始。node
{ "name": "test", "version": "1.0.0", "description": "test", "main": "app.js", "scripts": { "dev": "gulp dev && node app", "pro": "node app" }, "keywords": [ "test" ], "dependencies": { "koa": "^1.2.0" }, "devDependencies": { "gulp": "^3.9.1", "koa": "^1.2.0" }, "author": "test", "license": "MIT" }
這個很簡單的package.json寫法的例子,這裏主要應用的是其中的 scripts、dependencies、devDependencies 這三個設置。git
關於這個兩個配置,大體能夠理解爲當執行shell
npm install xxx --save
的時候,模塊會記錄在dependencies裏面; 當執行npm
npm install xxx --save-dev
的時候,模塊會記錄在devDependencies裏面。可是有一點的是,不少人在git clone 項目以後都是直接執行" npm i" 或者 "npm install" 就能夠把項目的依賴配置好了,而這兩個命令都是安裝devDependencies裏面的模塊,那麼還須要dependencies來作什麼?
"npm install" 模式的是開發模式,因此安裝模塊是devDependencies裏面的模塊,在開發的時候確實夠用了,可是在部署到服務器的時候就不是這樣了。上面的package.json,dependencies(對應生產模式)和 devDependencies(對應開發模式),區別只是在於有沒有 gulp 這個模塊。
如今反過來想,咱們在開發的時候須要用gulp來打包咱們的靜態文件,那麼到了生產模式,也就是部署到了服務器,咱們已經不須要gulp來打包了,由於在開發模式把文件打包好,提交代碼的時候同步就能夠了,因此在部署到服務器的時候咱們徹底不用多安裝gulp這麼一個模塊了。
那麼生產模式是怎麼執行安裝呢?很簡單,json
npm install --production
就能夠了。這個例子爲了理解,只是用了一兩個模塊,實際項目中生產模式和開發模式確定不止區別一個模塊這麼簡單,這個時候就更能體現出兩種模式分開的必要。
還要提過的測試模式,測試模式通常是歸於開發模式,即把測試模式須要用到的模塊放到devDependencies 裏面,目前npm是尚未獨立出來測試模式的依賴設置。gulp
大部分人開始開發的時候,對於gulp的構建通常就執行服務器
gulp
這個命令,對於運行node的server通常運行app
node app
這樣相似的命令,可是這樣在團隊裏面的開發是不規範的,特別是有些命令加上各類參數,而後比較長的時候就會麻煩了,應該是使用"npm run" 命令和結合scripts的設置。
scripts是一個object,那麼key就是對應的命令,value就是實際上執行的命令,這種命令再長也不怕了。能夠看到上面的package.json裏面的scripts,裏面有兩個命令一本是dev另外一個是pro,分別對應開發模式和生產模式。 當團隊成員開發的時候只須要運行koa
npm run dev
就能夠開始開發,當部署到服務器的時候執行
npm run pro
就能夠啓動服務了。前提是要安裝好依賴模塊,就是上面說到了兩種不一樣的安裝方式。
實際項目有可能不止這兩個命令,具體的命令也可能不同,好比有可能還有測試模式的命令,又好比只須要打包文件而不要http的服務,那麼這時候開發模式和生產模式就是不一樣的gulp命令了。
團隊中使用,最主要的是規範,像npm這樣的使用確實要規範起來,減小團隊配合的阻礙吧,只要是增長了什麼模式,只須要告訴他看packaga.json裏面的scripts, npm run xxx一下就能夠了。固然這裏在團隊使用當中,每一個項目都應該有一個README.md 的文檔來進行介紹和說明,這裏就不詳細介紹了。