本文來自國外新手向技術博客RisingStack。有興趣的同窗可點擊原文查看。node
相信npm install
是npm-cli最經常使用的功能,但其實它還有不少其餘可挖掘的地方。在本文中,你將會學習如何在應用開發的整個生命週期中——包括重新建,到開發,再到發佈上線,npm如何幫你更好地完成開發。linux
在進入今天的主題以前,咱們先來回顧下一些npm命令,例如如何肯定你的npm版本、哪些命令可供你使用等。git
要查看現有的npm版本,在命令行工具中運行以下命令:github
$ npm --version
但npm其實能告訴你更多關於版本的信息,如目前各package的版本、Node.js的版本、OpenSSL版本、V8的版本等,以下:docker
$ npm version { bleak: '1.0.4', npm: '2.15.0', ares: '1.10.1-DEV', http_parser: '2.5.2', icu: '56.1', modules: '46', node: '4.4.2', openssl: '1.0.2g', uv: '1.8.0', v8: '4.5.103.35', zlib: '1.2.8' }
和不少cli
工具同樣,npm也內置了一個很實用的help
功能。讓你能夠隨時查閱各類命令的描述和摘要,它們其實就是linux的man-page而已。例如:npm
$ npm help test NAME npm-test - Test a package SYNOPSIS npm test [-- <args>] aliases: t, tst DESCRIPTION This runs a package's "test" script, if one was provided. To run tests as a condition of installation, set the npat config to true.
npm init
來建立你的項目When starting a new project npm init can help you a lot by interactively creating a package.json file. This will prompt questions for example on the project's name or description. However, there is a quicker solution!json
建立項目的時候,npm init
的優勢在於能給交互式地替你建立package.json
文件,它會彈出問題讓你填寫項目的名稱和描述等等。但其實還有更簡化的方式:安全
$ npm init --yes
若是你使用npm init --yes
的話,它不會問你要如何建立,就直接按默認配置建立一個package.json
。這個默認配置固然也是可實現設置的:ide
npm config set init.author.name YOUR_NAME npm config set init.author.email YOUR_EMAIL
考慮到npm
中有上萬個模塊供你選擇,要找到合適的package是很困難的。咱們團隊的經驗是這樣,最近在Node.js的問卷調查中,不少開發者也告訴咱們要找到合適的package是很鬱悶的一件事情。因此如今咱們試着找一個能發送HTTP請求的模塊吧~工具
npms.io這個網站能很好地幫助到咱們。它將各個package的質量、受歡迎度、可維護性等指標作了量化並展示。具體的說,這些指標包括:是否使用了過期的依賴包、是否有代碼檢查配置、是否通過測試以及最近的版本是什麼時候發佈的,等等。
當你選定了你要用的模塊以後(本例中咱們選用了request
模塊),咱們應該首先查看它的文檔,看看有什麼現存的issue,以便充分了解咱們要用在應用中的模塊。但願你牢記一點,當使用的npm package越多,你可能遇到的不可靠或危險的package也就越多。想了解更多npm相關的安全風險的話,請閱讀咱們寫的一篇指導文檔。
若是想去到package的主頁,可執行下面的命令:
$ npm home request
要查看現存的issue,或者公開的roadmap,執行如下命令:
$ npm bugs request
另外,如要查看package的倉庫,執行如下命令:
$ npm repo request
當你找到想用在工程裏的package以後,下一步就是安裝和保存它。最經常使用的方式是採用npm install request
(譯註:其中的request
是package名字)。
若是你還想把這個package自動加到package.json
裏,你能夠這樣:
$ npm install request --save
npm
會把你的依賴保存起來,並加上^
前綴。這個前綴的意思是,下次再使用npm install
是時候還會自動安裝這個package的在此大版本下的最新版本。若是你想修改這個功能的話,能夠:
$ npm config set save-prefix='~'
若是你就想保存目前的這個版本,能夠:
$ npm config set save-exact true
你能夠像前面一節講的那樣,在package.json
裏面指定了保存依賴的版本號。但大部分npm模塊的做者不會這樣作,由於他們想自動地獲取補丁和新功能。
但在生產環境下,若是不指定保存依賴的版本號會存在問題。由於若是剛好你開發的過程當中做者發佈了新版本,那麼有可能本地和生產環境使用的依賴的版本就是不同的。這個時候,若是新版本有bug的話,就會影響到生產環境。
要解決這個問題,你可使用npm shrinkwrap
。它會生成一個npm-shrinkwrap.json
文件,不只記錄了當前環境中使用的模塊精確的版本號,還記錄了這些模塊的其餘依賴的版本,以此類推。一旦工程中有了此文件,npm install
就會使用它來複制一個徹底同樣的依賴樹。
npm提供了一個內置的工具方法來查看過期的依賴:npm outdated
。
$ npm outdated conventional-changelog 0.5.3 0.5.3 1.1.0 @risingstack/docker-node eslint-config-standard 4.4.0 4.4.0 6.0.1 @risingstack/docker-node eslint-plugin-standard 1.3.1 1.3.1 2.0.0 @risingstack/docker-node rimraf 2.5.1 2.5.1 2.5.4 @risingstack/docker-node
當你維護的項目不少的時候,要保持每一個項目中的依賴都是最新的是一件很痛苦的事情。要實現這個任務的自動化,能夠選用Greenkeeper,當有依賴更新的時候,它會自動爲你的倉庫發pull請求。
devDepenendencies
稱devDepenendencies
爲開發環境依賴是有緣由的,你在生產環境是用不着他們的。生產環境不用這些devDepenendencies
可讓你線上的代碼包更小更安全,由於多一個依賴就多一個安全風險。
若是須要只安裝生產環境依賴,運行:
$ npm install --production
或者,你能夠設置NODE_ENV
變量爲生產環境:
$ NODE_ENV=production npm install
若是你開發的時候登錄了Linux系統的用戶,那你的npm token就會存在.npmrc
文件中。有的時候這個文件會不當心被上傳到github。目前,在github上搜索.npmrc
文件的話,能找到好幾千個,裏面不少都包含了token。若是你本身的倉庫裏也有.xxx
的文件的話,趕快檢查下本身的證書有沒有被上傳!
另外一個潛在的安全隱患在於,有的文件會被不當心上發佈到npm上。通常來講npm是參考.gitignore
文件來決定哪些文件會被上傳。但你也能夠加一個.npmignore
文件,它會override.gitignore
。
在本地開發package的時候,你們通常都會在發佈以前在本身的項目上先實踐一下。這個時候npm link
就能派上用場。
npm link
的做用在於,它會在全局目錄建立一個symlink(符號連接),指向npm link
所運行的那個package。
你也能夠在其餘地方運行npm link package-name
,這樣會在全局安裝的package-name
和目前項目的/node_modules
之間建立一個symlink。
能夠像下面這樣實踐一下!
# create a symlink to the global folder /projects/request $ npm link # link request to the current node_modules /projects/my-server $ npm link request # after running this project, the require('request') # will include the module from projects/request