摘要:但在生產(chǎn)環(huán)境下,如果不指定保存依賴的版本號(hào)會(huì)存在問(wèn)題。它會(huì)生成一個(gè)文件,不僅記錄了當(dāng)前環(huán)境中使用的模塊精確的版本號(hào),還記錄了這些模塊的其他依賴的版本,以此類推。
本文來(lái)自國(guó)外新手向技術(shù)博客RisingStack。有興趣的同學(xué)可點(diǎn)擊原文查看。
相信npm install是npm-cli最常用的功能,但其實(shí)它還有很多其他可挖掘的地方。在本文中,你將會(huì)學(xué)習(xí)如何在應(yīng)用開發(fā)的整個(gè)生命周期中——包括從新建,到開發(fā),再到發(fā)布上線,npm如何幫你更好地完成開發(fā)。
0. npm基礎(chǔ)使用在進(jìn)入今天的主題之前,我們先來(lái)回顧下一些npm命令,例如如何確定你的npm版本、哪些命令可供你使用等。
0.1 npm版本要查看現(xiàn)有的npm版本,在命令行工具中運(yùn)行如下命令:
$ npm --version
但npm其實(shí)能告訴你更多關(guān)于版本的信息,如目前各package的版本、Node.js的版本、OpenSSL版本、V8的版本等,如下:
$ 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" }0.2 npm help
和很多cli工具一樣,npm也內(nèi)置了一個(gè)很實(shí)用的help功能。讓你可以隨時(shí)查閱各種命令的描述和摘要,它們其實(shí)就是linux的man-page而已。例如:
$ npm help test NAME npm-test - Test a package SYNOPSIS npm test [--1. 用npm init來(lái)創(chuàng)建你的項(xiàng)目] 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.
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!
創(chuàng)建項(xiàng)目的時(shí)候,npm init的優(yōu)點(diǎn)在于能給交互式地替你創(chuàng)建package.json文件,它會(huì)彈出問(wèn)題讓你填寫項(xiàng)目的名稱和描述等等。但其實(shí)還有更簡(jiǎn)化的方式:
$ npm init --yes
如果你使用npm init --yes的話,它不會(huì)問(wèn)你要如何創(chuàng)建,就直接按默認(rèn)配置創(chuàng)建一個(gè)package.json。這個(gè)默認(rèn)配置當(dāng)然也是可實(shí)現(xiàn)設(shè)置的:
npm config set init.author.name YOUR_NAME npm config set init.author.email YOUR_EMAIL2. 查找npm的package
考慮到npm中有上萬(wàn)個(gè)模塊供你選擇,要找到合適的package是很困難的。我們團(tuán)隊(duì)的經(jīng)驗(yàn)是這樣,最近在Node.js的問(wèn)卷調(diào)查中,很多開發(fā)者也告訴我們要找到合適的package是很郁悶的一件事情。所以現(xiàn)在我們?cè)囍乙粋€(gè)能發(fā)送HTTP請(qǐng)求的模塊吧~
npms.io這個(gè)網(wǎng)站能很好地幫助到我們。它將各個(gè)package的質(zhì)量、受歡迎度、可維護(hù)性等指標(biāo)做了量化并展現(xiàn)。具體的說(shuō),這些指標(biāo)包括:是否使用了過(guò)時(shí)的依賴包、是否有代碼檢查配置、是否經(jīng)過(guò)測(cè)試以及最近的版本是何時(shí)發(fā)布的,等等。
3. 了解你選擇的package當(dāng)你選定了你要用的模塊之后(本例中我們選用了request模塊),我們應(yīng)該首先查看它的文檔,看看有什么現(xiàn)存的issue,以便充分了解我們要用在應(yīng)用中的模塊。希望你牢記一點(diǎn),當(dāng)使用的npm package越多,你可能遇到的不可靠或危險(xiǎn)的package也就越多。想了解更多npm相關(guān)的安全風(fēng)險(xiǎn)的話,請(qǐng)閱讀我們寫的一篇指導(dǎo)文檔。
如果想去到package的主頁(yè),可執(zhí)行下面的命令:
$ npm home request
要查看現(xiàn)存的issue,或者公開的roadmap,執(zhí)行以下命令:
$ npm bugs request
另外,如要查看package的倉(cāng)庫(kù),執(zhí)行以下命令:
$ npm repo request4. 保存依賴
當(dāng)你找到想用在工程里的package之后,下一步就是安裝和保存它。最常用的方式是采用npm install request(譯注:其中的request是package名字)。
如果你還想把這個(gè)package自動(dòng)加到package.json里,你可以這樣:
$ npm install request --save
npm會(huì)把你的依賴保存起來(lái),并加上^前綴。這個(gè)前綴的意思是,下次再使用npm install是時(shí)候還會(huì)自動(dòng)安裝這個(gè)package的在此大版本下的最新版本。如果你想修改這個(gè)功能的話,可以:
$ npm config set save-prefix="~"
如果你就想保存目前的這個(gè)版本,可以:
$ npm config set save-exact true5. 鎖定依賴
你可以像前面一節(jié)講的那樣,在package.json里面指定了保存依賴的版本號(hào)。但大部分npm模塊的作者不會(huì)這樣做,因?yàn)樗麄兿胱詣?dòng)地獲取補(bǔ)丁和新功能。
但在生產(chǎn)環(huán)境下,如果不指定保存依賴的版本號(hào)會(huì)存在問(wèn)題。因?yàn)槿绻『媚汩_發(fā)的過(guò)程中作者發(fā)布了新版本,那么有可能本地和生產(chǎn)環(huán)境使用的依賴的版本就是不一樣的。這個(gè)時(shí)候,如果新版本有bug的話,就會(huì)影響到生產(chǎn)環(huán)境。
要解決這個(gè)問(wèn)題,你可以使用npm shrinkwrap。它會(huì)生成一個(gè)npm-shrinkwrap.json文件,不僅記錄了當(dāng)前環(huán)境中使用的模塊精確的版本號(hào),還記錄了這些模塊的其他依賴的版本,以此類推。一旦工程中有了此文件,npm install就會(huì)使用它來(lái)復(fù)制一個(gè)完全一樣的依賴樹。
6. 查找過(guò)時(shí)的依賴npm提供了一個(gè)內(nèi)置的工具方法來(lái)查看過(guò)時(shí)的依賴: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
當(dāng)你維護(hù)的項(xiàng)目很多的時(shí)候,要保持每個(gè)項(xiàng)目中的依賴都是最新的是一件很痛苦的事情。要實(shí)現(xiàn)這個(gè)任務(wù)的自動(dòng)化,可以選用Greenkeeper,當(dāng)有依賴更新的時(shí)候,它會(huì)自動(dòng)為你的倉(cāng)庫(kù)發(fā)pull請(qǐng)求。
7. 保存生產(chǎn)環(huán)境中沒(méi)有devDepenendencies稱devDepenendencies為開發(fā)環(huán)境依賴是有原因的,你在生產(chǎn)環(huán)境是用不著他們的。生產(chǎn)環(huán)境不用這些devDepenendencies可以讓你線上的代碼包更小更安全,因?yàn)槎嘁粋€(gè)依賴就多一個(gè)安全風(fēng)險(xiǎn)。
如果需要只安裝生產(chǎn)環(huán)境依賴,運(yùn)行:
$ npm install --production
或者,你可以設(shè)置NODE_ENV變量為生產(chǎn)環(huán)境:
$ NODE_ENV=production npm install8. 確保你的項(xiàng)目和token的安全
如果你開發(fā)的時(shí)候登陸了Linux系統(tǒng)的用戶,那你的npm token就會(huì)存在.npmrc文件中。有的時(shí)候這個(gè)文件會(huì)不小心被上傳到github。目前,在github上搜索.npmrc文件的話,能找到好幾千個(gè),里面很多都包含了token。如果你自己的倉(cāng)庫(kù)里也有.xxx的文件的話,趕快檢查下自己的證書有沒(méi)有被上傳!
另一個(gè)潛在的安全隱患在于,有的文件會(huì)被不小心上發(fā)布到npm上。一般來(lái)說(shuō)npm是參考.gitignore文件來(lái)決定哪些文件會(huì)被上傳。但你也可以加一個(gè).npmignore文件,它會(huì)override.gitignore。
9. 開發(fā)package在本地開發(fā)package的時(shí)候,大家一般都會(huì)在發(fā)布之前在自己的項(xiàng)目上先實(shí)踐一下。這個(gè)時(shí)候npm link就能派上用場(chǎng)。
npm link的作用在于,它會(huì)在全局目錄創(chuàng)建一個(gè)symlink(符號(hào)鏈接),指向npm link所運(yùn)行的那個(gè)package。
你也可以在其他地方運(yùn)行npm link package-name,這樣會(huì)在全局安裝的package-name和目前項(xiàng)目的/node_modules之間創(chuàng)建一個(gè)symlink。
可以像下面這樣實(shí)踐一下!
# 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
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/91342.html
摘要:在正式前端一些小細(xì)節(jié)前端掘金英文原文,翻譯未來(lái)的太讓人興奮了一方面,是全新的頁(yè)面布局方式另一方面,是酷炫的濾鏡顏色等視覺效果。老司機(jī)教你更好的進(jìn)行編程個(gè)技巧前端掘金并不總是容易處理。 CSS3 實(shí)現(xiàn)文字流光漸變動(dòng)畫 - 前端 - 掘金來(lái)自百度前端技術(shù)學(xué)院的實(shí)踐任務(wù):有趣的鼠標(biāo)懸浮模糊效果,參考:http://ife.baidu.com/course/d...,用CSS3實(shí)現(xiàn)了一下,順便...
摘要:特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點(diǎn)多,可以很快搞定,沒(méi)想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯(cuò)誤的地方,還請(qǐng)斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會(huì)及時(shí)更新,平時(shí)業(yè)務(wù)工作時(shí)也會(huì)不定期更...
摘要:本周于上海閉幕,掘金和知乎上都有對(duì)應(yīng)的實(shí)錄和問(wèn)答,但會(huì)議的視頻目前都還沒(méi)放出來(lái),有心的同學(xué)如果找到了歡迎分享。建議中英文對(duì)照閱讀。英文原文前端獨(dú)立技術(shù)博客推薦推薦一些現(xiàn)在還在堅(jiān)持原創(chuàng)的博主,有業(yè)界大牛,也有小鮮肉,也有國(guó)外美女。 CSS 樣式書寫規(guī)范最佳實(shí)踐 本文的所列是實(shí)踐當(dāng)中得出的一套比較不錯(cuò)的 CSS 書寫規(guī)范,可以結(jié)合自身團(tuán)隊(duì)發(fā)展出一套適合自己業(yè)務(wù)的規(guī)范。 CSS中的字體與排版...
摘要:本周于上海閉幕,掘金和知乎上都有對(duì)應(yīng)的實(shí)錄和問(wèn)答,但會(huì)議的視頻目前都還沒(méi)放出來(lái),有心的同學(xué)如果找到了歡迎分享。建議中英文對(duì)照閱讀。英文原文前端獨(dú)立技術(shù)博客推薦推薦一些現(xiàn)在還在堅(jiān)持原創(chuàng)的博主,有業(yè)界大牛,也有小鮮肉,也有國(guó)外美女。 CSS 樣式書寫規(guī)范最佳實(shí)踐 本文的所列是實(shí)踐當(dāng)中得出的一套比較不錯(cuò)的 CSS 書寫規(guī)范,可以結(jié)合自身團(tuán)隊(duì)發(fā)展出一套適合自己業(yè)務(wù)的規(guī)范。 CSS中的字體與排版...
閱讀 1364·2021-11-11 16:54
閱讀 1918·2021-10-13 09:40
閱讀 1075·2021-10-08 10:05
閱讀 3587·2021-09-22 15:50
閱讀 3881·2021-09-22 15:41
閱讀 2076·2021-09-22 15:08
閱讀 2471·2021-09-07 10:24
閱讀 3655·2019-08-30 12:52