版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
Node.jsstandardjs`(`、`[``八、關(guān)鍵字之后要有一個空格,例如:`if(condition)九、函數(shù)名之后要有一個空格,例如:`functionname(arg)`===`node`err``window`:`window.alert('hi')`十三、,console和navigator`例外,可以不加ctrl`(1)console,把下面的代碼importimporturllib.request,os;pf='PackageControl.sublime-package';ipp=sublime.installed_packages_path();urllib.request.install_opener(.build_opener( Handler()));open(os.path.join(ipp,sublime,按`ctrlshiftp`installInstallPackage,如果可以則說明成功了-->輸入要安裝的插件名稱-->按回車`ConvertToUtf8`sublime`AutoFileName`src,href`DocBlockr``Terminal`sublimeCMD`sidebarenhancements``OmniMarkupPreviewer`markdown`MarkdownEditing`markdownSublimeserverapacheColorpickerctrlshift如果colorpicker安裝后用不了,有可能是因為與convertToUtf8的快捷鍵了,可以convertToUTF8的快捷鍵。因為文件編碼轉(zhuǎn)換用的不是很多,可[{"keys":["ctrl+shift++alt+c"],"command":"convert_to_utf8","args":{"encoding":"GBK","stamp":"0"}}]新建文件:ctrlshiftpnewfile(重命名:ctrlshiftp-->rename多光標(biāo)編輯:shift分屏:altshiftctrl[參考 五、cl六、wdo七、gi-->.ge八、gc-->.ge九、gt-->.ge十、qs-->timeoutsetTimeout(function 這個詞聽起來很洋氣、很計算機術(shù)語,百科里面的定義是:模塊化是指解決一個復(fù)想造一臺電腦,我們第式是直接買一臺品牌機,什么都有的,我們買回來就可以用,functionfunctioneach(arr)}functionlog(str)}util.js里。需要用到時,引入該文件就行。這一切工作小楊小楊 定義一個each方法遍歷對象,但頁頭的util.js里已經(jīng)定義了一個eachObjectJava于是util.js里的代碼變成了varvarorg={};org.CoolSite={};org.CoolSite.Utils={};org.CoolSite.Utils.each=function(arr){org.CoolSite.Utils.log=function(str)Yahoo!YUI2Yahoo!if( etd.Utils.isString(response)){if( etd.Utils.isString(response)){ }if( etd.Utils.isArray(response)){returnresponse;}重復(fù)造了。其中有一個最被大家喜歡的組件是dialog.js,使用方式很簡單。<script<script<scriptsrc="dialog.js"></script><script>org.CoolSite.Dialog.init**/dialog.js<script<scriptsrc="dialog.js"></script><script>org.CoolSite.Dialog.init({/**/dialog.jsutil.jsdialog.js公司整合業(yè)務(wù),某兩個產(chǎn)品線要合并。結(jié)果發(fā)現(xiàn)前端代碼。以上很多問題都是因為文件依賴沒有很好的管理起來端頁面里,大部分的依。如果學(xué)過Java、php等語言的同學(xué),對這個概念應(yīng)該很清楚,如果之前沒學(xué)過的,繼題,但是上面這個代碼不夠優(yōu)雅,或者說不太利于,因為首先,如果我們不細(xì)看注釋和我們把這種代碼風(fēng)格就叫做命名空間有的書或者上也把這種寫代碼的風(fēng)格叫做單例模commonjs規(guī)范node.jsnode.jsCommonJSCommonJSAMDCMD等解決方案。amdAMDRequireJSAMDJSONAMDdefineAMD運行時思想是「EarlyExecuting」,也就是提前執(zhí)行依cmdCMDSeaJSumdAMDCommonJSAMDCommonJS(unwrappedUMD(UniversalModuleDefinition)。希望解AMD(define),AMDsea.js一、簡單友好的模塊定義規(guī)范:Sea.jsCMDNode.jsnode同樣的依賴加載方式是不可行的,因為依賴只有在執(zhí)行期才能知道但是此時在瀏覽器端我們無法像node一樣直接同步地一個依賴文件并執(zhí)行!Sea.js的做法是,分成兩個時期——加載期和執(zhí)行期;pixelegos(一個開源項目)的依賴樹:seajs.use(‘/js/pixelegos‘)pixelegos這個模塊。Sea.jspixelegospixelegos.js,將其Sea.js又去加載其他的模塊。隨著的模塊同步到瀏覽器端后,一棵依賴樹才慢慢地通過遞歸顯現(xiàn)出來。EXECUTEDexports。由于在執(zhí)行node執(zhí)行過程有點類似。sea.jssea.js要注意一點:使用了sea.js之后,我們推薦的做法是在html代碼里,除了seajs.useseajs.configseajsrequireAPI四、定義第依賴的模cmdcmd規(guī)范的模塊[exportsvsmodule.exports我們先復(fù)下復(fù)合數(shù)據(jù)類型[對象數(shù)據(jù)類型]的一個特點賦值module.exports是真正的出去的東西,但是為了簡便,當(dāng)我們只需要以對象的形式暴露出去屬性或方法的時候,可以用exports,因為exports的地址值和但是,如果直接使用exports={},類似這樣的,就,因為這時候,exportsmodule.exportsseajs.configbaseseajs"."(被調(diào)用的)(seajs.use()),二、以"/"開頭相對于當(dāng)前頁面的根 三、普通命名直接加上base前綴例如例如base的默認(rèn)值為 alias(別名),baseindex.htmlsea.js三、函數(shù)自執(zhí)行的形四、sea.js的形式五、sea.jsjquery的形式六、sea.jsjqueryseajs.config的形式七、require.js的形式八、require.jsjquery的形式九、node.js的形式AMD(AsynchronousModuleRequire.jsAMD data-main點,require.js在加載的時候會先data-main是為了減少麻煩,大家約定使用main.js,所以也建議包結(jié)構(gòu)遵從definedefine(function()varadd=function(num1,num2)returnparseInt(num1)+returnadd://RegisterasanamedAMDmodule,sincejQuerycanbeconcatenatedwith//RegisterasanamedAMDmodule,sincejQuerycanbeconcatenatedwith//filesthatmayusedefine,butnotviaaproperconcatenationscript//understandsanonymousAMDmodules.AnamedAMDissafestandmost//waytoregister.LowercasejqueryisusedbecauseAMDmodulenames//derivedfromfilenames,andjQueryisnormallydeliveredina//filename.DothisaftercreatingtheglobalsothatifanAMDmodule//tocalltohidethisversionofjQuery,itwillbaseUrlbaseUrl屬性指定所有模塊的查找根baseUrl這樣的模塊在用require()加載之前,要先用require.config()方//Notethat//Notethatumportability,librariesthatarenotjQuery//declarethemselvesasanonymousmodules,andavoidsettingaglobalif//AMDloaderispresent.jQueryisaspecialcase.Formoreinformation,/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-if(typeofdefine==="function"&&define.amd)define("jquery",[],function(){returnjQuery;}}shim:exports:'_''backbone':deps:['underscore','jquery'],exports:'Backbone'}}requireconfig()接受一個配置對象,這個對象除了有前面的paths屬性之外,還有一個shim屬性,專exports(輸出的變量名表明這個模塊外部調(diào)用時的名稱;(2)deps數(shù)組,表明該模塊的依賴性。require.jssea.js的異同【可以結(jié)合給出的代碼示例進行js繼續(xù)執(zhí)行當(dāng)前模塊,require.js則是先把依賴的執(zhí)行完,再執(zhí)行當(dāng)前的代碼require.js是預(yù)加載,預(yù)執(zhí)行,sea.jsnode.jsNode.js,或者Node,是一個可以讓JavaScriptJavaScript的事情Node.js幾乎都能做,而且可以做得更好。Node.jsweb發(fā)的實現(xiàn)思路,而采用了單線程、異步IO、驅(qū)動式的程序設(shè)計模型。這些特性不僅帶1、瀏覽器和JavaScript行為層,分別對應(yīng)的語言是標(biāo)記語言HTML、配置語言CSS和語言JavaScript,瀏覽器就是JavaScript的執(zhí)行環(huán)境,JavaScript只有依賴于瀏覽器才能解析和運行。它們的關(guān)系2JavaScriptDOMBOM、利用正則表達(dá)式進行表單驗證、通過ajax或JSONP或iframe與服務(wù)器進行數(shù)據(jù)的交互,canvas卡、flappybird等小游戲。3Java、python、rubyonrails、jsjava如果之前學(xué)過任意一種語言尤其是基于c的語言那么學(xué)起node.js起來應(yīng)JavaScript如何才能被作為語Node.js行為層,分別對應(yīng)的語言是標(biāo)記語言HTML、配置語言CSS和語言JavaScript,瀏覽器就是JavaScript的執(zhí)行環(huán)境,JavaScript只有依賴于瀏覽器才能解析和運行。它們的關(guān)系CSShtmljsjs(比如chrome中就是V8引擎)當(dāng)成是器,把js當(dāng)成是文件?!蔽覀兊腘ode.js也是一種集成了V8引擎的軟件所以我們也可以用Node.js來 ”Node.jsjsNodeDOMparentNode、childNode、cloneNodeNode有關(guān)系,DOM里面的指的僅僅是元素節(jié)點、文本節(jié)點、注釋節(jié)點之類的東西。Node.js有很多用途,像做前端自動化工具、實時聊天系統(tǒng)、、給ajaxjson或jsonpapi等,這些我們課程都會涉及,我們的側(cè)重點在于講解Node.js開發(fā)一個及理解網(wǎng)絡(luò)編程的底層原理Node.jsNode.js展的同學(xué)打好基礎(chǔ)。一句話,我們的重點在于絡(luò)編程。jsECMAScriptBOMNode.jsjsECMAScript+API+node.js(JavaNode.js下面安裝6432打開命令行工具-->輸入systeminfoX646432第二步、安裝對應(yīng)的node.js的msi包(老師提供有相應(yīng)的安裝包,或者你想安裝的包可以到官網(wǎng)),下一步下一步就行了(next-->next-->next 第一步、打開命令行,輸入node 因為在angular課程部分有用到,所以大家應(yīng)該都安裝過,盡量不要卸載,如果卸載了, 候會出問題,因為雙方都影響了環(huán)境變量macwin10node的時候不能正常的使用,node.js,最好不要嘗試這個軟件。在安裝nvmnode.jsC:\Users<user>\AppData\Roaming\npmnode6.4.0REPLJavaScriptREPLreadevalprintchromejsNode.jsnodeREPLCTRLREPLnode.jsjsnodeREPLjsnodeejsevaljssublimenodejs1、要執(zhí)行的js文2js3CMDnode,node.js,就不會去找環(huán)境變node.exe了。設(shè)置-->語言和框架-->node.js路徑-->webstorm “ DOSDOS。windows系統(tǒng),mac或ubuntu、arcLinux中令行界面原理和操作類似,個別命令有最簡單的方式:WINR-->DOS-->點進去之后,可以設(shè)置DOS的背景顏色、文字顏色、A:dA:d:C:cd(changedirectory))D:cd..:E:cd\:F:cls(clearscreen)G:exit:dos命令行(分割線上的需要掌握,下的了解md(makedirectory):rd(removedirectory):del(delete):刪除文件,刪除一堆后綴名一樣的文件*.txtnotepad創(chuàng)建文件rds文件夾名稱(詢問是否刪除)rd+/q+/s文件夾名稱(F7ALTenterchrome如果在DOS命令行里面打開,很簡單:chromeDOSDDOSchrome的完整地址:【注意:programfiles中間有空格,pathchrome.exeDOSglobalglobalnodeNode.jsglobal(不包含用戶自定義的變量和setTimeout、setInterval、clearTimeout、clearInterval、consoleproto、constructor、Object、String、Array、Function、Date、JSON、NaNnode.jsjsJavaScriptNode.jsNode.jsjsab2.jsjs1234 下咱們《模塊化》學(xué)習(xí)過的sea.js,咱們雖然學(xué)的東西不少,但是API就三個definerequiremodule.exports或exports-->當(dāng)前模塊出去的變量和方Node.js和sea.js是很類似的本質(zhì)上是因為玉伯設(shè)計的cmd規(guī)范(這個規(guī)范也人提出的,國外應(yīng)該是沒有人提這個規(guī)范)是在模仿commonJs規(guī)范。Node.jsAPIrequiremodule.exports或exports-->當(dāng)前模塊出去的變量和方前面我們介紹過了,在Node.js中一個js文件就是一個模塊,就是一個獨立的作用域,也就就可以通過module.exports或exports來。console對象[了解CprintfconsoleconsoletimetimeEndconsole.error('\x1b[31m\x1b[1mError:\x1b[22mconsole.error('\x1b[31m\x1b[1mError:\x1b[22m\x1b[93m'+''+('\x1b[31m\x1b[36mInfo:\x1b[22m\x1b[93m\x1b[0m'我是提示信息//"收到響應(yīng)"的打印是在"發(fā)送ajax請求"之后的,在調(diào)用$.post//"收到響應(yīng)"的打印是在"發(fā)送ajax請求"之后的,在調(diào)用$.postsetImmediate想理解這個,我們需要先理解setTimeout(function(){},0);這個作用比較廣,比如在varoTxtvaroContkeyupkeypresssetTimeout//oCont.innerHTML=var_this=oCont.innerHTML=_this.value;說白了,把時間定為0的目的是,為了在當(dāng)前的主線程的代碼執(zhí)行完之后,讓這個定時器盡可能快的得到調(diào)用,由于這個實在是比較好用,所以后來H5出來了一個API叫node.jsAPI dirname 值得注意的是,網(wǎng)上一堆人會把filenamedirname在文檔中有這么一句話filenameisn'tactuallyaglobalbutratherlocaltoeachdirnameisn'tactuallyaglobalbutratherlocaltoeachNode.js的包是一個 commonJS規(guī)范的包應(yīng)該具備以下特性: 二進制文件應(yīng)該在 JavaScript代碼應(yīng)該在 文檔應(yīng)該在 單元測試應(yīng)該在 Node.js對包的要求并沒有這么嚴(yán)格,只要頂層 下有package.json,并符合一些規(guī)范js56、標(biāo)準(zhǔn)78復(fù)下咱們《模塊化》學(xué)習(xí)過的sea.js,咱們雖然學(xué)的東西不少,但是API就三個definerequiremodule.exports或exports-->當(dāng)前模塊出去的變量和方Node.js和sea.js是很類似的本質(zhì)上是因為玉伯設(shè)計的cmd規(guī)范(這個規(guī)范也人提出的,國外應(yīng)該是沒有人提這個規(guī)范)是在模仿commonJs規(guī)范。Node.jsAPIrequiremodule.exports或exports-->當(dāng)前模塊出去的變量和方前面我們介紹過了,在Node.js中一個js文件就是一個模塊,就是一個獨立的作用域,也就就可以通過module.exports或exports來。module.exportsexportssea.jsNode.js不會出現(xiàn)循環(huán)[了解所謂的循環(huán)就是a.js里require了b.js,但是有時候我們莫名的會在b.js里引入a.js,正常我們會想,這會不會導(dǎo)致循環(huán)不斷的最后死循環(huán)?Node.jsNode.js經(jīng)有了,就不會再考慮去重新加載第二遍了。(解釋:1、如果當(dāng)前要加載的模塊存在cache緩存當(dāng)中,則直接返回它exports出來的對象2、如果要加載的模塊是native原生的,則調(diào)用NativeModule.require("傳入當(dāng)前模塊名字")并返回結(jié)果3、否則,創(chuàng)建一個新的模塊并且加入到緩存當(dāng)中,然后再返回exports的結(jié)果)Node.jsfs(不理解原理沒問題,這1、如果模塊標(biāo)識符解析出來的是模塊或者我們用npm安裝的第包,則會優(yōu)先會判斷是不是模塊,如果不是,則開始按照node_modules(即module.paths)的路 則會把這 main4、如果還是找不到,則會去找當(dāng)前路徑里有沒有一個叫這個名字的json文件,如果有,5node6Node.jsfs-->與文件系統(tǒng)交互(操作處理文件 querystring-->解析urlutil-->提供一系列小工具path-->處理文件路徑url-->解析urlhttp-->提供httppathdemochrome-->F12CTRLSHIFTIa,b,c這三個變量每一步執(zhí)行的變化,我們可以把鼠標(biāo)放到左側(cè)右鍵-->addtowatchaddtowatch,然后我們就會發(fā)現(xiàn),a,b,c這三個變量都會出現(xiàn)在右側(cè)的堆棧調(diào)第五步:我們?nèi)绻朊恳徊蕉?,我們就可以在左?cè)的行號上面點一下9a,b,c變量的值的變化:下的變化,我們還可以表達(dá)式a+b之類的值的每一步的變化。nodedebugceshi.js,Nodejs提供了一個內(nèi)建調(diào)試器來幫助開發(fā)者調(diào)試應(yīng)用程序。想要開啟調(diào)試器我們需要在代碼中加入stepnode-js第四步、用瀏覽器visualstudiocodeVisualstudiocode官網(wǎng):/en-us/products/code-codevisualstudiocodeJavaScript,比如這里的loglog感知位置:使用這個參數(shù)后會光標(biāo)的下一位置將會另起一行,tabdescription代碼段描述,多重光標(biāo)同時編輯多重光標(biāo)同時編輯:Alt按住不動點擊鼠標(biāo) (Ctrl+Shift+L選中文中所有出現(xiàn)該詞的地方 (Up:上方向鍵,在ST中為Ctrl+Shift+方向鍵快速預(yù)覽變量定義:Alt+F12(這兩個功能用過VS的都知道:) 的信息,在editor.referenceInfos可以設(shè)置)快 當(dāng)前行到上一行或下一行:查找/切換匹配括號:快速/取消注釋:快速分屏編輯用visualstudiocode進行調(diào)試,要注意的兩點:只能以app.js為執(zhí)行的,調(diào)試這個app.js,或者修改launch.json中的"program":文件 概念理解及fs模 UNIX文件系統(tǒng) 和文件的一種層次安排 (directory)是一個包含項的文件,在邏輯上,可以認(rèn)為每個項都包含一個文件中的各個名字稱為文件名(filename)。當(dāng)創(chuàng)建一個新 時,自動創(chuàng)建了兩個文件 fsfilesystemnull1、varvarfs=vartext=vararr=text.split(/\r?\n/);//如果是在linux,mac機器上面,換行相當(dāng)于\r\nwindows,則只是\n,所以\r2、varfs=require('fs');varfs=require('fs');throw}3、用于,返回一個所包含的文件和 的數(shù)組varvarfs=throw}4、varfs=require('fs');varfs=require('fs');5、發(fā)送,每次發(fā)送會觸發(fā)一個data,發(fā)送結(jié)束會觸發(fā)end。(思考一下,如果的文件是一部很大很大的,比2個小時varvarfs=varinputfs.createReadStream('abc.txt');vartxt='';//用于拼接所有的文件里的內(nèi)容txt+=chunk;6、createWriteStream()writeendvarvarfs=varoutput=fs.createWriteStream(fileName,{encoding:'utf8'});流varvarfs=netnet1socket//剪刀>布//布>石頭//石頭>布varmyVal=vararr=varrobotVal=arr[parseInt(Math.random()*3)];if(robotVal==="jiandao"){console.log(robotVal,myVal,"平");caseconsole.log(robotVal,myVal,"勝");console.log(robotVal,myVal,}}elseif(robotVal==="shitou"){caseconsole.log(robotVal,myVal,"敗");caseconsole.log(robotVal,myVal,"平");console.log(robotVal,myVal,}console.log(robotVal,myVal,"勝");casecaseconsole.log(robotVal,myVal,"負(fù)");}}分析:一個歌詞的文件,先用\n把整個文件大個的字符串按行拆分成一個數(shù)組,然后setTimeout定時器,到點了varvarfs= 文件出錯vararr=data.toString().split("\n");varreg=//[00:02.00][、]、.varvarreg1=/^\[(\d+):(\d+)\.(\d+)\]\s(.*)/;for(vari=0;i<arr.length;i++){vararr1=reg1.exec(arr[i]);varmin=parseFloat(arr1[1]);//分varsecondparseFloat(arr1[2]);//秒varmsecparseFloat(arr1[3]);//毫秒varcont=arr1[4];//歌詞內(nèi)容vartotalTime=min*60*1000+second*1000+msec;}}}[以下截屏來自于《JavaScript異步編程:設(shè)計快速響應(yīng)的網(wǎng)絡(luò)應(yīng)用》一書chrome,chrome官網(wǎng) npm=nodepackagejavamavenphpComposernode包管理工具(aNodenpm是一個JavaScript的包管理工具,它是用來查找、、重用無數(shù)別的開npm-npminstallnpm-對于不能的同學(xué)來說在一些第的npm模塊的時候經(jīng)常半天也不下來,npm鏡像:npmnpminstall-gcnpm--npminstallcnpminstall$npminstall-g $$nrm*npmcnpm-- /nj/$nrmusecnpm//switchregistrytoRegistryhasbeenset nrmnrmhelp//shownrmlist//showallnrmusecnpm//switchtonrmhome//gotoaregistryhomenpminitpackage.json文件,package.jsonnodenpminstall-g(全局)npminstall--save-dev(安裝的包會出現(xiàn)npminitnpminstallsavepackage.json中的devDependencies配置面,在使用--save之前必須在命令行執(zhí)行npminit)如何在自己的代碼里引入第varvarmodule_name=npmuninstallnpmuninstallsavepackage.jsonnpmnpminity初始化一個package.jsonnpminstall包名安裝一個包npminstallgnpm升級npminstall--savepackage.json安裝的包才可以使用require加載(使用了--save的參數(shù)之后,會自動修改package.jsonnpminstall--saveA包名Bnpminstallg包名全局安裝一個命令行工具npmlist查看當(dāng)前下安裝的所有的包npmlist-g查看全局包的安裝路徑下的所有的包npmuninstall包名卸載當(dāng)前 npmuninstall-g包名卸載全局路徑下的某個包慢很慢,這時候,你可以嘗試著用的源( cnpm:npminstallgcnpmregistry=cnpm與npm的同步頻率目前是10分鐘一次markdownnpm需求:我們現(xiàn)在有一個.md.markdownhtml達(dá)式來嘗試著做,第一步,我們可以按\nsplitnpmmarkdown的解析器。我們點進我們可以點到對應(yīng)的的repo庫當(dāng)中,就會看到詳細(xì)的使用說明md然后我們就會發(fā)現(xiàn),當(dāng) 文件夾多了一個demo.html文件面的編碼設(shè)置成GBK,然后看到轉(zhuǎn)換成功:npm思路一先或谷歌一下比如和文件上傳相關(guān)的我們就可以考慮一下文件傳包一般大部分常用的npm包可以直接出來firefox,打開對應(yīng)的firefox的翻譯工具把整個網(wǎng)頁翻譯成中文的就可以看懂了,準(zhǔn)確率package.json{//namenode,jsurl 名。所以不能移點號和下劃線開"name":"http://name和versionversion"version":"0.1.1",//npmsearch"description":"testcortex"main":"index.js",//binpath"bin":"cortex":"bin/cortex-*repository:"repository": ":[//licesnse"license":"MIT","author":{"name":"": //url"bugs":"url": *dependencies:*devDependencies:*peerDependencies:"tea":2.x"2.x}*bundledDependencies:發(fā)布包的同時打的其他依*optionalDependencies:默寫依賴沒有找到或者安裝失敗時,npm version>version>=version~version^version1.2.xX1.2.1,1.2.3http://...UnixtarballURL*version1-version2 >=version1version2.range1||range2滿足任意一個即可git..Git"dependencies":{"MD5":"ansicolors":"argv-parser":"asks":"async":"columnify":"comfort": mand-errors":"cortex-init-prompts":"cortex-ls":"cortex-package-files":"cortex-profile":"cortex-scaffold-generator":"^4.0.0","cortex-search-utils":"^1.0.0","cortex-shrinkwrap":"editor":"express":"fs-expand":"fs-extra":"fstream":"glob":"ignore":"loggie":"make-array":"mix2":"neuron-builder":"neuron-graph":"neuronjs":"neuropil":"open":"read-cortex-json":"request":"semver-extra":"shrinked":"spawns":"stares":"tar":"devDependencies":{"mocha":"*","chai":"fs-sync":"jsonfile"://engines:nodenpm"engines":"node":/*script由命令組成的hash對象在包不同生命周期運*key時生命周期,value時要運行*"scripts":{"test":"make"homepage": }/*"scripts":{"start":"node 有server.js文件,npm會默認(rèn)將start命令設(shè)置為nodeserver.js。"scripts":{"preinstall":"node-wafclean||true;node-wafconfigurebuild"}如果包的 有wscript文件,npm會默認(rèn)將preinstall命令用node-waf進行編譯如果包的 npm"contributors": 有AUTHORS文件,npm會默認(rèn)逐行按Name<>(url)格式處理,郵箱和url是可選的。#號和空格開頭的行會被忽略。包和模塊很類似只不過包是一個更大的單位如果學(xué)過其他的語言理解包就很容易,javapackagejarphpperlphar,pythonpipjs 的結(jié)構(gòu)規(guī)范bin存放可執(zhí)行二進制文件的lib存放JavaScript代碼的doc存放文檔的test存放單元測試的包描述文件用于表達(dá)非代碼相關(guān)的信息,它是一個JSON格式的文件--package.json,位NPM相關(guān)。由于commonJS包規(guī)范尚處于草案階段,npm在實踐中做了一定的取舍,具體細(xì)1、name包名2、description包簡介3、version版本號 數(shù)組npm中主要用來做分類搜索一個好的有利于快速查找5、maintainers包者列6、contributors貢獻者列表7、bugs一個可以反饋bug8、licenses當(dāng)前包所使用的證列表,表示這個包可以在哪些證下使用9、repositories10、dependenciesnpm11、scripts說明對象,它主要被包管理器用來安裝、編譯、測試和卸載12、binbinnpm包名-g命令可以將添加到執(zhí)行路徑中,之后可以在命令行直接執(zhí)13、main模塊引入方法require()在引入包時,會優(yōu)先檢查這個字段,并將其作為包中其余模塊的,如果不存在這個字段,require方法會查找包目錄下的index.js,index.node,index.json作為默認(rèn)14、devDependencies一些模塊只在開發(fā)時需要依賴,配置這人行,可以提示包的后續(xù)15、directories標(biāo)識包的結(jié)構(gòu)jQuery,zepto等去找我們需要的版本的庫或框架,我們只需要定義好了配置文bowergitbowergit比如我們要bootstrap,如下bower會去上面找到bootstrap的代碼由于bootstrap是依賴了jQuery的,所以它順便還會把對應(yīng)版本的jQuery下來.然后我們就可以在我們的項目當(dāng)中bootstrap庫了如果一個js庫沒有在bower的官網(wǎng),但是有的倉庫,我們也可以用短語來,如下:bowerbower.json,這個配置文件給別的同事,他們可以自己去和我們一模一樣的相應(yīng)的js庫或框架2、如果相應(yīng)的js庫的版本升級了,我們只需要修改這個配置文件,然后去的就bower.jsonjs--bower.json,jsgruntweb應(yīng)用程序的工作流,同時grunt前期開發(fā)的組件庫如何和使第一步、npminit-yjshintgruntfile.js文件jsjsgrunt當(dāng)然,grunt可以使用的插件有很多,大家可以去 /plugins里面找自己需windowsmacyeoman自動將最佳實踐和工具整合進來,大大加速和方便我們后yoversion我們安裝的只是yeoman這個工具我們?nèi)绻胗盟鼇碜鍪虑楸热缥覀兿胩幚韆ngulargeneratorceshiNode.js在開發(fā)網(wǎng)頁交互的時候甚至?xí)浰麄兊拇嬖诘窃谡Z言內(nèi)部支持模型是何等強大的時會觸發(fā)request。Node采用的方式是,所有的I/O都應(yīng)該是非阻塞的,這意味著需要讓程序暫停操作IO?;卣{(diào)函數(shù)往往以級聯(lián)的方式嵌入到其他回調(diào)函數(shù)中,這。爐火關(guān)小,而是會采用更加安全的方式,通過快速切換工作對象來達(dá)到同樣的目的驅(qū)。在日常生活中,我們習(xí)慣于用各種內(nèi)部回調(diào)的方式來處理遇到的。和JavaScript類似,JavaScript很像,進程與線程的理解(了解即可計算機的是CPU,它承擔(dān)了所有的計算任務(wù)。它就像一座工廠,時刻在運行,假定工CPU一次只能運行一個任務(wù)。進程就好比工廠的車間,CPU所能處理的單個任務(wù),任一時刻,CPU總是運行一個進程,其他進程處于非運JavaScript不能有多個線程呢?這樣能提高效率啊。JavaScript的單線程,與它的用途有關(guān)。作為瀏覽器語言,JavaScript的主要用途是與為了利用多核CPU的計算能力,HTML5提出WebWorker標(biāo)準(zhǔn),允許JavaScript創(chuàng)JavaScript單線程的本質(zhì)。如果排隊是因為計算量大,CPUCPU是閑著的,因為IO設(shè)備(輸入輸出設(shè)備)很慢(比如Ajax操作從網(wǎng)絡(luò)數(shù)據(jù)),不得不等著結(jié)果出來,JavaScript語言的設(shè)計者,這時主線程完全可以不管IO設(shè)備,掛起處于等待中的任于是,所有任務(wù)可以分成兩種,一種是同步任務(wù)(synchronous),另一種是異步任務(wù)(asynchronous)"所有同步任務(wù)都在主線程上執(zhí)行,形成一個執(zhí)行棧(executioncontextstack)主線程之外,還存在一個"任務(wù)隊列"(taskqueue)。只要異步任務(wù)有了運行結(jié)果,三、和回調(diào)函"任務(wù)隊列"是一個的隊列(也可以理解成消息的隊列),IO設(shè)備完成一項任務(wù),就在"任務(wù)隊列"中添加一個,表示相關(guān)的異步任務(wù)可以進入"執(zhí)行棧"了。主線程"任務(wù)隊列",就是里面有哪些。"任務(wù)隊列"中的,除了IO設(shè)備的以外,還包括一些用戶產(chǎn)生的(比如鼠標(biāo)點"任務(wù)隊列"是一個先進先出的數(shù)據(jù)結(jié)構(gòu),排面的,優(yōu)先被主線程。主線程的讀但是,由于存在后文提到的"定時器"功能,主線程首先要檢查一下執(zhí)行時間,某些只有四、EventEventLoop(循環(huán))如何理解同步與異步(阻塞與非阻塞 是同步發(fā)消息是異varvarfs=readFilejsIOa.txtb.txtIONodevarfs=a.txtb.txtNode.js所有的異步I/O操作在完成時都會發(fā)送一個到隊列后,就會把這個定時器任務(wù)插入到隊列當(dāng)中,下面幾個定時器類似。,此時循環(huán)開始運行,檢查隊列發(fā)現(xiàn)里面有7個要處理的任務(wù),把任務(wù)一個一個的,隊列清空,代碼執(zhí)行完,循環(huán)停止processsetImmidiate在多個里交叉執(zhí)行CPU運算密集型的任務(wù)compute(),我們希望這個函數(shù)盡可能持續(xù)的執(zhí)行,來進行一些運web服務(wù)serverprocess.nextTick()來交叉執(zhí)行compute()和正常的響應(yīng)。 varhttp=function{// res){ {'Content-Type':'text/ }).listen(5000, 在這種模式下,我們不需要遞歸的調(diào)用compute(),我們只需要在循環(huán)中使用http請求進來,循環(huán)機制會先處理新的請求,然后再調(diào)用compute()。反之,如果你compute()compute()里,無法處理新的http請求了。你可以自己試試。markdownnode.jshtml文件第一步、去找一個用于markdown ceshi,npminity,markdownmarkdown文件放到當(dāng)前文件夾index.js文件,寫代碼如下:互聯(lián)網(wǎng)協(xié)議族(英語:InternetProtocolSuiteIPS)[1],是一個網(wǎng)絡(luò)通信模型,以及TCP/IPProtocolSuite,或TCP/IPProtocols),簡稱TCP/IP[2]。因為這個協(xié)議的兩個協(xié)議,包括TCP(傳輸控制協(xié)議)和IP(網(wǎng)際協(xié)議),為這個中最早通過的標(biāo)準(zhǔn)[3]。由TCP/IP協(xié)議棧(英語:TCP/IPProtocolStack)[4][5]。這些協(xié)議最早發(fā)源于國防部(縮寫為DoD)的ARPA網(wǎng)項目,因此也被稱作DoD模型(DoDModel)[6]。這個協(xié)議套組由互聯(lián)網(wǎng)工程任務(wù)組負(fù)責(zé)。構(gòu)之中[7][8]OSI模型。TCP/IPOSITCP/IPOSI模型組不能精確地匹配,還沒有一個完全正確的答案。另外,OSI模型下層還不具備能夠真同一層會引起,但是OSI模型還沒有復(fù)雜到能夠做更好的工作。下面的圖表試圖顯示TCP/IPOSI模型中的位置:sessionnetworkdatalinkphysicalsessionnetworkdatalinkphysical7 例如ASAP、SSH、ISO8327/ 5BSD 32 OSI模型的最上面三層(應(yīng)用層、表示層和會話層)TCP/IP組中是一個應(yīng)TCP/IPTCPRTP下的打開和關(guān)閉連接組成,并且在TCP和UDP下的各種應(yīng)用提供不同的端,這些功能能夠被單個的應(yīng)用程序(或者TCP/IP的時候就可以把它當(dāng)作一個獨立的層。applicationapplication4transporttransport internetTCP/IP來說這是因特網(wǎng)協(xié)議internet2例如以太網(wǎng)、Wi-Fi、該層包括所有和應(yīng)用程序協(xié)同工作,利用基礎(chǔ)網(wǎng)絡(luò)交換應(yīng)用程序的數(shù)據(jù)的協(xié)議。應(yīng)用登陸)、DNS(名稱<->IP地址尋找)以及許多其他協(xié)議。一旦從應(yīng)用程序來的數(shù)據(jù)被IP相聯(lián)系。服務(wù)器應(yīng)用程序的端口由互聯(lián)網(wǎng)號碼分配局(IANA)連結(jié)外部的客戶端程序通常使用系統(tǒng)分配的一個隨機端一個端口并且通過服務(wù)器每一個應(yīng)用層(TCP/IP參考模型的最)協(xié)議一般都會使用到兩個傳輸層協(xié)議之一:面TCP HTTP(HypertextTransferProtocol,超文本傳輸協(xié)議),主要用于普 overSSL,安全超文本傳輸協(xié)議),HTTP FTP(FileTransferProtocol,文件傳輸協(xié)議),由名知義,用于文件POP3(PostOfficeProtocol,version3,郵局協(xié)議), SMTP(SimpleMailTransferProtocol,簡單郵件傳輸協(xié)議),用來發(fā)NET(etypeovertheNetwork,網(wǎng)絡(luò)電傳),通過一個終(terminal) UDPBOOTP(BootProtocol,啟動協(xié)議),NTP(NetworkTimeProtocol,網(wǎng)絡(luò)時間協(xié)議), DHCP(DynamicHostConfigurationProtocol,動態(tài)主機配置協(xié)議),IP DNS(NameService,服務(wù)),用于完成地址查找,郵件轉(zhuǎn)發(fā)等工作(TCPUDP)。 ECHO(EchoProtocol,回繞協(xié)議),用于查錯及測量應(yīng)答時間(運行在TCPUDP)。 TCP/IP協(xié)議組中,傳輸協(xié)議也包括所給數(shù)據(jù)應(yīng)該送給哪TCP/IP協(xié)議組中技術(shù)上位于這個層的動態(tài)路由協(xié)議通常被認(rèn)為是網(wǎng)絡(luò)層的UDP不同之處,這在實時數(shù)據(jù)流或者路由高網(wǎng)絡(luò)層丟失率應(yīng)用IP地址表示(代表多個實體接口),這樣 應(yīng)用開發(fā)的(在IP上傳輸SS7),力傳遞”(besteffort)或者說“不可靠”協(xié)議——不是因為它特別不可靠,而是因為它查那它必須自行檢測和判斷,或者使用TCP協(xié)議。UDP的典型性應(yīng)用是如流(音頻和視如果創(chuàng)建可靠的連結(jié)所作的額外工作將是不成比例地大。D目前正由IEFT開發(fā)。它提供TCP流動控制語義,但對于用戶來留UDP的數(shù)據(jù)報服務(wù)模型。TCP和UDP都用來支持一些的應(yīng)用。任何給定網(wǎng)絡(luò)地址的應(yīng)用通過它們的TCP或者UDP端區(qū)分。根據(jù)慣例使一些大眾所知的端口與特定的應(yīng)用相聯(lián)系RTP是為如音頻和流這樣的實時數(shù)據(jù)設(shè)計的數(shù)據(jù)報協(xié)議。RTP是使用UDP包格式作為基礎(chǔ)的會話層,然而據(jù)說它位于因特網(wǎng)協(xié)議X.25ARPANETHost/IMPProtocolIP完成數(shù)據(jù)從源發(fā)送到目的的基本任務(wù)。IP能夠承載多種不同的協(xié)議的數(shù)據(jù);這些協(xié)議使用一個唯一的IP協(xié)議號進行標(biāo)識。ICMP和IGMP12IPICMP(IP發(fā)送的診斷信息)和IGMP(用來管理多播數(shù)據(jù)),IP層之上但是完成網(wǎng)絡(luò)層的功能,這表明因特網(wǎng)和OSIBGP、OSPFRIP實際上也是網(wǎng)絡(luò)層的一和隧道通常預(yù)先建好,并且它們有一些直接發(fā)送到實體接口所沒有的特殊特點(例如,tcp傳輸控制協(xié)議(英語:TransmissionControlProtocol,縮寫為TCP)是一種面向連接的、可IETFRFC793OSI在因特網(wǎng)協(xié)議族(Internetprotocolsuite)中,TCPIP層之上,應(yīng)用層之下的中間TCP8TCP把數(shù)據(jù)流分區(qū)限制)TCPIPTCP層。TCP為了保證不發(fā)生丟包,就給每個包一個序號,同時序號也保證了傳送到接收端實體的包TCPTCP用三路握手(three-wayhandshake)過程創(chuàng)建接。在連接創(chuàng)建過程中,很多參數(shù)TCP連接的正常創(chuàng) 器端被打開以后,用戶端就能開始創(chuàng)建主動打開(activeopen)。 SYNA。服務(wù)器端應(yīng)當(dāng)為一個合法的SYN回送一個SYN/ACKACKA+1SYN/ACK 第一步、chromeDNSDNS緩存(DNS緩存或已失效)第三步、本地的HOST文件DNS的一個系統(tǒng)調(diào)用ip地址HTTPGETHTTP1.0協(xié)議HTML代碼返回瀏覽器面的js、css、靜態(tài)資源,他們同樣也是一個個HTTP請求httpContent-Type版的最大變化,就是引入了持久連接(persistentconnection),TCP連接默認(rèn)不關(guān)閉,可以被多個請求復(fù)用,不用Connection:keep-alive。Connection:closeTCP連接。顯然這樣的效率不高。更好的處理方法是,產(chǎn)生一塊數(shù)據(jù),就發(fā)送一塊,采用"流模式"1.1
chunkedIPIP32(就像每部查看本機IP地址、ipconfig、由于IP地址基于數(shù)字,不方便,于是便用來代替IP地址,是一個查看對應(yīng)的IP地址、DNSDNS記錄了IP地址和的映射(對應(yīng))關(guān)系;hosts文件、DNS服務(wù)器netstat-常見端80、8080、3306、21、通俗的講,能夠提供某種服務(wù)的機器(計算機)1按服務(wù)類型可分為:文件服務(wù)器、數(shù)據(jù)庫服務(wù)器、郵件服務(wù)器、Web按操作系統(tǒng)可分為:Linux服務(wù)器、WindowsApacheNginxIISTomcatNode2數(shù)據(jù)庫服務(wù)器:Oracle、MySQL、PostgreSQL、MSSQL郵件服務(wù)器:Postfix、SendmailHTTP服務(wù)器:Apache、Nginx、IIS、Tomcat、NodeJS3、http、、即服務(wù)器主要提供文檔(文本音頻)瀏覽服務(wù)一般安裝Apache、、PHP、Jsp、Asp、Python、Ruby、Perl具有向服務(wù)器索取服務(wù)能力的終端,如比如、電腦等,通過安裝不同的客戶端軟件,可以獲取不同的服務(wù),比如通過QQ獲得即時通訊服務(wù)、通過迅雷獲得服務(wù)等。常見的客戶端軟件:瀏覽器、QQ、迅雷、FoxmailC/SC/S工作流程圖在C/S結(jié)構(gòu)的情況下,不同的服務(wù)需要安裝不同的客戶端軟件,比如
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年單杯牙刷架行業(yè)深度研究分析報告
- 2025年聚碳酸酯項目可行性研究報告
- 中國體育小鎮(zhèn)建設(shè)規(guī)劃與運營管理分析報告
- 純化纖毛毯行業(yè)行業(yè)發(fā)展趨勢及投資戰(zhàn)略研究分析報告
- 北京某保險經(jīng)紀(jì)項目可行性研究報告
- 2025年度大型商業(yè)綜合體物業(yè)維護及售后服務(wù)合同
- 2025年度高端紅酒全球購銷合作合同范本
- 2025年度新型綠色住宅買賣合同示范文本
- 2025年度大型工礦設(shè)備買賣合同協(xié)議書
- 2025年度城市地下綜合管廊清包勞務(wù)合同規(guī)范
- 房地產(chǎn)調(diào)控政策解讀
- 五年級數(shù)學(xué)(小數(shù)乘法)計算題專項練習(xí)及答案
- 產(chǎn)前診斷室護理工作總結(jié)
- 2024-2025學(xué)年八年級數(shù)學(xué)人教版上冊寒假作業(yè)(綜合復(fù)習(xí)能力提升篇)(含答案)
- 《AP內(nèi)容介紹》課件
- 醫(yī)生定期考核簡易程序述職報告范文(10篇)
- 市政工程人員績效考核制度
- 公園景區(qū)安全生產(chǎn)
- 安全創(chuàng)新創(chuàng)效
- 《中國糖尿病防治指南(2024版)》更新要點解讀
- 初級創(chuàng)傷救治課件
評論
0/150
提交評論