Nodejs英文網:https://nodejs.org/en/javascript
Nodejs中文網:http://nodejs.cn/css
Node.js 是一個基於 Chrome V8 引擎的 JavaScript 運行環境。
Node.js 使用了一個事件驅動、非阻塞式 I/O 的模型,使其輕量又高效。
Node.js 的包管理器 npm,是全球最大的開源庫生態系統。html
javascript是一門運行在瀏覽器端的腳本語言,用來作客戶端頁面的交互。前端
故名思意他的運行環境就是瀏覽器,可是真的是這樣的嗎?vue
其實否則,他的真正運行環境實際上是運行在瀏覽器內核中的js引擎。java
爲何是這樣的了?由於通俗來說瀏覽器的做用就是用來瀏覽網頁的,咱們在瀏覽器除了執行js外還能執行其餘得東西,好比咱們在瀏覽器輸入一個地址敲回車就能夠發送請求而且接收服務器得響應。因此說瀏覽器的第一功能是請求一個http地址,也就是能夠封裝一個請求報文出來,將一個url的地址封裝成一個請求報文,這個報文到服務端,而後給咱們一個響應報文,而後在將響應解析出來,這也是瀏覽器的最大的做用。node
固然服務器響應的內容有可能不同,好比說服務器返回一個html文件,css文件,img文件,用來渲染,咱們稱之爲渲染引擎,除此以外,還能夠執行js,由js引擎來完成,所以能夠說javascript的運行環境是瀏覽器中的js引擎,而不是瀏覽器。瀏覽器是一個大的概念。python
javascript就是用來作交互的,可是籠統的說交互有點不明確,具體一點能夠分爲:jquery
1)操做dom(也就是對dom的增刪改,註冊事件之類的事情)linux
2)發送AJAX請求/跨域
3)BOM交互如給咱們提供頁面跳轉,歷史記錄,控制檯打印日誌
4)ecmascript(js的核心語言,如用來定義變量,函數等)
貌似javascrip對咱們平常的交互均可以完成,貌似什麼均可以作,可是他也有不能作的事。如:
1)涉及到端對端的應用程序,咱們須要操做文件,瀏覽器中的javascript是不能進行文件操做的,雖然h5裏面提供了關於文件相關的API,可是這些API大多數只限於只讀的層面 ,不能像傳統的語言如java,經過傳一個路徑,而後將對應的文件讀出來,說白了就是不能進行文件和文件夾的CURD.
2)瀏覽器端的javascript也沒有辦法去操做操做系統,如獲取操做系統的版本之類的。
那麼爲何不能進行這兩類操做?
實際上是出於安全考慮,由於,js這門語言運行的環境比較特殊,說他特殊,特殊在什麼地方?
雖然咱們編寫好的js代碼最終會放在服務器上,可是他畢竟不是在服務器上執行的,而是經過服務器發送到瀏覽器端執行的,在瀏覽器端執行文件的操做顯然是不安全的,所以說這些功能在客戶端不是不能作,而是因爲特殊的運行環境無法作。
前端開發人員都知道,javascrip是有ecmascrip語言,BOM,DOM組成的,在語言層面,她只是給咱們提供一些操做語法,如定義變量,函數,類型,流程控制等的操做。而BOM,DOM是瀏覽器提供的,並不是es提供的。所以咱們常說起的js其實就是es,js的大部分功能(DOm,BOM(瀏覽器開放出來的API)等的操做)都是由 瀏覽器的執行引擎決定的 ,這也衍生出一個觀點,任何一門編程語言 ,他的能力不是由語言自己決定的,而是由他的執行環境決定的。
好比說java,他便是一門語言也是一個平臺,對於javascript來講語言就是es,平臺是瀏覽器。那麼js只能運行在瀏覽器中嗎?非也!對於大多數語言,都是運行 在一個平臺上的,好比java只運行在虛擬機上,可是也有運行在多個平臺的語言, java在必定層面上來說是沒有必要運行在多個平臺上的,由於虛擬機是跨平臺(也就是跨操做系統如window,linux等)的。
js一樣是能夠運行在多個平臺的,瀏覽器之因此能過運行js,是由於他由js的執行引擎。js一樣,只要由支持他的平臺就能夠執行。所以說要想語言有很強大的功能,只須要提供強大的平臺,node就是這樣一個平臺,可以執行js。
根據官方文檔能夠知道,node就是一個給予谷歌v8引擎的一個javascript的運行時,能夠理解爲運行js的一個虛擬機。他使用的是一個事件驅動,非阻塞I/O模型 ,他是將js的運行環境搬到了服務器端,和客戶端沒有一點關係。是一個純服務端的東西,node只是爲js提供了一個平臺。
node裏面其實還分了兩塊,一是封裝了v8引擎,目的是爲了執行es(如定義變量,定義函數等),另一個提供了大量的工具庫,是幫助node實現各類功能的,提供了一些之前js的環境辦不到的事情,好比文件操做,網絡操做,操做系統的操做。
既然node是一個平臺(所謂的平臺就是用來運行特定語言的),也就意味着node是用來運行語言的,那麼java也是語言,node能運行java嗎?據nodejs創始人Ryan Dahl回憶,他最初是選擇了Ruby這門語言,可是Ruby這門語言的虛擬機效率不怎麼樣最終放棄了,按照這種思路,貌似node將java的虛擬機集成進來應該能夠運行java,但node做者最終選擇了javascript。
這樣js就實現了在服務端運行的可能,js運行在node平臺上(分爲v8部分,用來執行es,和大量的工具庫組件(API)稱之爲libuv,提供了之前js的環境辦不到的事,如文件操做,網絡操做等等)。
(1)node能夠接受客戶端用戶的全部請求,而且可以快速的給出響應,所以node能夠用來作網站。
(2)node能夠做爲一個中間層來來分發調用數據接口,好比有一個網站數據是有java提供的,咱們可讓node做爲一箇中間層,來接受用戶的請求,而後經過node來調用java數據接口,獲取到數據後直接在node層面作html的瓶裝,而後將渲染好的頁面直接給用戶。爲何要這樣作,直接請求java接口不行嗎,這是由於node被稱之爲高性能的web服務器,在併發和抗壓方面都比傳統的平臺要好不少,所以這樣一包裝能夠極大的減輕服務器的開發。
經過上面的兩點,能夠總結出,node在web中要麼從前端頁面到後端服務全包了,一個是隻作其中的一點。
一言以蔽之,node就是一個javascript的運行環境(平臺),他不是一門語言,也不是javascript的框架。能夠用來開發服務端應用程序,web系統。其特色是體積小,快速,高性能。
簡單的說,npm就是JavaScript的包管理工具。相似Java語法中的maven,gradle,python中的pip。
在這裏雖然node.js更新到了8.11.1的版本,仍是使用6.10.3版本。
使用mac電腦選擇node-v6.10.3.pkg 下載安裝。
npm是和Nodejs一塊兒並存的,只要安裝了Nodejs,npm也安裝好了,安裝好Nodejs以後。打開終端,執行以下命令,檢查是否安裝成功。
MacBook-Pro:~ hqs$ node -v v6.10.3 MacBook-Pro:~ hqs$ npm -v 3.10.10
因爲npm自身的更新頻率比Node.js高不少,因此經過上面安裝的npm可能不是最新版本,能夠經過下面的命令單獨更新npm。在這裏不建議更新。
$ sudo npm install npm@lastest -g
在去下載包以前,首先去當前項目的包進行初始化操做,執行命令:npm init。
運行這個命令後,它會詢問一些關於包的基本信息,根據實際狀況回答便可。
若是不喜歡這種方式,可使用npm init --yes
命令直接使用默認的配置來建立package.json
文件,最後根據須要修改建立好的package.json
文件便可。
$ npm init This utility will walk you through creating a package.json file. It only covers the most common items, and tries to guess sensible defaults. See `npm help json` for definitive documentation on these fields and exactly what they do. Use `npm install <pkg> --save` afterwards to install a package and save it as a dependency in the package.json file. Press ^C at any time to quit. name: (ES6_demo) npm_study version: (1.0.0) 1.0.3 description: 學習npm entry point: (index.js) test command: git repository: keywords: 123 author: hqs license: (ISC) About to write to /Users/hqs/PycharmProjects/ES6_demo/package.json: { "name": "npm_study", "version": "1.0.3", "description": "學習npm", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [ "123" ], "author": "hqs", "license": "ISC" } Is this ok? (yes) yes
生成的package.json文件,主要字段的含義以下:
name: 模塊名, 模塊的名稱有以下要求: 所有小寫 只能是一個詞語,沒有空格 容許使用破折號和下劃線做爲單詞分隔符 version: 模塊版本信息 description:關於模塊功能的簡單描述,若是這個字段爲空的話,默認會從當前目錄的READMD.md或README文件讀取第一行內容做爲它的默認值。 main: 模塊被引入後,首先加載的文件,默認爲index.js。 scripts: 定義一些經常使用命令入口 關於最後一個英文的意思,咱們能夠證實,當我執行npm init以後,會自動的生成package.json的文件。
使用npm install
會讀取package.json
文件來安裝模塊。
安裝的模塊分爲兩類dependencies
和devDependencies
,分別對應生產環境須要的安裝包和開發環境須要的安裝包。 一樣在安裝模塊的時候,能夠經過指定參數來修改package.json文件,以jquery和webpack作例子。
$ npm install vue --save # --save:讓vue包下載到當前目錄下 npm_study@1.0.3 /Users/hqs/PycharmProjects/ES6_demo └── vue@2.6.10 $ npm install jquery --save $ npm install webpack --save-dev
執行後,會將新安裝的模塊信息記錄到package.json
文件(該文件主要負責項目包的管理):
{ "name": "npm_study", # 模塊名 "version": "1.0.3", # 項目版本號 "description": "學習npm", # 項目描述 "main": "index.js", # 項目入口文件 "scripts": { # 項目腳本 "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [ "123" ], "author": "hqs", # 項目做者 "license": "ISC", # 認證證書 "dependencies": { # 當前項目依賴 "jquery": "^3.3.1", "vue": "^2.6.10" } }
hqs$ npm install jquery --save npm_study@1.0.3 /Users/hqs/PycharmProjects/ES6_demo `-- jquery@3.3.1 npm WARN npm_study@1.0.3 No repository field.
執行以上命令,即可以安裝對應的包到執行命令的當前目錄,並建立一個node_modules
的文件夾,而後把須要安裝的安裝包下載到裏面。同時package.json文件的dependencies配置更新。
在npm install安裝時,能夠經過@來指定下載的模塊版本。
MacBook-Pro:ES6_demo hqs$ npm install bootstrap@3.1.1 --save npm_study@1.0.3 /Users/hqs/PycharmProjects/ES6_demo `-- bootstrap@3.1.1 npm WARN npm_study@1.0.3 No repository field.
node_modules和package.json變化以下:
MacBook-Pro:ES6_demo hqs$ npm uninstall bootstrap --save - bootstrap@3.1.1 node_modules/bootstrap npm WARN npm_study@1.0.3 No repository field.
變化效果以下:
使用npm下載依賴時,因爲是從國外的網站上下載內容,因此可能常常會出現不穩定的狀況,因此須要下載cnpm代替npm,cnpm是國內淘寶的作的,在國內使用穩定。
1.下載cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
2.使用cnpm
cnpm install jquery --save