编辑“︁
Node.js
”︁
跳转到导航
跳转到搜索
Template:Editnotice load/content
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{NoteTA |G1 = IT |G2 = FL |1=zh-cn:包管理器;zh-tw:套件管理器; }} {{Infobox software | name = Node.js | logo = Node.js logo.svg | screenshot = | caption = | author = [[瑞安·達爾]] | developer = {{link-en|OpenJS Foundation}} | released = {{Start date and age|2009|05|28}}<ref>{{cite web |script-title=en:Release v0.0.1 · nodejs/node |url=https://github.com/nodejs/node/releases/tag/v0.0.1 |author=Ry Dahl |date=28 May 2009 |website=GitHub |language=en |access-date=2019-12-24 |quote=First! |archive-date=2020-04-09 |archive-url=https://web.archive.org/web/20200409035016/https://github.com/nodejs/node/releases/tag/v0.0.1 |dead-url=no }}</ref> | programming language = [[C语言|C]]、[[C++]]、[[JavaScript]] | operating system = [[macOS]], [[Linux]], [[Windows]], [[FreeBSD]], [[OpenBSD]]<ref name="supportedOS">{{cite web|url=https://github.com/nodejs/node/blob/master/BUILDING.md|title=nodejs/node|website=GitHub|accessdate=2019-04-09|archive-date=2019-04-22|archive-url=https://web.archive.org/web/20190422145625/https://github.com/nodejs/node/blob/master/BUILDING.md|dead-url=no}}</ref> | genre = [[事件驅動程式設計|事件驅動]]網路 }} '''Node.js''' 是[[跨平台]]、[[开放源代码|开源]]的 [[JavaScript]] [[运行时系统|运行环境]],可在 [[Windows]]、[[Linux]]、[[macOS]] 等操作系统上运行。Node.js 由 OpenJS Foundation<ref>{{cite web|title=Node.js Foundation and JS Foundation Merge to Form OpenJS Foundation|url=https://www.linuxfoundation.org/press-release/2019/03/node-js-foundation-and-js-foundation-merge-to-form-openjs-foundation/|author=The Linux Foundation|date=March 12, 2019|publisher=The Linux Foundation|language=en|dead-url=no|quote='''OPEN SOURCE LEADERSHIP SUMMIT, Half Moon Bay, Calif. — March 12, 2019 — '''The Node.js Foundation and the JS Foundation today announced they are merging to form the OpenJS Foundation.|website=Linux Foundation|access-date=2019-12-24|archive-date=2020-08-03|archive-url=https://web.archive.org/web/20200803060425/https://www.linuxfoundation.org/press-release/2019/03/node-js-foundation-and-js-foundation-merge-to-form-openjs-foundation/}}<br />{{cite web|url=https://medium.com/@nodejs/introducing-the-openjs-foundation-the-next-phase-of-javascript-ecosystem-growth-d4911b42664f|author=Node.js|date=Mar 13, 2019|language=en|dead-url=no|quote=the Node.js Foundation and the JS Foundation are merging to form the OpenJS Foundation.|script-title=en:Introducing the OpenJS Foundation: The Next Phase of JavaScript Ecosystem Growth|website=Medium|access-date=2019-12-24|archive-date=2019-12-06|archive-url=https://web.archive.org/web/20191206010727/https://medium.com/@nodejs/introducing-the-openjs-foundation-the-next-phase-of-javascript-ecosystem-growth-d4911b42664f}}</ref> (原為 Node.js Foundation,已与 JS Foundation 合并)持有和維護<ref>{{cite web |url=https://nodejs.org/foundation/ |script-title=en:Node.js Foundation |language=en |website=Node.js |accessdate=4 July 2015 |archive-date=2015-07-05 |archive-url=https://web.archive.org/web/20150705002912/https://nodejs.org/foundation/ |dead-url=yes }}</ref>,亦为 [[Linux 基金會]]的项目<ref>{{cite web |url=http://collabprojects.linuxfoundation.org/ |script-title=en:Linux Foundation Collaborative Projects |website=Linux Foundation |language=en |publisher= |accessdate=4 July 2015 |archive-date=2016-03-07 |archive-url=https://web.archive.org/web/20160307095757/http://collabprojects.linuxfoundation.org/ |dead-url=yes }}<br>{{cite web |url=https://www.linuxfoundation.cn/projects/ |script-title=en:Open Source Projects |website=Linux 基金会 |language=zh-cn |accessdate=2019-12-24 |archive-date=2019-12-23 |archive-url=https://web.archive.org/web/20191223223411/https://linuxfoundation.cn/projects/ |dead-url=no }}</ref>。Node.js 採用 [[Google]] 開發的 [[V8 (JavaScript引擎)|V8]] 執行程式碼,使用[[事件驅動]]和[[異步IO|非同步輸入輸出]]模型等技術來提高效能,可優化應用程式的傳輸量和規模。這些技術通常用於資料密集的即時應用程式。 Node.js 大部分基本模組都用 JavaScript 語言編寫。在 Node.js 出現之前,JavaScript 通常作為用戶端程式設計語言使用,以JavaScript 寫出的程式常在用戶的瀏覽器上執行。Node.js 的出現使 JavaScript 也能用於伺服器端編程。Node.js 含有一系列內置模組,使得程式可以脫離 [[Apache HTTP Server]] 或 [[網際網路資訊服務|IIS]],作為獨立伺服器執行。 目前,Node.js 已被[[IBM]]<ref>{{cite web |url = http://www.ibm.com/bluemix |title = IBM Bluemix |publisher = |accessdate = 4 July 2015 |archive-date = 2019-10-18 |archive-url = https://web.archive.org/web/20191018225043/https://www.ibm.com/cloud |dead-url = no }}</ref>、[[Microsoft]]<ref name="guardianMS">{{cite web | url=http://www.guardian.co.uk/technology/blog/2011/nov/09/programming-microsoft | title=Here's why you should be happy that Microsoft is embracing Node.js | publisher=The Guardian | date=November 9, 2011 | accessdate=May 10, 2012 | archive-date=2013-07-25 | archive-url=https://web.archive.org/web/20130725002144/http://www.guardian.co.uk/technology/blog/2011/nov/09/programming-microsoft | dead-url=no }}</ref><ref>{{cite web |url = http://www.hanselman.com/blog/WebMatrix2FrontEndWebDevelopersTakeNoteASPNETPHPNodejsAndMore.aspx |title = WebMatrix - Front End Web Developers take note(ASP.NET, PHP, node.js and more) |accessdate = 2 August 2014 |archive-date = 2015-08-03 |archive-url = https://web.archive.org/web/20150803060901/http://www.hanselman.com/blog/WebMatrix2FrontEndWebDevelopersTakeNoteASPNETPHPNodejsAndMore.aspx |dead-url = yes }}</ref>、[[Yahoo!]]<ref>{{cite web | url = https://developer.yahoo.com/blogs/ydn/yahoo-announces-cocktails-shaken-not-stirred-51439/ | title = Yahoo! Announces Cocktails Shaken, Not Stirred | accessdate = 7 April 2015 | deadurl = yes | archiveurl = https://archive.today/20150408022733/https://developer.yahoo.com/blogs/ydn/yahoo-announces-cocktails-shaken-not-stirred-51439/ | archivedate = 2015年4月8日 }}</ref>、[[Walmart]]<ref name="vbwalmart">{{cite web | url=http://venturebeat.com/2012/01/24/why-walmart-is-using-node-js/ | title=Why Walmart is using Node.js | publisher=VentureBeat | date=January 24, 2012 | accessdate=May 10, 2012 | archive-date=2015-08-29 | archive-url=https://web.archive.org/web/20150829070531/http://venturebeat.com/2012/01/24/why-walmart-is-using-node-js/ | dead-url=no }}</ref>、[[Groupon]]<ref>{{cite web |last=Geitgey |first=Adam |title=I-Tier: Dismantling the Monoliths |url=https://engineering.groupon.com/2013/misc/i-tier-dismantling-the-monoliths/ |publisher=Groupon |accessdate=30 April 2014 |date=30 October 2013 |archive-date=2015-09-10 |archive-url=https://web.archive.org/web/20150910022429/https://engineering.groupon.com/2013/misc/i-tier-dismantling-the-monoliths/ |dead-url=yes }}</ref>、[[SAP SE|SAP]]<ref name="sapappbuilder">{{cite web | url=http://help.sap.com/appbuilder | title=SAP AppBuilder | publisher=SAP | date=March 10, 2014 | accessdate=March 10, 2014 | archive-date=2015-08-17 | archive-url=https://web.archive.org/web/20150817035014/http://help.sap.com/appbuilder | dead-url=no }}</ref>、[[LinkedIn]]<ref name="vbliipad">{{cite web | url=http://venturebeat.com/2012/05/02/linkedin-ipad-app-engineering/ | title=You'll never believe how LinkedIn built its new iPad app | publisher=VentureBeat | date=May 2, 2012 | accessdate=May 10, 2012 | archive-date=2015-08-12 | archive-url=https://web.archive.org/web/20150812000340/http://venturebeat.com/2012/05/02/linkedin-ipad-app-engineering/ | dead-url=no }}</ref><ref>{{cite web | url=http://engineering.linkedin.com/nodejs/blazing-fast-nodejs-10-performance-tips-linkedin-mobile | title=Blazing fast node.js: 10 performance tips from LinkedIn Mobile | accessdate=7 April 2015 | archive-date=2015-09-10 | archive-url=https://web.archive.org/web/20150910183302/http://engineering.linkedin.com/nodejs/blazing-fast-nodejs-10-performance-tips-linkedin-mobile | dead-url=yes }}</ref>、[[Rakuten]]、[[PayPal]]<ref>{{cite web | url=http://www.youtube.com/watch?v=tZWGb0HU2QM | title=Clash of the Titans: Releasing the Kraken, NodeJS @paypal | publisher=fluentconf.com | date=May 28, 2013 | accessdate=September 11, 2013 | archive-date=2015-07-25 | archive-url=https://web.archive.org/web/20150725155640/https://www.youtube.com/watch?v=tZWGb0HU2QM | dead-url=no }}</ref><ref>{{cite web | url=https://github.com/joyent/node/wiki/Projects,-Applications,-and-Companies-Using-Node | title=All such companies and their products in which Node.js is used | accessdate=2 August 2014 | archive-date=2015-08-10 | archive-url=https://web.archive.org/web/20150810020430/https://github.com/joyent/node/wiki/Projects,-Applications,-and-Companies-Using-Node | dead-url=no }}</ref>、[[Voxer]]<ref>[http://www.theregister.co.uk/2011/03/01/the_rise_and_rise_of_node_dot_js/ The Node Ahead: JavaScript leaps from browser into future] {{Wayback|url=http://www.theregister.co.uk/2011/03/01/the_rise_and_rise_of_node_dot_js/ |date=20181106232718 }}, [[The Register]], March 1, 2011</ref>、[[GoDaddy]]<ref>[http://venturebeat.com/2015/02/10/why-godaddys-nodejitsu-deal-is-great-for-node-js/ Why GoDaddy’s Nodejitsu deal is great for Node.js] {{Wayback|url=http://venturebeat.com/2015/02/10/why-godaddys-nodejitsu-deal-is-great-for-node-js/ |date=20150829070538 }} , [[VentureBeat]], February 10, 2015</ref>等企業採用。 ==概覽== Node.js可透過[[JavaScript]]和一系列模块来编写[[服务器]]端应用和网络相关的应用。<ref name="b2"/><ref name="b4"/><ref name="b5">[https://books.google.com/books?id=G1y_5kpmatUC&printsec=frontcover&dq=nodejs&hl=en&sa=X#v=onepage&q=nodejs&f=false Smashing Node.js: JavaScript Everywhere] {{Wayback|url=https://books.google.com/books?id=G1y_5kpmatUC&printsec=frontcover&dq=nodejs&hl=en&sa=X#v=onepage&q=nodejs&f=false |date=20150623064039 }} , John Wiley & Sons, 14-Aug-2012</ref>核心模組包括[[文件系统]]I/O、网络([[HTTP]]、[[传输控制协议|TCP]]、[[用户数据报协议|UDP]]、[[DNS]]、[[傳輸層安全協議|TLS/SSL]]等)、[[二进制]]数据流、[[加密]]算法、[[数据流]]等等。<ref name="b4"/><ref>[https://nodejs.org/api/ Modules] {{Wayback|url=https://nodejs.org/api/ |date=20150810015746 }} }, Nodejs Website</ref>Node模块的API形式简单,降低了编程的复杂度。<ref name="b4">[https://books.google.com/books?id=zl17BAAAQBAJ&dq=nodejs&hl=en&sa=X Node.js Essentials] {{Wayback|url=https://books.google.com/books?id=zl17BAAAQBAJ&dq=nodejs&hl=en&sa=X |date=20150713182017 }} , Packt Publishing, 09-Sep-2014</ref> 使用框架可以加速开发。常用的框架有[[Express.js]]、[[Socket.IO]]和Connect等。<ref name="b7">{{Cite book | url = https://books.google.com/books?id=5eGRAwAAQBAJ&printsec=frontcover&dq=nodejs&hl=en&sa=X#v=onepage&q=nodejs&f=false | title = Express.js Guide: The Comprehensive Book on Express.js | author = Azat Mardan | publisher = Azat Mardan, 2014 | date =2014-05-28| access-date = 2015-08-14 | archive-date = 2015-07-13 | archive-url = https://web.archive.org/web/20150713154403/https://books.google.com/books?id=5eGRAwAAQBAJ&printsec=frontcover&dq=nodejs&hl=en&sa=X#v=onepage&q=nodejs&f=false | dead-url = no }}</ref>Node.js的程序可以在[[Microsoft Windows]]、[[Linux]]、[[Unix]]、[[Mac OS X]]等服务器上运行。Node.js也可以使用[[CoffeeScript]](一种旨在简化JavaScript的替代语言,其代码可按照一定规则转化为合法的JavaScript代码)、[[TypeScript]](微软开发的强化了数据类型的JavaScript变体)、[[Dart]]语言,以及其他能够编译成JavaScript的语言编程。<ref name="b6">{{cite web |url=https://books.google.com/books?id=Oda-MgEACAAJ&dq=nodejs&hl=en&sa=X |title=CoffeeScript on Node.js |publisher=O'Reilly Media, Inc. |date=April 15, 2013 |accessdate=May 17, 2015 |archive-date=2015-07-02 |archive-url=https://web.archive.org/web/20150702002705/https://books.google.com/books?id=Oda-MgEACAAJ&dq=nodejs&hl=en&sa=X |dead-url=no }}</ref><ref name="b6"/> Node.js主要用于编写像Web服务器一样的网络应用,这和[[PHP]]和[[Python]]是类似的。<ref name="b2">[https://books.google.com/books?id=KZQQAlhTOBgC&printsec=frontcover&dq=nodejs&hl=en&sa=X#v=onepage&q=nodejs&f=false Node.js for PHP Developers] {{Wayback|url=https://books.google.com/books?id=KZQQAlhTOBgC&printsec=frontcover&dq=nodejs&hl=en&sa=X#v=onepage&q=nodejs&f=false |date=20151110115410 }} , O'Reilly Media, Inc., 2013</ref>但是Node.js与其他语言最大的不同之处在于,PHP等语言是阻塞的(只有前一条命令执行完毕才会执行后面的命令),而Node.js是[[異步IO|非阻塞]]的(多条命令可以同时被运行,通过[[回调函数]]得知命令已结束运行)。<ref name="b2"/> Node.js是[[事件驱动]]的。开发者可以在不使用[[线程]]的情况下开发出一个能够承载高并发的服务器。其他服务器端语言难以开发高并发应用,而且即使开发出来,性能也不尽如人意。Node.js正是在这个前提下被创造出来。Node.js把JavaScript的易学易用和Unix網路编程的强大结合起來。 Node.js使用[[Google]] [[V8 (JavaScript引擎)|V8 JavaScript引擎]],因为: * V8是基于[[BSD许可证]]的开源软件 * V8速度非常快 Node.js已经有数十万模組,它们可以透过一个名为[[npm]]的管理器免费下载。Node.js开发社区主要有两个邮件列表、一个在[[freenode]]的名为#node.js的[[IRC]]频道。社区集中在NodeConf<ref>[http://nodeconf.com/ NodeConf] {{Wayback|url=http://nodeconf.com/ |date=20110823085137 }}</ref><ref>{{cite web | url=http://www.readwriteweb.com/hack/2011/04/nodeconf-schedule-announced.php | title=NodeConf Schedule Announced | publisher=ReadWriteHack | date=April 7, 2011 | accessdate=2 August 2014 | author=Finley, Klint | deadurl=yes | archiveurl=https://web.archive.org/web/20120917214119/http://www.readwriteweb.com/hack/2011/04/nodeconf-schedule-announced.php | archivedate=2012年9月17日 }}</ref>。 ==歷史== [[File:Ryan Dahl.jpg|thumb|Node.js的创始人[[瑞安·達爾]],摄于2010年]] Node.js于2009年写成,原始作者是美國軟體工程師[[瑞安·達爾]]({{lang|en|Ryan Dahl}})<ref name="training.com">{{cite web|title=About Node.js, and why you should add Node.js to your skill set?|url=http://blog.training.com/2016/09/about-nodejs-and-why-you-should-add.html|website=Training.com|publisher=Training.com|accessdate=23 October 2016|ref=training.com|archive-date=2017-04-01|archive-url=https://web.archive.org/web/20170401061100/http://blog.training.com/2016/09/about-nodejs-and-why-you-should-add.html|dead-url=yes}}</ref>。Node.js结合了[[Google]]的[[V8 (JavaScript引擎)|V8]]、事件驱动模式和低级[[I/O]][[应用程序接口|接口]]<ref name="b1">[https://books.google.com/books?id=ZH6bpbcrlvYC&printsec=frontcover&dq=nodejs&hl=en&sa=X#v=onepage&q=nodejs&f=false Professional Node.js: Building JavaScript Based Scalable Software] {{Wayback|url=https://books.google.com/books?id=ZH6bpbcrlvYC&printsec=frontcover&dq=nodejs&hl=en&sa=X#v=onepage&q=nodejs&f=false |date=20170324021220 }} , John Wiley & Sons, 01-Oct-2012</ref>,其设计灵感源自[[Flickr]]的一款上传进度栏:在上传过程中,浏览器并不清楚有多少文件已经发送到服务器,除非向服务器进行查询,于是达尔想出了一个更简便的方法<ref>{{cite web|url=http://devopsangle.com/2013/04/01/the-birth-of-node-where-did-it-come-from-creator-ryan-dahl-shares-the-history/|title=The Birth of Node: Where Did it Come From? Creator Ryan Dahl Shares the History|last=Harris|first=Amber|date=April 1, 2012|publisher=Devops Angle|accessdate=26 October 2013|archive-date=2014-10-18|archive-url=https://web.archive.org/web/20141018133031/http://devopsangle.com/2013/04/01/the-birth-of-node-where-did-it-come-from-creator-ryan-dahl-shares-the-history/|dead-url=yes}}</ref>。Node.js的开发和维护工作由达尔本人主持,而他所在的[[Joyent]]公司也提供了赞助<ref name="Google Groups post by Ryan Dahl about Joyent">{{cite web|url= https://groups.google.com/forum/#!topic/nodejs/lWo0MbHZ6Tc|title= Joyent and Node|author= Ryan Dahl|publisher= Google Groups|date= 2010-11-09|accessdate= 2015-02-05|archive-date= 2011-01-22|archive-url= http://arquivo.pt/wayback/20110122130054/https://groups.google.com/forum/#!topic/nodejs/lWo0MbHZ6Tc|dead-url= no}}</ref>。2009年11月8日,達爾在欧洲JSConf大会上展示了Node.js项目<ref name="b3">[https://books.google.com/books?id=KGt-FxUEj48C&pg=PT24&dq=nodejs&hl=en&sa=X#v=onepage&q=nodejs&f=false Sams Teach Yourself Node.js in 24 Hours] {{Wayback|url=https://books.google.com/books?id=KGt-FxUEj48C&pg=PT24&dq=nodejs&hl=en&sa=X#v=onepage&q=nodejs&f=false |date=20170323192039 }} , Sams Publishing, 05-Sep-2012</ref><ref>{{cite web|url=http://jsconf.eu/2009/speaker/speakers_selected.html|title=Ryan Dahl at JSConf EU 2009|accessdate=2017-05-04|archive-date=2017-05-14|archive-url=https://web.archive.org/web/20170514211032/http://www.jsconf.eu/2009/speaker/speakers_selected.html|dead-url=yes}}</ref><ref>{{cite web|url=https://www.youtube.com/watch?v=ztspvPYybIY|title=Ryan Dahl at JSConf EU 2009 Video|accessdate=2017-05-04|archive-date=2017-05-15|archive-url=https://web.archive.org/web/20170515113946/https://www.youtube.com/watch?v=ztspvPYybIY|dead-url=no}}</ref>,并受到了观众赞赏<ref>{{cite web|url=http://www.jsconf.eu/2009/video_nodejs_by_ryan_dahl.html|title=Video: Node.js by Ryan Dahl|publisher=|accessdate=2017-05-04|archive-date=2017-05-11|archive-url=https://web.archive.org/web/20170511080211/http://www.jsconf.eu/2009/video_nodejs_by_ryan_dahl.html|dead-url=no}}</ref>。在演讲中,达尔针对[[Apache HTTP Server]]和顺序编程方式提出了批评,认为Apache处理大量并发连接(10,000甚至更多)的可能性有限,而且顺序编程方式在多连接情况下会造成阻塞,或者消耗更多资源;而Node.js提供了基于事件驱动和非阻塞的接口,可用于编写高并发状态下的程序,而且JavaScript的匿名函数、闭包、回调函数等特性就是为事件驱动而设计的<ref>{{cite web | url=https://belitsoft.com/php-development-services/php7-vs-nodejs | title=PHP 7 vs Node.js? They Can Be Partners, Not Competitors For a Developer! | accessdate=21 December 2016 | archive-date=2017-02-23 | archive-url=https://web.archive.org/web/20170223211427/https://belitsoft.com/php-development-services/php7-vs-nodejs | dead-url=yes }}</ref>。 2010年1月,一款名为“[[npm]]”的[[软件包管理系统]]诞生<ref>{{cite web |url=https://github.com/npm/npm/releases?after=v0.1.1 |title=Earliest releases of npm |website=GitHub |accessdate=27 July 2016 |archive-date=2017-03-01 |archive-url=https://web.archive.org/web/20170301204041/https://github.com/npm/npm/releases?after=v0.1.1 |dead-url=no }}</ref>。npm使程序员能够更方便地发布和分享Node.js类库及源代码,而且简化了类库安装、升级与卸载的过程<ref name="b1"/>。Node.js最初只支持Linux和Mac OS X操作系统。2011年6月,微软和Joyent共同合作,把Node.js移植到了Windows系统上面<ref>{{cite web | url=https://nodejs.org/en/blog/uncategorized/porting-node-to-windows-with-microsofts-help/ | title=Porting Node to Windows With Microsoft's Help | accessdate=17 April 2016 | archive-date=2017-07-14 | archive-url=https://web.archive.org/web/20170714094815/https://nodejs.org/en/blog/uncategorized/porting-node-to-windows-with-microsofts-help/ | dead-url=yes }}</ref>,并且在7月发布了第一个正式支持Windows系统的版本。 2012年1月,达尔离开了Node.js项目,开发工作由他的同事以及npm创始人艾薩克·施呂特(Isaac Schlueter)继续主持<ref>{{cite web|url=//groups.google.com/forum/#!topic/nodejs/hfajgpvGTLY|title=New gatekeeper|last=Dahl|first=Ryan|accessdate=26 October 2013|archive-date=2011-01-22|archive-url=http://arquivo.pt/wayback/20110122130054/https://groups.google.com/forum/#!topic/nodejs/hfajgpvGTLY|dead-url=no}}</ref>。2014年2月,蒂莫西·费里斯(Timothy J. Fontaine)接任项目主管<ref>{{cite web|url=https://nodejs.org/en/blog/uncategorized/tj-fontaine-new-node-lead/|title=The Next Phase of Node.js|last=Schlueter|first=Isaac|date=January 15, 2014|accessdate=21 January 2014|archive-date=2017-07-14|archive-url=https://web.archive.org/web/20170714094920/https://nodejs.org/en/blog/uncategorized/tj-fontaine-new-node-lead/|dead-url=yes}}</ref>。 由于长期对Joyent的管理感到不满,Node.js核心开发者Fedor Indutny在2014年12月制作了[[复刻 (软件工程)|分支]]版本,并起名“io.js”。与Node.js相对的是,io.js采用开放管理模式进行管理<ref name="Krill, Paul">{{cite web | url=http://www.javaworld.com/article/2855639/open-source-tools/qanda-why-io-js-decided-to-fork-node-js.html | title=Why io.js Decided to Fork Node.js | publisher=JavaWorld | date=Dec 4, 2014 | accessdate=Dec 15, 2014 | author=Krill, Paul | archive-date=2017-06-30 | archive-url=https://web.archive.org/web/20170630072910/http://www.javaworld.com/article/2855639/open-source-tools/qanda-why-io-js-decided-to-fork-node-js.html | dead-url=yes }}</ref><ref name="iwtw">[http://www.infoworld.com/article/2855057/application-development/why-iojs-decided-to-fork-nodejs.html Q&A: Why io.js decided to fork Node.js] {{Wayback|url=http://www.infoworld.com/article/2855057/application-development/why-iojs-decided-to-fork-nodejs.html |date=20181106221731 }} , [[Infoworld]] Tech Watch</ref>,并计划始终采用最新版的[[V8 (JavaScript引擎)|V8引擎]]<ref>{{cite web | url=https://code.google.com/p/v8/issues/detail?id=3692#c3 | title=Issue 3692: function suddenly becomes | publisher=V8 JavaScript Engine Issues | author=Ben Noordhuis | date=Nov 12, 2014 | accessdate=2 February 2015 | archive-date=2015-11-01 | archive-url=https://web.archive.org/web/20151101215434/https://code.google.com/p/v8/issues/detail?id=3692#c3 | dead-url=no }}</ref><ref name="Mikeal, Rogers">{{cite web | url=https://medium.com/node-js-javascript/state-of-io-js-2b3094e6f923 | title=State of io.js | date=January 28, 2015 | accessdate=2 February 2015 | author=Mikeal, Rogers | archive-date=2015-08-30 | archive-url=https://web.archive.org/web/20150830022140/https://medium.com/node-js-javascript/state-of-io-js-2b3094e6f923 | dead-url=no }}</ref>。为了在用户、厂商和开发者之间取得平衡,Node.js基金会于2015年初成立。基金会得到了IBM、Intel、微软、Joyent等公司的支持。6月,Node.js和io.js开发者社区共同决定合并到Node.js基金会之下<ref>{{cite web|url=https://www.linuxfoundation.org/news-media/announcements/2015/06/nodejs-foundation-advances-community-collaboration-announces-new|title=Node.js Foundation Advances Community Collaboration, Announces New Members and Ratified Technical Governance|publisher=|accessdate=4 July 2015|deadurl=yes|archiveurl=https://web.archive.org/web/20150624075643/http://www.linuxfoundation.org/news-media/announcements/2015/06/nodejs-foundation-advances-community-collaboration-announces-new|archivedate=2015年6月24日}}</ref>。同年9月,Node 4.0发布,Node.js和io.js正式合并<ref name="#1">{{cite web|url=https://nodejs.org/en/blog/announcements/foundation-v4-announce/|title=Node.js Foundation Combines Node.js and io.js Into Single Codebase in New Release|publisher=|accessdate=28 Jan 2016|archive-date=2017-01-07|archive-url=https://web.archive.org/web/20170107002048/https://nodejs.org/en/blog/announcements/foundation-v4-announce/|dead-url=yes}}</ref>。4.0版引入了[[ES6]]的语言特性和“长期支持版本”的发布周期<ref name="#1"/>。到了2016年,io.js宣布不再发布新版本,并建议开发者换回Node.js<ref>[https://iojs.org/en/ Io.js, JavaScript I/O] {{Wayback|url=https://iojs.org/en/ |date=20161004160432 }} , ''"io.js has merged with the Node.js project again. There won't be any further io.js releases. All of the features in io.js are available in Node.js v4 and above."''</ref>。 {{Program_execution}} == 程式範例 == 用Node.js撰寫的[[網頁伺服器|HTTP Server]]版[[Hello World|hello world]]範例: <syntaxhighlight lang="javascript"> const http = require('http'); http.createServer((request, response) => { response.writeHead(200, { 'Content-Type': 'text/plain' }); response.end('Hello World!'); }).listen(8000); console.log('Server running at http://127.0.0.1:8000/'); </syntaxhighlight> 另一個簡單的[[Transmission Control Protocol|TCP]]伺服器範例,監聽(Listening)[[TCP/UDP端口列表|端口7000]]並輸出(echo)之前輸入的訊息: <syntaxhighlight lang="javascript"> const net = require('net'); net.createServer(stream => { stream.write('hello\r\n'); stream.on('end', () => stream.end('goodbye\r\n')); stream.pipe(stream); }).listen(7000); </syntaxhighlight> ==技術== ===執行緒=== Node.js以單執行緒執行,使用非阻塞I/O呼叫,這樣既可以支援數以萬計的並行連線,又不會因多執行緒本身的特點而帶來麻煩。眾多請求只使用單執行緒的設計意味著可以用於建立高並行應用程式。Node.js應用程式的設計目標是任何需要操作I/O的函式都使用[[回调函数|回呼函式]]。 這種設計的缺點是,如果不使用cluster<ref>[https://nodejs.org/api/cluster.html cluster] {{Wayback|url=https://nodejs.org/api/cluster.html |date=20150818041503 }}</ref>、StrongLoop Process Manager<ref>[http://strong-pm.io/ StrongLoop Process Manager] {{Wayback|url=http://strong-pm.io/ |date=20150821153936 }}</ref>或pm2<ref>[https://github.com/Unitech/pm2 pm2] {{Wayback|url=https://github.com/Unitech/pm2 |date=20150810072440 }}</ref>等模組,Node.js就難以處理多核或多執行緒等情況。 ===V8=== {{Main|V8 (JavaScript引擎)}} [[V8 (JavaScript引擎)|V8]]是为[[Google Chrome]]设计的JavaScript运行引擎,Google于2008年将其开源。V8用C++写成,它将JavaScript源代码编译成本地[[机器码]]而不是解释执行。 Node.js用[[libuv]]来处理异步事件,而V8提供了JavaScript的实时运行环境。libuv是一个网络和文件系统功能的抽象层,既可以用于Windows又可以用于符合[[POSIX]]标准的系统,例如Linux、OS X和Unix。 Node.js的核心功能被包含进一个JavaScript库,并通过C++将各部分与操作系统进行联系。 === npm === {{Main|npm|l1=-{zh-cn: node包管理器; zh-tw: npm; zh-hk: npm;}-}} [[npm]]是Node.js附带的包管理器。npm是一个命令行工具,用于从NPM Registry中下载、安装Node.js程序,同时解决依赖问题。npm提高了开发的速度,因为它能够负责第三方Node.js程序的安装与管理。 ===统一API=== Node.js将浏览器、数据(例如[[MongoDB]]或[[CouchDB]])等组合到一起,通过[[JSON]]提供一个统一的接口。由于[[前端]]框架和一些基本的后端开发技术(如[[MVC]]、[[Model View Presenter|MVP]]、[[Model View ViewModel|MVVM]]等)变得流行,Node.js也支持客户端和服务器端重新利用相同的模型和接口。 ===事件循环=== Node.js将其注册到操作系统中,这样可以及时注意到新连接的产生。当新连接产生时,操作系统会产生一个回调。在Node.js运行时内部,每个连接都被分配一个小型的堆。与其他服务器程序不同的是,Node.js不使用进程或线程处理连接,而是采用事件循环来处理并发连接。<ref>[https://nodejs.org/about/ About Node.js] {{Wayback|url=https://nodejs.org/about/ |date=20150816092347 }} , Node.js Website</ref>而且Node.js的事件循环不需要手动调用。在回调函数定义之后,服务器进入事件循环。当回调函数均被执行完毕之后,Node.js结束事件循环。 ==开发工具== ;桌面[[集成开发环境|IDE]] * [[Atom (文字编辑器)|Atom]](免费、开源软件) * [[Adobe Brackets|Brackets]](免费、开源软件) * [[Sublime Text]](商业软件) * [[JetBrains MPS|JetBrains]] [[IntelliJ IDEA]](商业软件) * [[JetBrains MPS|JetBrains]] [[WebStorm]](商业软件) * [[Microsoft Visual Studio]] with Node.js Tools for Visual Studio<ref>{{cite web | url=//nodejstools.codeplex.com/ | title=Node.js Tools for Visual Studio | publisher=[[Codeplex]] | accessdate=2 August 2014 | archive-date=2018-01-16 | archive-url=https://web.archive.org/web/20180116102204/http://nodejstools.codeplex.com/ | dead-url=no }}</ref>(商业软件) * [[Microsoft Visual Studio]] with [[TypeScript]](商业软件) * [[Nodeclipse]] Enide Studio(免费、开源软件、在[[Eclipse]]基础上开发) * NoFlo –与[[GNOME]] API集成的流式开发环境<ref>{{cite web |url=https://lwn.net/Articles/597216/ |title=Bergius: Flowhub and the GNOME Developer Experience |work=[[LWN.net]] |date=2014-05-02 |accessdate=2014-05-24 |archive-date=2018-12-26 |archive-url=https://web.archive.org/web/20181226110437/https://lwn.net/Articles/597216/%20 |dead-url=no }}</ref> * [[Visual Studio Code]](免费、开源软件) ;在线编辑器 * [[Koding]] * [[Codenvy|Codenvy IDE]] * [[Cloud9 IDE]] * Codiad<ref>[http://codiad.com/ Codiad] {{Wayback|url=http://codiad.com/ |date=20150814000200 }}</ref> ;运行时和调试器 * [[Microsoft Visual Studio]](商业)with Node.js Tools for Visual Studio(免费) * [[Microsoft WebMatrix]](免费、闭源软件) * [[Visual Studio Code]] ;框架 * 服务器端框架:[[Express.js]], [[Socket.IO]], Koa.js<ref>[http://koajs.com/ Koa.js]{{Wayback|url=http://koajs.com/ |date=20150811045320 }}</ref>, Hapi.js<ref>[http://hapijs.com/ Hapi.js]{{Wayback|url=http://hapijs.com/ |date=20150809072332 }}</ref>, Total.js<ref>[https://www.airpair.com/node.js/posts/nodejs-framework-comparison-express-koa-hapi Node.js Framework Comparison: Express vs. Koa vs. Hapi] {{Wayback|url=https://www.airpair.com/node.js/posts/nodejs-framework-comparison-express-koa-hapi |date=20150705072625 }}, AirPair</ref><ref>{{cite web|url=http://www.infoworld.com/article/2606426/application-development/153472-13-fabulous-frameworks-for-Node.js.html|title=13 fabulous frameworks for Node.js|author=Peter Wayner|date=21 May 2014|work=InfoWorld|accessdate=4 July 2015|archive-date=2015-08-09|archive-url=https://web.archive.org/web/20150809125723/http://www.infoworld.com/article/2606426/application-development/153472-13-fabulous-frameworks-for-Node.js.html|dead-url=no}}</ref> * MVC框架:Meteor<ref>[http://www.meteor.com Meteor]{{Wayback|url=http://www.meteor.com/ |date=20200924174518 }}</ref>, Derby<ref>[http://derbyjs.com/ Derby]{{Wayback|url=http://derbyjs.com/ |date=20150801072933 }}</ref>, Sails<ref>[https://web.archive.org/web/20161118215029/http://sailsjs.org/ Sails]</ref>, Mean<ref>[https://web.archive.org/web/20190306144532/http://mean.io/ Mean]</ref>, MeanJS<ref>[http://meanjs.org MeanJS]{{Wayback|url=http://meanjs.org/ |date=20200923175923 }}</ref>, Tower.js<ref>[http://towerjs.org/ Tower.js]{{Wayback|url=http://towerjs.org/ |date=20160103014653 }}</ref>, Nombo<ref>[https://web.archive.org/web/20140818161330/http://nombo.io/ Nombo]</ref>, Geddy<ref>[https://web.archive.org/web/20190513073727/http://www.geddyjs.org/ Geddy]</ref>, Compound<ref>[http://compoundjs.com/ Compound]{{Wayback|url=http://compoundjs.com/ |date=20150822134519 }}</ref>, Yahoo! Mojito<ref>[https://web.archive.org/web/20150907233502/https://developer.yahoo.com/cocktails/mojito/ Yahoo! Mojito]</ref> == 替代品 == 以下是兼容Node.js代码的运行时。 ===Bun=== [[Bun]]是用[[Zig]]语言编写的JavaScript运行时,支持JavaScript和TypeScript项目的测试、编译和运行。首个对外版本于2022年7月发布。<ref>{{cite web |author1=Jarred Sumner |title=Bun v0.1.1 |url=https://bun.sh/blog/bun-v0.1.1 |website=Bun |accessdate=2023-06-19 |language=en |date=2022-07-05 |archive-date=2023-09-26 |archive-url=https://web.archive.org/web/20230926115855/https://bun.sh/blog/bun-v0.1.1 |dead-url=no }}</ref> == 参见 == {{Portal box|自由软件}} * [[Rhino (JavaScript引擎)]] * [[npm]]:广泛使用的Node.js安装包管理器 * [[MEAN]] * [[JSAN]](JavaScript Archive Network),一个不太常用的JavaScript安装包管理器 == 参考文献 == {{Reflist|30em}} == 外部連結 == * {{Official website|https://nodejs.org}} * [https://github.com/nodejs/node Node.js原始碼]{{Wayback|url=https://github.com/nodejs/node |date=20150910174952 }} * [https://www.mageants.com/magento-2-extensions.html Also Read -Best Magento 2 Extensions] {{Wayback|url=https://www.mageants.com/magento-2-extensions.html |date=20220325052005 }} {{-}} {{JavaScript}} {{Node.js}} {{authority control}} [[Category:JavaScript函式庫]] [[Category:使用MIT许可证的软件]] [[Category:用JavaScript編程的自由軟體]]
摘要:
请注意,所有对Local Chinese Wikipedia的贡献均可能会被其他贡献者编辑、修改或删除。如果您不希望您的文字作品被随意编辑,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源(详情请见
Project:著作权
)。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
导航菜单
个人工具
未登录
讨论
贡献
创建账号
登录
命名空间
页面
讨论
大陆简体
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
查看
阅读
编辑
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息