¡¡¡¡¼ò½é
¡¡¡¡±¾ÎĵµÓÐËùÓÐpackage.jsonÖбØÒªµÄÅäÖá£Ëü±ØÐëÊÇÕæÕýµÄjson£¬¶ø²»ÊÇjs¶ÔÏó¡£
¡¡¡¡±¾ÎĵµÖÐÃèÊöµÄºÜ¶àÐÐΪ¶¼ÊÜnpm-config(7)µÄÓ°Ïì¡£
¡¡¡¡Ä¬ÈÏÖµ
¡¡¡¡npm»á¸ù¾Ý°üÄÚÈÝÉèÖÃһЩĬÈÏÖµ¡£
¡¡¡¡
¡¡¡¡Èç¹û°üµÄ¸ùĿ¼ÓÐserver.jsÎļþ£¬npm»áĬÈϽ«startÃüÁîÉèÖÃΪnode server.js¡£
¡¡¡¡"scripts":{"preinstall": "node-waf clean || true; node-waf configure build"}
¡¡¡¡Èç¹û°üµÄ¸ùĿ¼ÓÐwscriptÎļþ£¬npm»áĬÈϽ«preinstallÃüÁîÓÃnode-waf½øÐбàÒë¡£
¡¡¡¡"scripts":{"preinstall": "node-gyp rebuild"}
¡¡¡¡Èç¹û°üµÄ¸ùĿ¼ÓÐbinding.gypÎļþ£¬npm»áĬÈϽ«preinstallÃüÁîÓÃnode-gyp½øÐбàÒë¡£
¡¡¡¡"contributors": [...]
¡¡¡¡Èç¹û°üµÄ¸ùĿ¼ÓÐAUTHORSÎļþ£¬npm»áĬÈÏÖðÐа´Name <email> (url)¸ñʽ´¦Àí£¬ÓÊÏäºÍurlÊÇ¿ÉÑ¡µÄ¡£#ºÅºÍ¿Õ¸ñ¿ªÍ·µÄÐлᱻºöÂÔ¡£
¡¡¡¡name
¡¡¡¡ÔÚpackage.jsonÖÐ×îÖØÒªµÄ¾ÍÊÇnameºÍversion×ֶΡ£ËûÃǶ¼ÊDZØÐëµÄ£¬Èç¹ûûÓоÍÎÞ·¨install¡£nameºÍversionÒ»Æð×é³ÉµÄ±êʶÔÚ¼ÙÉèÖÐÊÇΨһµÄ¡£¸Ä±ä°üÓ¦¸Ãͬʱ¸Ä±äversion¡£
¡¡¡¡nameÊÇÕâ¸ö¶«Î÷µÄÃû×Ö¡£×¢Ò⣺
¡¡¡¡1.²»Òª°Ñnode»òÕßjs·ÅÔÚÃû×ÖÖС£ÒòΪÄãдÁËpackage.jsonËü¾Í±»¼Ù¶¨³ÉΪÁËjs£¬²»¹ýÄã¿ÉÒÔÓá±engine¡±×Ö¶ÎÖ¸¶¨Ò»¸öÒýÇæ£¨¼ûºóÎÄ£©¡£
¡¡¡¡2.Õâ¸öÃû×Ö»á×÷ΪÔÚURLµÄÒ»²¿·Ö¡¢ÃüÁîÐеIJÎÊý»òÕßÎļþ¼ÐµÄÃû×Ö¡£ÈκÎnon-url-safeµÄ×Ö·û¶¼ÊDz»ÄÜÓõġ£
¡¡¡¡3.Õâ¸öÃû×Ö¿ÉÄÜ»á×÷Ϊ²ÎÊý±»´«Èërequire()£¬ËùÒÔËüÓ¦¸Ã±È½Ï¶Ì£¬µ«Ò²ÒªÒâÒåÇåÎú¡£
¡¡¡¡4.ÔÚÄã°®ÉÏÄãµÄÃû×Ö֮ǰ£¬Äã¿ÉÄÜҪȥnpm registry²é¿´Ò»ÏÂÕâ¸öÃû×ÖÊÇ·ñÒѾ±»Ê¹ÓÃÁË¡£http://registry.npmjs.org/
¡¡¡¡version
¡¡¡¡ÔÚpackage.jsonÖÐ×îÖØÒªµÄ¾ÍÊÇnameºÍversion×ֶΡ£ËûÃǶ¼ÊDZØÐëµÄ£¬Èç¹ûûÓоÍÎÞ·¨install¡£nameºÍversionÒ»Æð×é³ÉµÄ±êʶÔÚ¼ÙÉèÖÐÊÇΨһµÄ¡£¸Ä±ä°üÓ¦¸Ãͬʱ¸Ä±äversion¡£
¡¡¡¡version±ØÐëÄܱ»node-semver½âÎö£¬Ëü±»°üÔÚnpmµÄÒÀÀµÖС££¨Òª×Ô¼ºÓÿÉÒÔÖ´ÐÐnpm install semver£©
¡¡¡¡¿ÉÓõġ°Êý×Ö¡±»òÕß¡°·¶Î§¡±¼ûsemver(7).
¡¡¡¡description
¡¡¡¡·Å¼ò½é£¬×Ö·û´®¡£·½±ãŒÅË¿ÃÇÔÚnpm searchÖÐËÑË÷¡£
¡¡¡¡keywords
¡¡¡¡¹Ø¼ü×Ö£¬Êý×é¡¢×Ö·û´®¡£»¹ÊÇ·½±ãŒÅË¿ÃÇÔÚnpm searchÖÐËÑË÷¡£
¡¡¡¡homepage
¡¡¡¡ÏîÄ¿¹ÙÍøµÄurl¡£
¡¡¡¡×¢Ò⣺ÕâºÍ¡°url¡±²»Ò»Ñù¡£Èç¹ûÄã·ÅÒ»¸ö¡°url¡±×ֶΣ¬registry»áÒÔΪÊÇÒ»¸öÌø×ªµ½Äã·¢²¼ÔÚÆäËûµØ·½µÄµØÖ·£¬È»ºóº°Äã¹ö´Ö¡£
¡¡¡¡àÅ£¬¹ö´Ö£¬Ã»¿ªÍæÐ¦¡£
¡¡¡¡bugs
¡¡¡¡ÄãÏîÄ¿µÄÌá½»ÎÊÌâµÄurlºÍ£¨»ò£©ÓʼþµØÖ·¡£Õâ¶ÔÓöµ½ÎÊÌâµÄŒÅË¿ºÜÓаïÖú¡£
¡¡¡¡²î²»¶à³¤ÕâÑù£º
¡¡¡¡
¡¡¡¡Äã¿ÉÒÔÖ¸¶¨Ò»¸ö»òÕßÖ¸¶¨Á½¸ö¡£Èç¹ûÄãÖ»ÏëÌṩһ¸öurl£¬ÄǾͲ»ÓöÔÏóÁË£¬×Ö·û´®¾ÍÐС£
¡¡¡¡Èç¹ûÌṩÁËurl£¬Ëü»á±»npm bugsÃüÁîʹÓá£
¡¡¡¡license
¡¡¡¡ÄãÓ¦¸ÃÒªÖ¸¶¨Ò»¸öÐí¿ÉÖ¤£¬ÈÃÈËÖªµÀʹÓõÄȨÀûºÍÏÞÖÆµÄ¡£
¡¡¡¡×î¼òµ¥µÄ·½·¨ÊÇ£¬¼ÙÈçÄãÓÃÒ»¸öÏñBSD»òÕßMITÕâÑùͨÓõÄÐí¿ÉÖ¤£¬¾ÍÖ»ÐèÒªÖ¸¶¨Ò»¸öÐí¿ÉÖ¤µÄÃû×Ö£¬ÏñÕâÑù£º
¡¡¡¡
¡¡¡¡{ "license" : "BSD" }
¡¡¡¡Èç¹ûÄãÓÖ¸ü¸´ÔÓµÄÐí¿ÉÌõ¼þ£¬»òÕßÏëÒªÌṩ¸ø¸ü¶àµØÏ¸½Ú£¬¿ÉÒÔÕâÑù:
¡¡¡¡
¡¡¡¡"licenses" : [
¡¡¡¡{ "type" : "MyLicense"
¡¡¡¡, "url" : "http://github.com/owner/project/path/to/license"
¡¡¡¡}
¡¡¡¡]
¡¡¡¡ÔÚ¸ùĿ¼ÖÐÌṩһ¸öÐí¿ÉÖ¤ÎļþÒ²ÂùºÃµÄ¡£
¡¡¡¡people fields: author, contributors
¡¡¡¡authorÊÇÒ»¸öÈË¡£contributorsÊÇÒ»¶ÑÈ˵ÄÊý×é¡£personÊÇÒ»¸öÓÐname×ֶΣ¬¿ÉÑ¡µÄÓÐurl¡¢email×ֶεĶÔÏó£¬ÏñÕâÑù£º
¡¡¡¡
¡¡¡¡{ "name" : "Barney Rubble"
¡¡¡¡, "email" : "[email protected]"
¡¡¡¡, "url" : "http://barnyrubble.tumblr.com/"
¡¡¡¡}
¡¡¡¡»òÕß¿ÉÒÔ°ÑËùÓеĶ«Î÷¶¼·Åµ½Ò»¸ö×Ö·û´®Ànpm»á¸øÄã½âÎö£º
¡¡¡¡
¡¡¡¡"Barney Rubble <[email protected]> (http://barnyrubble.tumblr.com/)
¡¡¡¡emailºÍurlÔÚÁ½ÖÖÐÎʽÖж¼ÊÇ¿ÉÑ¡µÄ¡£
¡¡¡¡Ò²¿ÉÒÔÔÚÄãµÄnpmÓû§ÐÅÏ¢ÖÐÉèÖÃÒ»¸ö¶¥¼¶µÄmaintainers×ֶΡ£
¡¡¡¡files
¡¡¡¡filesÊÇÒ»¸ö°üº¬ÏîÄ¿ÖеÄÎļþµÄÊý×é¡£Èç¹ûÃüÃûÁËÒ»¸öÎļþ¼Ð£¬ÄÇÒ²»á°üº¬Îļþ¼ÐÖеÄÎļþ¡££¨³ý·Ç±»ÆäËûÌõ¼þºöÂÔÁË£©
¡¡¡¡ÄãÒ²¿ÉÒÔÌṩһ¸ö.npmignoreÎļþ£¬Èü´Ê¹±»°üº¬ÔÚfiles×Ö¶ÎÖеÃÎļþ±»ÁôÏ¡£Æäʵ¾ÍÏñ.gitignoreÒ»Ñù¡£
¡¡¡¡main
¡¡¡¡main×Ö¶ÎÊÇÒ»¸öÄ£¿éID£¬ËüÊÇÒ»¸öÖ¸ÏòÄã³ÌÐòµÄÖ÷ÒªÏîÄ¿¡£¾ÍÊÇ˵£¬Èç¹ûÄã°üµÄÃû×Ö½Ðfoo£¬È»ºóÓû§°²×°Ëü£¬È»ºórequire("foo")£¬È»ºóÄãµÄmainÄ£¿éµÄexports¶ÔÏó»á±»·µ»Ø¡£
¡¡¡¡ÕâÓ¦¸ÃÊÇÒ»¸öÏà¶ÔÓÚ¸ùĿ¼µÄÄ£¿éID¡£
¡¡¡¡¶ÔÓÚ´ó¶àÊýÄ£¿é£¬ËüÊǷdz£ÓÐÒâÒåµÄ£¬ÆäËûµÄ¶¼Ã»É¶¡£
¡¡¡¡bin
¡¡¡¡ºÜ¶à°ü¶¼ÓÐÒ»¸ö»ò¶à¸ö¿ÉÖ´ÐеÄÎļþÏ£Íû±»·Åµ½PATHÖС£npmÈÃÂèÂèÔÙÒ²²»Óõ£ÐÄÁË£¨Êµ¼ÊÉÏ£¬¾ÍÊÇÕâ¸ö¹¦ÄÜÈÃnpm¿ÉÖ´Ðеģ©¡£
¡¡¡¡ÒªÓÃÕâ¸ö¹¦ÄÜ£¬¸øpackage.jsonÖеÄbin×Ö¶ÎÒ»¸öÃüÁîÃûµ½ÎļþλÖõÄmap¡£³õʼ»¯µÄʱºònpm»á½«ËûÁ´½Óµ½prefix/bin£¨È«¾Ö³õʼ»¯£©»òÕß./node_modules/.bin/£¨±¾µØ³õʼ»¯£©¡£
¡¡¡¡±ÈÈ磬npmÓУº
¡¡¡¡
¡¡¡¡{ "bin" : { "npm" : "./cli.js" } }
¡¡¡¡ËùÒÔ£¬µ±Äã³õʼ»¯npm£¬Ëü»á´´½¨Ò»¸ö·ûºÅÁ´½Óµ½cli.js½Å±¾µ½/usr/local/bin/npm¡£
¡¡¡¡Èç¹ûÄãÖ»ÓÐÒ»¸ö¿ÉÖ´ÐÐÎļþ£¬²¢ÇÒÃû×ֺͰüÃûÒ»Ñù¡£ÄÇôÄã¿ÉÒÔÖ»ÓÃÒ»¸ö×Ö·û´®£¬±ÈÈ磺
¡¡¡¡
¡¡¡¡{ "name": "my-program"
¡¡¡¡, "version": "1.2.5"
¡¡¡¡, "bin": "./path/to/program" }
¡¡¡¡½á¹ûºÍÕâ¸öÒ»Ñù£º
¡¡¡¡
¡¡¡¡{ "name": "my-program"
¡¡¡¡, "version": "1.2.5"
¡¡¡¡, "bin" : { "my-program" : "./path/to/program" } }
¡¡¡¡man
¡¡¡¡Ö¸¶¨Ò»¸öµ¥Ò»µÄÎļþ»òÕßÒ»¸öÎļþÊý×鹩man³ÌÐòʹÓá£
¡¡¡¡Èç¹ûÖ»Ìṩһ¸öµ¥Ò»µÄÎļþ£¬ÄÇôËü³õʼ»¯ºó¾ÍÊÇman <pkgname>µÄ½á¹û£¬¶ø²»¹Üʵ¼ÊµÄÎļþÃûÊÇÉñÂí£¬±ÈÈ磺
¡¡¡¡
¡¡¡¡{ "name" : "foo"
¡¡¡¡, "version" : "1.2.3"
¡¡¡¡, "description" : "A packaged foo fooer for fooing foos"
¡¡¡¡, "main" : "foo.js"
¡¡¡¡, "man" : "./man/doc.1"
¡¡¡¡}
¡¡¡¡ÕâÑùman foo¾Í¿ÉÒÔÓõ½./man/doc.1ÎļþÁË¡£
¡¡¡¡Èç¹ûÎļþÃû²»ÊÇÒÔ°üÃû¿ªÍ·£¬ÄÇôËü»á±»¹ÚÒÔǰ׺£¬ÏÂÃæµÄ£º
¡¡¡¡
¡¡¡¡{ "name" : "foo"
¡¡¡¡, "version" : "1.2.3"
¡¡¡¡, "description" : "A packaged foo fooer for fooing foos"
¡¡¡¡, "main" : "foo.js"
¡¡¡¡, "man" : [ "./man/foo.1", "./man/bar.1" ]
¡¡¡¡}
¡¡¡¡»áΪman fooºÍman foo-bar´´½¨Îļþ¡£
¡¡¡¡manÎļþÐèÒªÒÔÊý×Ö½áÊø£¬È»ºó¿ÉÑ¡µØÑ¹ËõºóÒÔ.gzΪºó׺¡£The number dictates which man section the file is installed into.
¡¡¡¡
¡¡¡¡{ "name" : "foo"
¡¡¡¡, "version" : "1.2.3"
¡¡¡¡, "description" : "A packaged foo fooer for fooing foos"
¡¡¡¡, "main" : "foo.js"
¡¡¡¡, "man" : [ "./man/foo.1", "./man/foo.2" ]
¡¡¡¡}
¡¡¡¡»áΪman fooºÍman 2 foo´´½¨¡£
¡¡¡¡directories
¡¡¡¡CommonJS Packages¹æ·¶ËµÃ÷Á˼¸ÖÖ·½Ê½ÈÃÄã¿ÉÒÔÓÃdirectorieshash±êʾ³ö°üµÃ½á¹¹¡£Èç¹û¿´Ò»ÏÂnpm's package.json£¬Äã»á¿´µ½ÓÐdirectories±êʾ³ödoc, lib, and man¡£
¡¡¡¡ÔÚδÀ´£¬Õâ¸öÐÅÏ¢¿ÉÄܻᱻÓõ½¡£
¡¡¡¡directories.lib
¡¡¡¡¸æËߌÅË¿ÃÇÄãµÄ¿âÎļþ¼ÐÔÚÄÄÀĿǰûÓÐÊ²Ã´ÌØ±ðµÄ¶«Î÷ÐèÒªÓõ½libÎļþ¼Ð£¬µ«È·ÊµÊÇÖØÒªµÄÔªÐÅÏ¢¡£
¡¡¡¡directories.bin
¡¡¡¡Èç¹ûÄãÖ¸¶¨Ò»¸ö¡°bin¡±Ä¿Â¼£¬È»ºóÔÚÄǸöÎļþ¼ÐÖеÃËùÓÐÎļþ¶¼»á±»µ±×ö¡±bin¡±×Ö¶ÎʹÓá£
¡¡¡¡Èç¹ûÄãÒѾָ¶¨ÁË¡°bin¡±×ֶΣ¬ÄÇÕâ¸ö¾ÍÎÞЧ¡£
¡¡¡¡directories.man
¡¡¡¡Ò»¸ö·ÅÂúmanÒ³ÃæµÄÎļþ¼Ð¡£ÌùÐĵش´½¨Ò»¸ö¡°man¡±×ֶΡ£
¡¡¡¡A folder that is full of man pages. Sugar to generate a ¡°man¡± array by
¡¡¡¡walking the folder.
¡¡¡¡directories.doc
¡¡¡¡½«markdownÎļþ·ÅÔÚÕâÀï¡£×îºó£¬ÕâЩ»á±»ºÜºÃµØÕ¹Ê¾³öÀ´£¬Ò²Ðí£¬Ä³Ò»Ìì¡£
¡¡¡¡Put markdown files in here. Eventually, these will be displayed nicely,
¡¡¡¡maybe, someday.
¡¡¡¡directories.example
¡¡¡¡½«ÊÂÀý½Å±¾·ÅÔÚÕâÀijһÌ죬Ëü¿ÉÄÜ»áÒÔ´ÏÃ÷µÄ·½Ê½Õ¹Ê¾³öÀ´¡£
¡¡¡¡repository
¡¡¡¡Ö¸¶¨ÄãµÄ´úÂë´æ·ÅµÄµØ·½¡£Õâ¸ö¶ÔÏ£Íû¹±Ï×µÄÈËÓаïÖú¡£Èç¹ûgit²Ö¿âÔÚgithubÉÏ£¬ÄÇônpm docsÃüÁîÄÜÕÒµ½Äã¡£
¡¡¡¡ÕâÑù×ö£º
¡¡¡¡
¡¡¡¡"repository" :
¡¡¡¡{ "type" : "git"
¡¡¡¡, "url" : "http://github.com/isaacs/npm.git"
¡¡¡¡}
¡¡¡¡"repository" :
¡¡¡¡{ "type" : "svn"
¡¡¡¡, "url" : "http://v8.googlecode.com/svn/trunk/"
¡¡¡¡}
¡¡¡¡URLÓ¦¸ÃÊǹ«¿ªµÄ£¨¼´±ãÊÇÖ»¶ÁµÄ£©ÄÜÖ±½Ó±»Î´¾¹ýÐ޸ĵİ汾¿ØÖƳÌÐò´¦ÀíµÄurl¡£²»Ó¦¸ÃÊÇÒ»¸öhtmlµÄÏîÄ¿Ò³Ãæ¡£ÒòΪËüÊǸø¼ÆËã»ú¿´µÄ¡£
¡¡¡¡scripts
¡¡¡¡¡°scripts¡±ÊÇÒ»¸öÓɽű¾ÃüÁî×é³ÉµÄhash¶ÔÏó£¬ËûÃÇÔÚ°ü²»Í¬µÄÉúÃüÖÜÆÚÖб»Ö´ÐС£keyÊÇÉúÃüÖÜÆÚʼþ£¬valueÊÇÒªÔËÐеÄÃüÁî¡£
¡¡¡¡²Î¼û npm-scripts(7)
¡¡¡¡config
¡¡¡¡¡°config¡± hash¿ÉÒÔÓÃÀ´ÅäÖÃÓÃÓÚ°ü½Å±¾ÖÐµÄ¿ç°æ±¾²ÎÊý¡£ÔÚʵÀýÖУ¬Èç¹ûÒ»¸ö°üÓÐÏÂÃæµÄÅäÖãº
¡¡¡¡
¡¡¡¡{ "name" : "foo"
¡¡¡¡, "config" : { "port" : "8080" } }
¡¡¡¡È»ºóÓÐÒ»¸ö¡°start¡±ÃüÁîÒýÓÃÁËnpm_package_config_port»·¾³±äÁ¿£¬Óû§¿ÉÒÔͨ¹ýnpm config set foo:port 8001À´ÖØÐ´Ëû¡£
¡¡¡¡²Î¼û npm-config(7) ºÍ npm-scripts(7)¡£
¡¡¡¡dependencies
¡¡¡¡ÒÀÀµÊǸøÒ»×é°üÃûÖ¸¶¨°æ±¾·¶Î§µÄÒ»¸öhash¡£Õâ¸ö°æ±¾·¶Î§ÊÇÒ»¸öÓÉÒ»¸ö»ò¶à¸ö¿Õ¸ñ·Ö¸ôµÄ×Ö·û´®¡£ÒÀÀµ»¹¿ÉÒÔÓÃtarball»òÕßgit URL¡£
¡¡¡¡Çë²»Òª½«²âÊÔ»ò¹ý¶ÉÐÔµÄÒÀÀµ·ÅÔÚdependencieshashÖС£¼ûÏÂÎĵÄdevDependencies¡£
¡¡¡¡Ïê¼ûsemver(7).
¡¡¡¡1.version ±ØÐëÍêÈ«ºÍversionÒ»ÖÂ
¡¡¡¡2.>version ±ØÐë±Èversion´ó
¡¡¡¡3.>=version ͬÉÏ
¡¡¡¡4.<version ͬÉÏ
¡¡¡¡5.<=version ͬÉÏ
¡¡¡¡6.~version ´óÔ¼Ò»Ñù£¬¼ûsemver(7)
¡¡¡¡7.1.2.x 1.2.0, 1.2.1, µÈ£¬µ«²»°üÀ¨1.3.0
¡¡¡¡8.http://... ¼ûÏÂÎÄ'ÒÀÀµURL'
¡¡¡¡9.* ËùÓÐ
¡¡¡¡10."" ¿Õ£¬Í¬*
¡¡¡¡11.version1 - version2 ͬ >=version1 <=version2.
¡¡¡¡12.range1 || range2 ¶þѡһ¡£
¡¡¡¡13.git... ¼ûÏÂÎÄ'ÒÀÀµGit URL'
¡¡¡¡14.user/repo ¼ûÏÂÎÄ'GitHub URLs'
¡¡¡¡15.±ÈÈçÏÂÃæ¶¼ÊǺϷ¨µÄ£º
¡¡¡¡
¡¡¡¡{ "dependencies" :
¡¡¡¡{ "foo" : "1.0.0 - 2.9999.9999"
¡¡¡¡, "bar" : ">=1.0.2 <2.1.2"
¡¡¡¡, "baz" : ">1.0.2 <=2.3.4"
¡¡¡¡, "boo" : "2.0.1"
¡¡¡¡, "qux" : "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0"
¡¡¡¡, "asd" : "http://asdf.com/asdf.tar.gz"
¡¡¡¡, "til" : "~1.2"
¡¡¡¡, "elf" : "~1.2.3"
¡¡¡¡, "two" : "2.x"
¡¡¡¡, "thr" : "3.3.x"
¡¡¡¡}
¡¡¡¡}
¡¡¡¡ÒÀÀµURL
¡¡¡¡¿ÉÒÔÖ¸¶¨Ò»¸ötarball URL£¬Õâ¸ötarball½«ÔÚ°ü±»³õʼ»¯µÄʱºòÏÂÔØ²¢³õʼ»¯¡£
¡¡¡¡ÒÀÀµGit URL
¡¡¡¡Git urls ¿ÉÒÔÊÇÏÂÃæ¼¸ÖÖÐÎʽ£º
¡¡¡¡
¡¡¡¡git://github.com/user/project.git#commit-ish
¡¡¡¡git+ssh://user@hostname:project.git#commit-ish
¡¡¡¡git+ssh://user@hostname/project.git#commit-ish
¡¡¡¡git+http://user@hostname/project/blah.git#commit-ish
¡¡¡¡git+https://user@hostname/project/blah.git#commit-ish
¡¡¡¡commit-ishÊÇ¿ÉÒÔ±»git checkoutµÄÈκÎtag¡¢sha»òÕßbranch¡£Ä¬ÈÏΪmaster¡£
¡¡¡¡GitHub URLs
¡¡¡¡1.1.65°æºó£¬Äã¿ÉÒÔ½ö½öÓá°user/foo-project¡±ÒýÓÃGitHub urls£¬±ÈÈ磺
¡¡¡¡
¡¡¡¡{
¡¡¡¡"name": "foo",
¡¡¡¡"version": "0.0.0",
¡¡¡¡"dependencies": {
¡¡¡¡"express": "visionmedia/express"
¡¡¡¡}
¡¡¡¡}
¡¡¡¡devDependencies
¡¡¡¡Èç¹ûÓÐÈ˼ƻ®ÔÚËûÃǵijÌÐòÖÐÏÂÔØ²¢Ê¹ÓÃÄãµÄÄ£¿é£¬ÄÇôËûÃÇ¿ÉÄܲ»Ïë»òÕß²»ÐèҪȥÏÂÔØ²¢¹¹½¨ÄãʹÓõÄÍⲿ²âÊÔ»òÕßÎĵµ¿ò¼Ü¡£
¡¡¡¡ÔÚÕâÖÖÇé¿öÏ£¬Ëü×îºÃ°ÑÕâЩ¸½ÊôµÄÏîÄ¿ÁÐʾÔÚdevDependencies hashÖС£
¡¡¡¡ÕâЩ¶«Î÷»áÔÚ¸ùĿ¼ִÐÐnpm link»òÕßnpm installµÄʱºò³õʼ»¯£¬²¢¿ÉÒÔÏñÆäËûnpmÅäÖòÎÊýÒ»Ñù¹ÜÀí¡£Ïê¼ûnpm-config(7)¡£
¡¡¡¡¶ÔÓÚ·ÇÌØ¶¨Æ½Ì¨µÄ¹¹½¨²½Ö裬±ÈÈç±àÒëCoffeeScript»òÕ߯äËûÓïÑÔµ½Javascript£¬ÓÃprepublish½Å±¾È¥ÊµÏÖ²¢°ÑËû·ÅÔÚdevDependencyÖС£
¡¡¡¡±ÈÈ磺
¡¡¡¡
¡¡¡¡{ "name": "ethopia-waza",
¡¡¡¡"description": "a delightfully fruity coffee varietal",
¡¡¡¡"version": "1.2.3",
¡¡¡¡"devDependencies": {
¡¡¡¡"coffee-script": "~1.6.3"
¡¡¡¡},
¡¡¡¡"scripts": {
¡¡¡¡"prepublish": "coffee -o lib/ -c src/waza.coffee"
¡¡¡¡},
¡¡¡¡"main": "lib/waza.js"
¡¡¡¡}
¡¡¡¡prepublish½Å±¾»áÔÚpublishingǰÔËÐУ¬ÕâÑùÓû§¾Í²»ÓÃ×Ô¼ºÈ¥requireÀ´±àÒë¾ÍÄÜʹÓᣲ¢ÇÒÔÚ¿ª·¢Ä£Ê½ÖУ¨±ÈÈç±¾µØÔËÐÐnpm install£©»áÔËÐÐÕâ¸ö½Å±¾ÒÔ±ã¸üºÃµØ²âÊÔ¡£
¡¡¡¡peerDependencies
¡¡¡¡ÔÚһЩ³¡¾°ÖУ¬ÈçÔÚÒ»¸öhostÖв»±ØÐë½øÐÐrequireʱºò£¬ÄãÏë±íÏÖÄãµÄpackageÓëÒ»¸öhost¹¤¾ß»òÕß¿âµÄ¼æÈݹؼü¡£ÕâÒ»°ãÓÃÀ´ÒýÓòå¼þ¡£ÓÈÆäÊÇÄãµÄÄ£¿é¿ÉÄÜÒª±©Â¶Ò»¸öÌØ¶¨µÄ½Ó¿Ú£¬²¢ÓÉhostÎĵµÀ´Ô¤ÆÚºÍÖ¸¶¨¡£
¡¡¡¡±ÈÈ磺
¡¡¡¡
¡¡¡¡{
¡¡¡¡"name": "tea-latte",
¡¡¡¡"version": "1.3.5"
¡¡¡¡"peerDependencies": {
¡¡¡¡"tea": "2.x"
¡¡¡¡}
¡¡¡¡}
¡¡¡¡ÕâÄܱ£Ö¤ÄãµÄpackage¿ÉÒÔÖ»ºÍteaµÄ2.x°æ±¾Ò»Æð³õʼ»¯¡£npm install tea-latte¿ÉÄÜ»á²úÉúÏÂÃæµÄÒÀÀµ¹ØÏµ
¡¡¡¡
¡¡¡¡â¡±œâ¡±€â¡±€ [email protected]
¡¡¡¡â¡±¡±â¡±€â¡±€ [email protected]
¡¡¡¡ÊÔͼ³õʼ»¯ÁíÒ»¸öÓлá³åÍ»µÄÒÀÀµµÄ²å¼þ½«µ¼ÖÂÒ»¸ö´íÎó¡£Òò´Ë£¬È·±£ÄãµÄ²å¼þµÄÐèÇóÔ¼ÊøÔ½ÈõÔ½ºÃ£¬¶ø²»ÒªÈ¥°ÑËüËø¶¨µ½Ò»¸öÌØ¶¨µÄ°æ±¾¡£
¡¡¡¡¼ÙÉèÕâ¸öhost×ñÊØsemver¹æ·¶£¬Ö»¸Ä±äÕâ¸öpackageµÄÖ÷°æ±¾»á´òÆÆÄãµÄ²å¼þ¡£Òò´Ë£¬Èç¹ûÄãÔÚpackageÖÐÓùýÿ¸ö1.x°æ±¾£¬¾ÍÓá±^1.0¡å»òÕß¡±1.x¡±À´±íʾ¡£Èç¹ûÄãÒÀÀµÓÚ¹¦ÄܽéÉÜ1.5.2£¬Óá±>= 1.5.2 < 2¡å¡£
¡¡¡¡bundledDependencies
¡¡¡¡Ò»×é°üÃû£¬ËûÃÇ»áÔÚ·¢²¼µÄʱºò±»´ò°ü½øÈ¥¡£
¡¡¡¡Æ´³É"bundleDependencies"£¨È±d£©Ò²¿ÉÒÔ¡£
¡¡¡¡optionalDependencies
¡¡¡¡Èç¹ûÒ»¸öÒÀÀµ¿ÉÓ㬵«ÄãÏ£ÍûÔÚËü°²×°´íÎóµÄʱºònpmÒ²ÄܼÌÐø³õʼ»¯£¬ÄÇôÄã¿ÉÒÔ°ÑËü·ÅÔÚoptionalDependencies hashÖС£ÕâÊÇÒ»¸ö°üÃûµ½°æ±¾»òÕßurlµÄmap£¬¾ÍÏñdependencies hashÒ»Ñù¡£Ö»ÊÇËüÔËÐдíÎó¡£
¡¡¡¡´¦Àíȱ·¦ÒÀÀµÒ²ÊÇÄãµÄ³ÌÐòµÄÔðÈΡ£±ÈÈçÏñÕâÑù£º
¡¡¡¡
¡¡¡¡try {
¡¡¡¡var foo = require('foo')
¡¡¡¡var fooVersion = require('foo/package.json').version
¡¡¡¡} catch (er) {
¡¡¡¡foo = null
¡¡¡¡}
¡¡¡¡if ( notGoodFooVersion(fooVersion) ) {
¡¡¡¡foo = null
¡¡¡¡}
¡¡¡¡// .. then later in your program ..
¡¡¡¡if (foo) {
¡¡¡¡foo.doFooThings()
¡¡¡¡}
¡¡¡¡optionalDependencies»á¸²¸ÇdependenciesÖÐͬÃûµÄÏËùÒÔͨ³£±ÈÖ»·ÅÔÚÒ»¸öµØ·½ºÃ¡£
¡¡¡¡engines
¡¡¡¡Äã¿ÉÒÔÖ¸¶¨¹¤×÷µÄnodeµÄ°æ±¾£º
¡¡¡¡
¡¡¡¡{ "engines" : { "node" : ">=0.10.3 <0.12" } }
¡¡¡¡²¢ÇÒ£¬ÏñdependensiesÒ»Ñù£¬Èç¹ûÄã²»Ö¸¶¨°æ±¾»òÕßÖ¸¶¨¡°*¡±×÷Ϊ°æ±¾£¬ÄÇôËùÓа汾µÄnode¶¼¿ÉÒÔ¡£
¡¡¡¡Èç¹ûÖ¸¶¨Ò»¸ö¡°engines¡±×ֶΣ¬ÄÇônpm»áÐèÒªnodeÔÚÀïÃæ£¬Èç¹û¡°engines¡±±»Ê¡ÂÔ£¬npm»á¼Ù¶¨ËüÔÚnodeÉϹ¤×÷¡£
¡¡¡¡ÄãÒ²¿ÉÒÔÓá°engines¡±×Ö¶ÎÀ´Ö¸¶¨ÄÄÒ»¸önpm°æ±¾ÄܸüºÃµØ³õʼ»¯ÄãµÄ³ÌÐò£¬È磺
¡¡¡¡
¡¡¡¡{ "engines" : { "npm" : "~1.0.20" } }
¡¡¡¡¼Çס£¬³ý·ÇÓû§ÉèÖÃengine-strict±ê¼Ç£¬Õâ¸ö×Ö¶ÎÖ»Êǽ¨ÒéÖµ¡£
¡¡¡¡engineStrict
¡¡¡¡Èç¹ûÄãÈ·¶¨ÄãµÄÄ£¿éÒ»¶¨²»»áÔËÐÐÔÚÄãÖ¸¶¨°æ±¾Ö®ÍâµÄnode»òÕßnpmÉÏ£¬Äã¿ÉÒÔÔÚpackage.jsonÎļþÖÐÉèÖÃ"engineStrict":true¡£Ëü»áÖØÐ´Óû§µÄengine-strictÉèÖá£
¡¡¡¡³ý·ÇÄã·Ç³£·Ç³£È·¶¨£¬·ñÔò²»ÒªÕâÑù×ö¡£Èç¹ûÄãµÄengines hash¹ý¶ÈµØÏÞÖÆ£¬ºÜ¿ÉÄÜÇáÒ×ÈÃ×Ô¼ºÏÝÈë¾½¾³¡£É÷ÖØµØ¿¼ÂÇÕâ¸öÑ¡Ôñ¡£Èç¹û´ó¼ÒÀÄÓÃËü£¬Ëü»áÔÙÒÔºóµÄnpm°æ±¾Öб»É¾³ý¡£
¡¡¡¡os
¡¡¡¡Äã¿ÉÒÔÖ¸¶¨ÄãµÄÄ£¿éÒªÔËÐÐÔÚÄÄЩ²Ù×÷ϵͳÖУº
¡¡¡¡
¡¡¡¡"os" : [ "darwin", "linux" ]
¡¡¡¡ÄãÒ²¿ÉÒÔÓúÚÃûµ¥´úÌæ°×Ãûµ¥£¬ÔÚÃû×ÖÇ°Ãæ¼ÓÉÏ¡°!¡±¾Í¿ÉÒÔÁË£º
¡¡¡¡
¡¡¡¡"os" : [ "!win32" ]
¡¡¡¡²Ù×÷ϵͳÓÃprocess.platformÀ´Ì½²â¡£
¡¡¡¡ËäȻûÓкܺõØÀíÓÉ£¬µ«ËüÊÇͬʱ֧³ÖºÚÃûµ¥ºÍ°×Ãûµ¥µÄ¡£
¡¡¡¡cpu
¡¡¡¡Èç¹ûÄãµÄ´úÂëÖ»ÄÜÔËÐÐÔÚÌØ¶¨µÄcpu¼Ü¹¹Ï£¬Äã¿ÉÒÔÖ¸¶¨Ò»¸ö£º
¡¡¡¡
¡¡¡¡"cpu" : [ "x64", "ia32" ]
¡¡¡¡¾ÍÏñosÑ¡ÏÄãÒ²¿ÉÒÔºÚÒ»¸ö¼Ü¹¹£º
¡¡¡¡
¡¡¡¡"cpu" : [ "!arm", "!mips" ]
¡¡¡¡cpu¼Ü¹¹ÓÃprocess.arch̽²â¡£
¡¡¡¡preferGlobal
¡¡¡¡Èç¹û°üÖ÷ÒªÊÇÐèҪȫ¾Ö°²×°µÄÃüÁîÐгÌÐò£¬¾ÍÉèÖÃËüΪtrueÀ´Ìṩһ¸öwarning¸øÖ»ÔÚ¾Ö²¿°²×°µÄÈË¡£
¡¡¡¡Ëü²»»áÕæÕýµÄ·ÀÖ¹Óû§ÔÚ¾Ö²¿°²×°£¬µ«Èç¹ûËüûÓа´Ô¤ÆÚ¹¤×÷Ëü»á°ïÖú·ÀÖ¹²úÉúÎó»á¡£
¡¡¡¡private
¡¡¡¡Èç¹ûÄãÉèÖÃ"private": true£¬npm¾Í²»»á·¢²¼Ëü¡£
¡¡¡¡ÕâÊÇÒ»¸ö·ÀÖ¹ÒâÍâ·¢²¼Ë½ÓпâµÄ·½Ê½¡£Èç¹ûÄãҪȷ¶¨¸ø¶¨µÄ°üÊÇÖ»·¢²¼ÔÚÌØ¶¨registry£¨ÈçÄÚ²¿registry£©µÄ£¬ÓÃpublishConfighashµÄÃèÊöÀ´ÖØÐ´registryµÄpublish-timeÅäÖòÎÊý¡£
¡¡¡¡publishConfig
¡¡¡¡ÕâÊÇÒ»¸öÔÚpublish-timeʹÓõÄÅäÖü¯ºÏ¡£µ±ÄãÏëÉèÖÃtag»òÕßregistryµÄʱºòËü·Ç³£ÓÐÓã¬ËùÒÔÄã¿ÉÒÔÈ·¶¨Ò»¸ö¸ø¶¨µÄ°üûÓдòÉÏ¡°lastest¡±µÄtag»òÕß±»Ä¬ÈÏ·¢²¼µ½È«¾ÖµÄ¹«¿ªregistry¡£
¡¡¡¡ÈκÎÅäÖö¼¿ÉÒÔ±»ÖØÐ´£¬µ«µ±È»¿ÉÄÜÖ»ÓС°tag¡±ºÍ¡°registry¡±Óë·¢²¼µÄÒâͼÓйء£
¡¡¡¡²Î¼ûnpm-config(7)ÓпÉÒÔ±»ÖØÐ´µÄÁÐ±í¡£