浜嬫儏鏄繖鏍风殑锛氬洜涓烘垜缁忓父浼氬啓涓€浜沶pm鍖咃紝浣嗘槸鏈夋椂鍊欏啓瀹屼竴涓寘锛屼細鎻愮ず璇村寘鍚嶆湁琚嬁璧颁簡锛屽彧濂芥敼涓悕瀛楁垨鑰呭姞涓猻cope锛屽緢鏃犲銆俷pm鍛戒护琛屽彲浠ラ€氳繃npm瑙嗗浘鐭ラ亾涓€涓寘鏄惁瀛樺湪锛屼絾鏄棤娉曟壒閲忕煡閬擄紝鎵€浠ユ兂鍐欎竴涓伐鍏锋潵鎵归噺鍙栧悕锛氾級鏈暀绋嬬殑鐩稿叧浠g爜宸茬粡涓婁紶鍒癵ithub锛歯pm婧愮爜鏂规硶鍦ㄥ啓宸ュ叿涔嬪墠锛屽厛鐪嬬湅濡備綍閫氳繃npm鎻愪緵鐨勫懡浠ょ煡閬撳寘鍚嶆槸鍚﹁鍗犵敤銆俷pmview閫氳繃npmview-h鍙互鐭ラ亾瀹冪殑鐢ㄦ硶锛歯pmview[<@scope>/][@][[.subfield]...]aliases:v,info,show閫氳繃涓婇潰鐨勫懡浠ゆ煡鐪媢nused-npm-names鍖咃細npmviewunused-npm-names#鎴栬€卬pminfounused-npm-names浼氳緭鍑猴細{name:'unused-npm-names','dist-tags':{鏈€鏂帮細'1.1.1'}锛岀増鏈細['1.0.0'锛?1.0.1'锛?1.1.0'锛?1.1.1']]锛屾椂闂达細{鍒涘缓锛?2018-09-07T02锛?3锛?5.277Z'锛?1.0.0'锛?2018-09-07T02锛?3锛?5.439Z'锛屼慨鏀癸細'2018-09-07T03锛?4锛?6.363Z'锛?1.0.1'锛?2018-09-07T03:07:46.542Z','1.1.0':'2018-09-07T03:35:40.221Z','1.1.1':'2018-09-07T03:44:03.534Z'}锛岀淮鎶よ€咃細['pjy<731401082@qq.com>'],description:'鏌ユ壘鏈娇鐢ㄧ殑npmnames',homepage:'https://github.com/PengJiyuan/unused-npm-names#readme',keywords:['npm','names','unused','find'],repository:{type:'git',url:'git+https://github.com/PengJiyuan/unused-npm-names.git'},浣滆€咃細'褰户鍏?,bugs:{url:'https://github.com/PengJiyuan/unused-npm-names/issues'},license:'MIT',readmeFilename:'README.md',version:'1.1.1',main:'index.js',bin:{unn:'cli.js'},scripts:{test:'echo"Error:notestspecified"&&exit1'},dependencies:{axios:'^0.18.0',chalk:'^2.4.1',commander:'^2.17.1'},gitHead:'818611db1c2baeb589cb3f639559ab6afc9f8e8f',dist:{integrity:'sha512-t9bCfY3qbeVY54QC6Cznn3YhM0jq6HX0fE0r5TMAq1IOzu+NQ/caA8tfj62pZtDuZKb9R29ne7UyPB+4zAAplw==',shasum:'0b7c162f7656c0d74868bf567713150488f8c473',tarball:'https://registry.npmjs.org/unused-npm-names/-/unused-npm-names-1.1.1.tgz',fileCount:5,unpackedSize:4544,'npm-signature':'-----BEGINPGPSIGNATURE-----\r\nVersion:OpenPGP.jsv3.0.4\r\nComment:https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbkfQDCRA9TVsSAnZWagAAwS4QAKFC1MnosxmJEws07U4O\ngfUPLP04ZLZqtW6nuB/29A72DE1+bh/TGsir83r/sYf1TAPSLOCRd3Nrky3A\n7+umUUOl5zGU5WyG86Fo2XOl5cYgXXWXU6LcZufG/cwM3Xi9MUfxnT7zCEWt\nQPAE8Oh9UhkWCnvFMBA6M6knqK9K08nQf0Ke55UoiuX+OqF8BUlNw8LqEwrI\nMTW8hpjKqsAdo3JhBu0ZkrfTRMq7cTawfjAg+qDs4SSTuWD9OJ9d/2y4OC/p\nX6+3I+Et+SqFJxjGDBounjF1GYYiH3dQPRN8UWL1p9Ypu6YsiZ7l8dp6RH15\nHFUv6lsCmZvhkKc1zO1pY67xUOA9VbLjhXtObwopFvCIehlv3cCw5FMwoa7x\nz+tou0J4II6n68cG6IfTt+9odi9abj7M2YxStW32Miu3efhpXiw2PpX3HWOW\njkY7IQryyxJbQIdKHJqJ59fADHLxpdmr6WADYWt8mKI+9TK9onpSgFgX4udw\ng7fXN3z/L6i7yY+0fvvX/b0jjVzVFNP5kFnUBSnWk/Hjm+h96QS+0xfRCRNv\n5CmVT2kbxYNAdFsFFoNCqHqE+uQoMrSwBw1SIJdybWjs84QrLOrDFjhKypev\nl6bzrgcyE0VWYY1A+zdyquL1cQ+xEJacsfN5NbicxTZhDU0enAtcxhKSe7bz\nJ9CP\r\n=t8xy\r\n-----ENDPGPSIGNATURE-----\r\nories}锛岃繖鏍风洿鎺ヨ緭鍑哄お闀夸簡锛氾紝鎴戜滑鍙兘鐪嬬湅atthelatestversionnumberofunused-npm-names:npmviewunused-npm-namesversion浼氳緭鍑猴細1.1.1褰撶劧锛屽鏋滆繖涓寘涓嶅瓨鍦紝浼氭姤404閿欒锛屾垜浠氨鐭ラ亾杩欎釜鍖呮槸鍚﹀瓨鍦╪ameisoccupied鍐欎竴涓懡浠よ宸ュ叿涓婇潰鐨勬柟娉曞彲浠ュ緱鍒版垜浠兂瑕佺殑缁撴灉锛屼絾鏄鏋滄垜鎯充粠涓€鎵瑰悕瀛椾腑閫夋嫨涓€涓彲鐢ㄧ殑锛屽氨涓嶅お鏂逛究浜嗭紝鎴戝彧濂戒竴涓竴涓瘯浜嗐€傚鏋滄湁涓€涓伐鍏峰彲浠ヨ繖鏍风敤灏卞緢鏂逛究浜嗭細unnreactreact-routerreact-domreact-ppreact-fdasf涓€姝ヨ瘑鍒墍鏈夊寘銆傞偅涔堬紝璁╂垜浠竴姝ヤ竴姝ョ殑鐪嬩竴涓嬭繖涓姛鑳芥槸濡備綍瀹炵幇鐨勩€?.鐪嬬湅npm鏄€庝箞鍋氱殑銆傛垜浠彲浠ラ€氳繃npmview鏌ョ湅涓€涓寘鐨勪俊鎭紝閭d箞鍦ㄨ繍琛岃繖涓懡浠ょ殑鏃跺€欙紝npm鑲畾鍙戦€佷簡涓€涓姹傛潵鑾峰彇杩欎釜鍖呯殑鏁版嵁锛岄偅涔堟垜浠€庝箞鐭ラ亾npm鍙戦€佷簡浠€涔堣姹傚憿锛?娣诲姞--verbose鍚庣紑浠ユ煡鐪嬭缁嗚緭鍑簅k鍙戠幇npm鍙戦€佷簡GET璇锋眰锛岃姹傜殑url涓篽ttps://registry.npmjs.org/unused-npm-names銆傚摝锛岀煡閬撲簡锛屾垜浠彲浠ヨ姹俬ttps://registry.npmjs.org/${packageName}鑾峰彇鍚嶄负packageName鐨勫寘淇℃伅銆傚綋鐒朵綘涔熷彲浠ュ湪npm鐨勫畼鏂逛粨搴擄細package-metadata涓壘鍒扮浉鍏矨PI鐨勪娇鐢ㄣ€?.鍦ㄥ紑濮嬪啓宸ュ叿涔嬪墠锛屾湁涓€绡囧叧浜庡浣曞啓鍛戒护琛屽伐鍏风殑鏂囩珷锛岀湅杩欓噷锛氭墜鎶婃墜鏁欎綘鍐欏懡浠よ宸ュ叿銆傛湰鏂囦笉浠庡浣曚粠澶村紑濮嬫瀯寤哄懡浠よ宸ュ叿锛屾垜浠洿鎺ヤ笂浠g爜锛氭枃浠剁洰褰曞涓嬫墍绀猴細unused-npm-names鈹溾攢鈹€node_modules鈹溾攢鈹€package.json鈹溾攢鈹€cli銆俲s(bin)鈹斺攢鈹€index.js(main)package.json:{"name":"unused-npm-names","version":"1.0.0","description":"Findunusednpmnames","main":"index.js","bin":{"unn":"cli.js"},"scripts":{"test":"echo\"Error:notestspecified\"&&exit1"},"license":"MIT","dependencies":{"axios":"^0.18.0","chalk":"^2.4.1","commander":"^2.17.1"}}閫氳繃鍦╬ackage.json涓缃産in瀛楁锛屽懡浠ょ殑鍚嶅瓧鎴戜滑璁剧疆涓簎nn锛屾瘮杈冪煭灏忔柟渚垮疄鐢ㄣ€傛垜浠妸鏌ヨ鐨勪富瑕侀€昏緫鏀惧埌浜唅ndex.js涓紝鎶婂懡浠よ閫昏緫鏀惧埌浜哻li.js涓紝杩欐牱鎴戜滑涓嶄粎鍙互閫氳繃cli浣跨敤锛屼篃鍙互閫氳繃require鍦╪odejs鑴氭湰涓娇鐢ㄣ€?/index.jsconstaxios=require('axios');//鐢ㄤ簬鍙戦€乭ttp璇锋眰constchalk=require('chalk');//缁堢杈撳嚭褰╄壊鏂囨湰//search鏂规硶鐨勫弬鏁版槸涓€涓暟缁勶紝閲岄潰瀛樺偍浜嗛渶瑕佹煡璇㈢殑鍖呭悕//姣斿鎴戜滑瑕佹煡璇eact鍜宺eact-dom锛岄偅涔坰earch(['react','react-dom'])functionsearch(pkgs=[]){if(!Array.isArray(pkgs)){throw'Paramshouldbeanarray.';}console.log();pkgs.forEach((pkg)=>{axios.get(`https://registry.npmjs.org/${pkg}`).then((res)=>{//濡傛灉璇锋眰鎴愬姛锛屽寘瀛樺湪console.log(`${chalk.cyan(pkg)}:${chalk.red('Used鉂?)}`);}).catch((err)=>{//濡傛灉璇锋眰澶辫触锛屾槸鍥犱负404閿欒锛岃瘉鏄庡寘涓嶅瓨鍦紝鍚嶇О鍙敤if(err.stack&&/Requestfailedwithstatuscode404/.test(err.stack)){console.log(`${chalk.cyan(pkg)}:${chalk.green('Unused鉁?)}`);}else{//澶勭悊鏈煡鎺у埗鍙?log(`${chalk.cyan(pkg)}:${chalk.gray('Unknown馃')}`)}});});}module.exports=search;鎴戜滑鏈€缁堢殑cli搴旇鏀寔涓ょ妯″紡锛屼竴绉嶆槸鍛戒护琛屽弬鏁拌В鏋愶紝涓€绉嶆槸浼犲叆js鏂囦欢銆傚涓嬶細//cli.js#!/usr/bin/envnode'usestrict';constpath=require('path');constprogram=require('commander');//鍛戒护琛屽弬鏁拌В鏋恈onstchalk=require('chalk');constsearch=require('.');constpkg=require('./package.json');绋嬪簭.version(pkg.version,'-v,--version').usage('[names]').option('-c,--config[config]','浣跨敤閰嶇疆鏂囦欢').on('--help',()=>{console.log('\nExamples:\n');console.log(`${chalk.green('$')}unnreact,react-dom,react-router`);console.log('');}).parse(process.argv);//program.args鏄墍鏈夌洿鎺ヨВ鏋愪紶鍏ョ殑鍙傛暟//姣斿unnreactreact-dom--hehe//閭d箞program.args灏辨槸['react','react-dom']letpkgs=program.args;//濡傛灉鎸囧畾浜唈s鏂囦欢锛宲kgs浼氫粠鏂囦欢涓鍙杋f(program.config&&typeofprogram.config==='string'){//process.cwd()鏄綋鍓嶇▼搴忔墍鍦ㄧ殑鐩綍杩愯constfiles=path.resolve(process.cwd(),program.config);灏濊瘯{pkgs=require(files);鎼滅储锛堝寘瑁咃級锛泒catch(err){console.log(err);杩涚▼.exit(1);}}else{if(pkgs.lengthh>0){鎼滅储(pkgs);}else{program.outputHelp();}}杩欐牱锛屾垜浠殑宸ュ叿灏卞垱寤哄ソ浜嗭紝澶у涓€璧锋潵璇曡瘯鍚э紙娉ㄦ剰锛氫竴瀹氳鍏坣pm閾炬帴鎴栬€呭畨瑁呮垜浠啓鐨勮繖涓寘濡傛灉涓嶇悊瑙e彲浠ュ厛鐪嬪墠闈㈢殑鏁欑▼锛塩li浣跨敤unnreactreact-domunnnn#杈撳嚭unnnn:Unused鉁卹eact-dom:Used鉂宺eact:Used鉂岄厤缃枃浠朵娇鐢?/names.jsmodule.exports=['react','react-router','react-dom','hahahahahaha'];unn-cnames.js#outputhaha鈥嬧€媓ahahaha:Unused鉁卹eact-dom:Used鉂宺eact:Used鉂宺eact-router:Used鉂孨odeJsapiusing//search.jsconstsearch=require('unused-npm-names');search(['react','react-dom','react-router','unused-npm-names']);nodesearch.js#杈撳嚭unused-npm-names:Used鉂宺eact-router:Used鉂宺eact:Used鉂宺eact-dom:Used鉂屼互涓嬪綋鐒惰繖涓柟娉曚笉鏄?00%鍑嗙‘鐨勶紝鍥犱负鏈夋椂鍊欙紝鍗充娇鍖匢f鍚嶇О鏈鍗犵敤锛屼篃鍙兘浼氭彁绀恒€傚畠涓庣幇鏈夊寘鍚嶇О澶浉浼笺€傚鏋滅郴缁熻姹傛偍鏇存敼鍚嶇О鎴栨坊鍔犺寖鍥达紝鎮ㄥ皢鏃犺兘涓哄姏銆?.鐩稿叧闃呰锛氭墜鎶婃墜鏁欎綘鍐欎竴涓懡浠よ宸ュ叿婧愮爜锛歨ttps://github.com/PengJiyuan...鏈珷缁撴潫