1.命名衝突css
2.文件依賴問題html
-經過匿名函數自執行的方法封裝模塊, -能夠保護私有變量和方法前端
-加載文件依賴、模塊依賴的,用於define函數體內java
2. twonode
程序中的模塊化jquery
爲何要在 程序 中使用 模塊化的開發方式linux
SeaJS
的使用define
做用域就在define的函數體裏,三個參數require、exports、modulerequire
require
加載過的模塊會被緩存require
是同步加載模塊的exports
和 module.exports
exports是module.exports的別名,exports能作什麼,module.exports就能作什麼seajs.use(callback)
##1.解決幾個問題? ###1.前端、後端都是幹什麼的? 前端 作靜態資源的 後端 操控服務器的硬件的c++
國內一些創業公司用用的比較多,功夫熊(作上門保健的,美甲、按摩) 國外的一些大公司都有使用:Facebook、Twitter、Google 國內的一些大公司:Alibaba(天貓全部的頁面都是經過Node提供的服務)、Tencent、Baidugit
4.js開發 ###3.什麼是JavaScript? 一門腳步語言 須要嵌入html執行github
###4.瀏覽器中的JavaScript能夠作什麼? 校驗表單 操做dom 等等
###5.瀏覽器中的JavaScript不能夠作什麼? 操做服務器硬件
###6.瀏覽器與JavaScript是什麼關係? 瀏覽器解析js,目的是爲了讓計算機能看懂js,看懂01010101,機器碼、字節碼 編譯
內核-->js引擎
引擎 1.轉化 汽油柴油等等->轉化->成動能 模板+數據--->頁面 js代碼--->機器碼\字節碼 2.移植性 js引擎套一個殼子,寫js代碼傳給js引擎,操做硬件 node.js v8引擎去解析js
###7.JavaScript只能夠運行在瀏覽器中嗎?
##什麼是 Node?
JavaScript運行時
環境Node 是一個能夠解析和執行 JavaScript 代碼的 運行時環境
win + r
,而後輸入 cmd
,而後敲回車 就能夠進入 cmd 控制檯nvm的安裝方式,node.js version manager 是一個node的版本管理工具 爲了解決node版本切換問題 右鍵在此電腦上點擊一下--》屬性---》系統---》高級系統設置---》環境變量 控制面板---》系統---》高級系統設置---》環境變量 NVM_HOME---C:\dev\nvm NVM_SYMLINK--C:\dev\nodejs 新建一個path %NVM_HOME%;%NVM_SYMLINK%
nvm 用法 查看版本號 nvm list 用哪一個版本(已經下載過的版本) nvm use 版本號 nvm use 版本號 32 下載相對應版本 nvm install 版本號 nvm install 版本號 32
nvm下載的是二進制版本
## 控制檯基本使用 容許用戶能夠在終端命令臺中與操做系統交互,其實就是輸入與輸出 ### 如何打開cmd 1. 經過 按 window 鍵,輸入 `cmd` 打開cmd程序 2. 經過 `win+r` 輸入 `cmd`,敲回車就能夠進入 ### 基本命令 - `dir` directory 列出當前目錄下全部的條目 + 別名 `ls` 在 powershell 中可使用 - `cd` change directory 切換目錄
切換到當前目錄下的 Desktop 目錄 當想切換到當前目錄的時候,最好使用 cd ./ 相對路徑的形式 C:\Users\iroc>cd Desktop C:\Users\iroc\Desktop>
在Windows 上切換盤符: d:
切換絕對路徑以後再同一個盤符下才有效
切換到上一級目錄 C:\Users\iroc\Desktop\code\seajs>cd ../ C:\Users\iroc\Desktop\code>
連續進入多級目錄 C:\Users\iroc\Desktop\code>cd seajs/a C:\Users\iroc\Desktop\code\seajs\a>
- `cls` clear screen 清屏 + 別名 clear 在widnows中的 `powershell` 中可使用 windows下的尋址用\反斜槓 ### path 環境變量 目的是爲了在控制檯中的任何目錄均可以快速打開或者使用該可執行文件 環境變量就是用來存儲系統級別的變量 - 添加環境變量 + 個人電腦 -> 右鍵選擇屬性 -> 高級系統設置 -> 切換到`高級`面板 -> 環境變量 + 第一種方式:直接把可執行文件所屬的目錄 放到 PATH 環境變量中(若是沒有PATH環境變量,本身新建) + 第二種方式:新建一個環境變量,變量名規範:邏輯名_HOME 變量值:該可執行文件所屬的目錄 + 注意:不管是直接添加的路徑仍是引用的變量名,必定要用 英文的分號 區分開 + 引用變量名的時候,變量名兩邊都是 `%` `> qq` 當你在控制檯中輸入一個程序的名字的時候,cmd 默認把它當成一個可執行文件去執行了, 優先找當前目錄下是否有沒有一個叫作qq.exe 的可執行文件,若是有,直接執行打開 若是沒有,cmd會進入 path 環境變量中 一個目錄一個目錄的挨着查找裏面是否有該可執行文件 ## REPL(Read-eval-print-loop) 運行環境 用來測試一下代碼的,repl和chrome的控制檯很像 - 經過在控制檯中輸入 `node` 敲回車就能夠計入 REPL 運行環境 - 經過在REPL運行環境中 連續按兩次 `Ctrl+C` 就能夠退出 REPL 運行環境 ## 執行js文件 用node執行js文件,文件在當前目錄下---->node +文件名 若是不在當前目錄下,node +文件路徑的形式執行 相對路徑 ./當前路徑 ../上級目錄 絕對路徑執行js的方式 node c:\Users\cena\Desktop\code\01helloworld.js ## Global global和window很像,都是全局對象 ## CONSOLE
斷言 是用來測試用的 斷言就是假定一個條件,若是條件成立則不輸出任何內容,若是條件不成立則報錯還要輸出想要輸出的內容。 console.assert(條件,條件不成立輸出的內容); var foo=3; console.assert(foo==3,"失敗"); time() timeEnd()成對出現,計算在兩個方法中間的代碼的運行時間,傳入的參數要一致 console.time('test');
console.timeEnd('test1');
### __dirname 和 __filename __dirnamee 用來找到當前文件夾的路徑 __filename 用來去到當前文件的路徑 不知道代碼要才哪使用的時候,用於靈活的寫代碼取路徑的時候。 它們屬於模塊做用域,能夠直接使用 它們兩個用來獲取路徑的,通常用於操做文件路徑的時候,纔會用到 ## process process 是一個全局可用對象,用來和咱們如今啓動中的node進行交互的 process.version取版本號 在控制檯作標準輸出 process.stdout.write(`123123`); process.pid:當前進程的進程號。 process.version:Node的版本,好比v0.10.18。 process.platform:當前系統平臺,好比Linux。 process.env:指向當前shell的環境變量,好比process.env.HOME。 process.stdout:指向標準輸出。 process.stdin:指向標準輸入。 process.stderr:指向標準錯誤。 ## 模塊系統 ## node.js模塊化
一個js文件在node裏面咱們就理解爲一個模塊 require用來加載模塊 module.exports用來曝露屬性和方法的,由於模塊有封裝性,須要打破封裝性曝露方法和屬性來 exports是module.exports的別名,exports能夠作的事情,module.exports均可以作,exports只能用.的形式曝露屬性和方法
**3.three** ## 1.1 概念 - Node.js與JavaScript的關係? - Node.js基於哪一個JavaScript引擎? - Node.js的特色? - Node.js只能運行在Windows上嗎? ## 1.2 cmd - cd(change directory)切換目錄 - md(make directory)新建目錄 - rd(remove directory)刪除非空目錄 - dir(directory)查看目錄中的條目 ` ls linux` - ren(rename)重命名文件 - del(delete)刪除文件 - cls(clear screen)清屏 `clear linux` ## 1.3 path 環境變量 - path環境變量的做用是什麼? - 在Windows中配置path環境變量的方法是什麼? ## 1.4 REPL(Read Eval Print Loop)交互式運行環境 - 做用:通常來講,能夠用來作一些API的測試 - 進入REPL運行環境 - 退出REPL運行環境 ## 1.5 Node.js基礎知識 - 如何讓Node.js執行一個js文件 `node 文件名` -絕對路徑和相對路徑 `.\或者..\ 相對路徑` `c:/xx/xx.js絕對路徑` `\ linux 根目錄 windows 盤符的根目錄` ## 1.6 globals - global - \__dirname和__filename ` 關於這倆傢伙,通常在讀取文件的時候,最好使用絕對路徑的方式,經過這倆傢伙拼接 ` - console + assert(foo==1,"失敗");斷言 + time('timer') + timeEnd('timer') + 成對的出現 ## 1.7 模塊系統 - 什麼是模塊 `一個文件就是一個模塊 ` - 模塊做用域 `在一個模塊內變量、函數、對象都屬於這個模塊,對外是封閉的。 ` - require `require("路徑")` //路徑現階段使用相對路徑 - exports `是module.exports的一個別名、引用,exports能作的module.exports均可以完成。` - module.exports `最終曝露出去的對象,想曝露出去對象、屬性、方法就掛載到module.exports` #2.模塊系統 ##2.1模塊的種類 在Node.js中,模塊分爲兩類:
第一類,核心模塊(原生模塊),node自帶,用名稱直接能夠加載。
module 是一個全局對象,它的做用是存儲模塊信息的,每個js是一個模塊,每個模塊裏面都有一個module,module裏面還存儲了父子結構 直接給module.exports賦值,exports是無效,用屬性的形式去賦值的時候兩者都有效 ## 2.2 優先從緩存加載
common.js規範----->加載後,再次加載時,去緩存中取module.exports
## 2.3 require參數解析
核心模塊是Node.js原生提供的加載核心模塊的時候, 不須要傳入路徑,由於Node.js已經將核心模塊的文件代碼 編譯到了二進制的可執行文件中了 在加載的過程當中,原生的核心模塊的優先級是是最高的
![Alt text](./pic/image1.jpg) - ./或../開始的相對路徑文件模塊 ``` 在加載一個本身編寫的模塊的時候,最好使用__dirname 和 你要加載的模塊的文件名拼接 ``` - 以/開始的絕對路徑文件模塊
- 標識符中能夠不包含擴展名 + Node會按照`.js、.node、.json`的次序補足擴展名,依次嘗試
不包含擴展名的時候,Node.js會按照 路徑.js 之後本身在加載js文件模塊的時候,就省略掉.js後綴就能夠了 路徑.node 後綴爲node的文件是c/c++寫的一些擴展模塊 路徑.json 若是是加載json文件模塊,最好加上後綴.json,能稍微的提升一點加載的速度 .json文件最終Node.js也是經過fs讀文件的形式讀取出來的,而後經過JSON.parse()轉換成一個對象
Node.js會經過同步阻塞的方式看這個路徑是否存在 依次嘗試,直到找到爲止, 若是找不到,報錯
- require 加載包的時候
直接寫包名,先在包內的node_modules, 目錄下查找,去父級目錄下的node_modules目錄下查找, 依次向上查找,直到根目錄。
[參考文獻](http://www.infoq.com/cn/articles/nodejs-module-mechanism/) # 3.包 還有一種特殊的文件模塊,其實就是包 - 問題:你開的一個功能模塊,仍是以文件的形式散列的,你給別人使用的時候很麻煩。 - 包的做用:在模塊的基礎上進一步組織JavaScript代碼 ## 3.1 包的組成 - 包結構 - 包描述文件package.json + 描述你的當前的包的一些相關的信息 +dependencies - 包名:「版本號」 - > +版本號 下載大於某個版本號,npm會下最新版 - < +版本號 下載小於某個版本號,npm會下小於這個版本號最新版 - <= 小於等於 必定會下你寫的這個版本,除非沒有你寫的這個版本 - >= 大於等於 下載最新版 - *、" "、X 任意 npm會給你下最新版 - ~ +版本號 會去下約等於這個版本的最新版,在大版本不變的狀況下下一個比較新的版本 - ^ +版本號 不躍遷版本下載,^2.1.0 npm會下載大版本不變,去下載2.x.x版本里的最近版 [參考文獻 package.json全字段解析](http://blog.csdn.net/woxueliuyun/article/details/39294375) ## npm install -g fast-init ## 3.2 package.json 包的描述文件 package.json文件內部就是一個JSON對象,該對象的每個成員就是當前項目的一項設置, 好比name就是項目名稱,version就是項目的版本號 在模塊的加載機制中,有一個main屬性是很是重要的,它很大意義上決定了包要導出的模塊位置 ## 3.3 # npm - 基於Node.js開發的包的託管網站 - Node.js包管理工具 npm :基於包的規範實現的一個包管理工具 - npm install 包名 當執行npm install的時候,它會自動跑到npm的網站,而後找到該包的github地址, 找到以後,下載這個壓縮包,而後在執行npm install的當前目錄下找一個叫作node_modules目錄 若是找到,直接解壓這個壓縮包,到node_modules目錄下 若是找不到,則新建一個node_modules目錄,解壓到該目錄 - npm install -g 包名 表示全局安裝 npm在安裝的時候,在全局設置了一個安裝目錄,只要是全局安裝就會把包安裝到這個目錄裏面去 npm install -g 包名 只要是全局安裝就是安裝命令行工具 - npm install 縮寫 npm i 當執行npm install的時候,會自動在當前目錄中查找package.json文件 若是找到,找裏面的 dependencies 字段,安裝該字段中全部依賴的項 - npm docs 包名 通風這個命令打開 包相對應的文檔 - npm install --save 生產環境 npm i -S jquery@3.* 我們之後在作項目的時候,先初始化一個package.json文件, 在安裝第三方包依賴的時候,必須使用npm install --save express,添加依賴項到package.json文件中, 實際就是添加到dependencies字段中 - npm install -save-dev 開發環境 npm i -D jquery@3.* 我們之後在作項目的時候,先初始化一個package.json文件, 在安裝第三方包依賴的時候,必須使用npm install --save express,添加依賴項到package.json文件中, 實際就是添加到devDependencies字段中 - npm config set prefix 修改全局安裝目錄 不建議使用,建議去文件夾裏面改 C:\Users\用戶名 裏面有一個 .npmrc文件 去裏面改prefix = C:\dev\npm (寫你的路徑) 去全局的環境變量path裏把C:\dev\npm 路徑加進去 [參考文獻 npm的命令](https://docs.npmjs.com/) # npm 這種東西的最終的目的就是:讓你的開發模式工程化,都依靠工具來管理 # nvm npm nrm ## 3m
nvm node版本的管理工具 npm node的包管理工具 nrm npm的數據源管理工具
npm install -g nrm
#4.文件操做 ###4.1箭頭函數
箭頭函數就是一種語法糖 語法糖是一種語法,用這種語法能嚐到甜頭,能是編程高效 當函數體有一個參數有返回值的時候
var foo=function(v){ return v;} var foo=v=>v; 當函數體沒有參數有返回值的時候
var foo=function(){ return v;}
var foo=()=>v; 當函數體有多個參數有返回值的時候
var foo=function(v1,v2){ return v1+v2;} var foo=(v1,v2)=>v1+v2; 當函數體有多個參數沒有返回值的時候 var foo=function(v1,v2){ console.log(v1); console.log(v2); } var foo=(v1,v2)=>{ console.log(v1); console.log(v2); };
###4.2文件讀寫 - fs.readFile() 讀文件 fs.readFile(file, [options], callback) //file 讀文件的路徑 //options 用[]包裹的可選參數,object {"encoding":"uft8","flag":"r"} string 'utf8' //callback function callback函數裏面有兩個參數 //err表示錯誤對象,若是readFile發生錯誤了,在callback函數裏面會回返回err,err對象裏面存着錯誤信息 //如何讀文件成功,err爲null //data就是讀文件,讀出來的內容。 - fs.access(path,[mode], callback) 用來判斷文件是否存在 //path 判斷路徑是否正確(也能夠判斷文件)'./pic' //mode通常不用,默認就能夠了,用的話是用來判斷文件是否可讀可寫可執行 //callback 只有一個參數err,錯,文件有問題 # 其它 - vsc教程[http://i5ting.github.io/vsc/](vsc教程) 2.npm 和package.json結合着連 npm init 初始化package.json npm install 先配置package.json裏的devDependencies dependencies字段 npm i -S +包名 npm install –save 不光能下載包,還能把依賴添加到package.json npm i -D +包名 npm install –save-dev 不光能下載包,還能把依賴添加到package.json npm docs 包名 查看包的相關文件 jquery、mongoose、http-poster npm list 當前目錄有什麼包,檢測node_modules裏面有什麼 npm install –g 包名 全局安裝 cnpm、nrm 3.cnpm 4.nrm 安裝目錄npm install -g nrm nrm ls 查看數據源 nrm test 測試你的網連那個npm的數據源快 nrm use 切換數據源 5.閱讀參考文獻 樸靈 require 閱讀參考文獻 package.json全字段解析 6.github 1. **4.four** ## 1.0 nvm經常使用命令 - nvm項目地址:[nvm-github地址](https://github.com/coreybutler/nvm-windows) - 查看全部已安裝的本地的node版本 `nvm list` - 切換node版本 ` nvm use 版本號` - 安裝指定版本的node ` nvm install 版本號 位數` - 卸載已安裝的指定版本的node ` nvm uninstall 版本號` ###1.1模塊的分類 ```模塊分爲核心模塊、文件模塊,其中包是一種特殊的文件模塊 ``` - 核心模塊 + fs file system + http + os + path + querystring + url ###1.2模塊三兄弟 require、module、exports - require的實現原理 ```把代碼從文件中讀出來,用匿名函數的方式頭尾包裝,返回modules.exports對象,曝露出想要曝露出來的屬性、方法、對象。 補充了exports是指向modules.exports的一個指針,exports能作的,modules.exports都能作的。
第二次加載的時候優先從緩存查找讀取, node_modules中沒有的,從父文件夾中查找,若是沒有,直到根目錄爲止
裏面保存了模塊的信息路徑、父子信息、曝露出的對象信息
module.exports 別名 module.exports=123;已經使用過一次了,exports就不生效了 module.exports.a=12;這樣使用,exports是還可使用的
###1.4包
package.json是包的說明書, dependencies當前包所依賴的包:>、<、>=、<=、~、*、" "、X、^、 devDependencies 開發環境中包所依賴的包:
###1.5npm
npm init 建立package.json文件 npm install 將package.json中的文件依賴的包從網上下載到本地 npm install -save 包名 將包下載下來而且加載到dependencies中去 npm i -S 包名 替代上面的命令 npm install -save-dev 包名 將包下載下來而且加載到devDependencies中去 npm i -D 包名 替代上面的命令 npm install -g 包名 全局安裝 安裝的是全局工具 npm docs 包名 查看包的文檔
###1.6nrm npm的數據源管理工具
nrm ls 查看npm的數據源 nrm use 切換npm下載包的地址 nrm test 測試下哪一個數據源快
npm node的包管理工具 nvm node的版本管理工具 nrm npm的數據源管理工具 ###1.8箭頭函數
語法糖替代function(){} v=>v
#2.i/o ###2.1什麼是i/o?
io input、output 輸入輸出,電腦的輸入輸出,例如音頻錄音表示聲音輸入、聽音樂是聲音的輸出 網絡上的傳輸所有是在傳字符串,i/o在服務器上能夠理解爲讀寫操做。
###2.2什麼是併發?
一個時間段中有幾個程序都處於已啓動運行到運行完畢之間。
#3異步i/o與事件驅動 ###3.1什麼是進程?
進程是爲運行當中的應用程序提供運行環境的 一個運行當中的應用程序就會有一個進程與之相對應
###3.2什麼是線程?
線程是用來運行應用程序中代碼的, 一個線程在一個時間只能作一件事件。 多線程,調度起來很麻煩。 node是單線程執行,用異步替代了多線程
###3.3同步、異步有什麼不一樣?
異步不會阻塞後面的代碼,同步會阻塞後面的代碼 一條線程先執行同步的代碼後執行異步的代碼。
###3.4異步非i/o操做和異步i/o操做
異步非io setTimeout setInterval 異步IO操做 操做文件 網絡操做 fs
###3.5node的事件驅動模型?
###3.5異步和多線程的比較?
node的異步是幫助咱們去作了多線程的操做,簡化了代碼
#4.文件操做 ###4.1文件的完整讀寫
fs模塊---》操做文件---》io----》node的特長 fs模塊是node很是重要的模塊,能體現出node的優點
#5.異常處理 什麼是異常? 計算機不能處理的情況稱之爲異常 try catch 只能捕獲同步異常 try { fs.accessSync('./02sfdasdfio.js'); } catch (err) { console.log("1"+err); } 異步異常對象和被try catch捕獲的對象是同樣的
#6.path
console.log(path.basename('C:\temp\myfile.html'));
console.log(path.basename('/foo/bar/baz/asdf/quux.html', '.html'));
console.log(path.dirname('/foo/bar/baz/asdf/quux.js'));
console.log(path.extname('/foo/bar/baz/asdf/index.js.css.html'));