關於node.js的基礎
node.js 的一些基礎
前端的工程化,模組化,框架,需要有一套工具去支撐系統執行起來.而這套工具就是需要nodejs這個環境去實現的,因此, 首先需要先學習node.js開始
node.js 的簡單介紹
首先,什麼是node.js?
- 是基於chrome V8 引擎的javascript執行環境(官網上這麼寫的)
- 聽著有點抽象,下面舉例demo來加強理解
node.js 的用處
- 開發網站的後臺,之前的做的小demo裡有用到,用來開啟一個本地伺服器https://github.com/gitgundam/server-mock
- 開發網站後臺可以使用很多語言,但是如果只會js,那就很麻煩,還需要學習其他語言,現在有了node.js.直接使用js即可實現,學習成本更低
- 開發本地工具,應用
- 開發本地工具,應用,在node.js之前需要學習更多其他語言(例如 c語言).現在node.js即可實現,學習成本更低
node.js 的特點
- 事件驅動,非阻塞式I/O模型
- 強大的生態,第三方
提到node.js,就不得不丟擲兩個概念
計算密集型
- 大量的計算,消耗cpu資源,比如計算圓周率,對視訊進行高清解碼
- c語言
- 比如密碼破解
I0密集型
- 網路/磁碟的讀寫
- node.js
- 比如網站展示,資料互動,對cpu運算要求不高
安裝node.js
進入官網下載安裝即可,安裝會附帶npm.
下面是簡單的例子加深對node.js 的理解
例子1
用最簡單的一個例子實現node.js 的功能
- 本地dmoe資料夾 建立test-1.js檔案
let a = 1
let b = 2
console.log(a+b)
- 開啟終端,在資料夾目錄使用node.js 執行 test-1.js檔案
- 結果如下圖,輸出3
例子2 使用node.js的內建模組來做些事
讀取一個檔案A,再將檔案內容寫入檔案B中
- 首先,從node.js的官方API文件中可以看到,非同步地讀取檔案的全部內容。
- 文件上寫了這麼用
- js這麼寫
const fs = require('fs') //載入node.js的fs模組
fs.readFile('./A.md','utf-8',(err, data) => {
if (err) throw err;
console.log(data);
})
使用node.js環境執行test-1.js,讀取A.md檔案的內容並列印出來,得到結果
- 使用
把A.md的內容轉成大寫並寫入B.md
const fs = require('fs') //載入node.js的fs模組
fs.readFile('./A.md','utf-8',(err, data) => {
if (err) throw err;
text = data.toUpperCase()
fs.writeFile('./B.md',text,err=>{
console.log(err)
return
})
console.log('寫入完成');
})
例子3 引入本地模組
很多情況下,我們需要自己寫點東西來實現想要的功能,這時候就需要引入自己的模組
- 定義一個模組
//util.js
//定義一個模組util,裡面是其功能
function sum(){
return [...arguments].reduce((v1,v2)=>v1+v2)
}
//把自定義的fact繫結到module.exports這個物件上
module.exports.sum = sum
//其他檔案裡就可以引入這個模組,通過require('檔案路徑')
- 呼叫這個模組
//text-2.js
const util = require('./util.js')//一定要寫相對路徑,否則node.js會先從內建模組中尋找
console.log(util.sum(1,2,3,4,5))
module.exports
module.exports
理解為就是一個空物件,上面那段程式碼中,將sum繫結到這個空物件中.
- 其實字面意思就是模組輸出.需要呼叫時,先載入模組,然後呼叫這個空物件中的方法
例子4 使用npm第三方模組
npm的最大優勢就是擁有一個強大的資料庫,擁有全世界的開發者開發的模組供使用
https://www.npmjs.com/可以在這個網站搜尋模組,然後根據文件使用.
- 例如實現一個將markdown格式文字轉換為html格式文字
- 比如使用下面這個人寫的模組
- 先根據文件寫的來
const fs = require('fs')//使用fs模組
//根據文件的設定來
const MarkdownIt = require('markdown-it')
let md = new MarkdownIt()
//先讀取內容
fs.readFile('./A.md', 'utf-8', (err, data) => {
if (err) throw err
let result = md.render(data)//文件中的api,轉換成htmml的內容
//把內容輸入B.md
fs.writeFile('./B.md', result, err => {
if (err) throw err
console.log('寫入完成')
})
})
結果會發現: 直接報錯.為啥呢? 因為模組還沒下載到本地,因此需要先下載這個模組到本地
-
使用
npm install xxx
來下載模組
-
可以發現當前資料夾內出現了個新的資料夾
-
再次終端中執行
node test-3.js
-
這次內容寫入成功,輸出寫入完成,檢視B.md,可以發現內容確實轉換完成
以上就是node.js模組化的使用方法
common js規範
下面說下common js規範,那麼什麼是common js規範呢?
一個檔案是一個模組
- 變數/函式/類 都是私有的.
每個模組內部,module都是代表當前模組
剛才就用到了的module.exports
,意思就是自己的模組對外輸出.這是一個對外介面,同時這是個空物件,在這個模組上(物件上)可以帶上自己模組本身的函式.
module.exports
是一個對外介面.載入某個模組,其實就是在載入該模組的module.exports
- 注意
module.exports
和exports
的差異,預設module.exports = exports
(簡寫)
require()方法用於載入模組
- 需要注意載入模組路徑寫法的差
注意注意!! 預設module.exports = exports
,所以單獨exports
是個物件,需要新增物件裡的屬性!!!然後再把模組裡的函式新增到這個屬性上!!! - 也可以
module.exports
直接等於 函式名稱, 這樣當require()
時,require()就是模組本身.模組就是個函式,可以直接使用
Node.js 在require第三方包時
- 先在當前專案的 node_modules裡查詢這個包
- 如果當前專案的 node_modules裡找不到,再從上一級路徑的node_modules裡查詢
- 最終會找到 /(根目錄),如果還找找不到,會報 “找不到模組”的錯誤
下面是node.js 模組化圖解
相關文章
- 關於hive的基礎Hive
- 關於mybatis,需要掌握的基礎MyBatis
- vue 前端關於token的使用(基礎)Vue前端
- 關於DataTable的兩篇基礎文章
- 關於vue基礎總結Vue
- 關於線段樹基礎
- Node.js 指南(關於Node.js)Node.js
- 關於mysql基礎知識的介紹MySql
- 關於node.js中流的理解Node.js
- 關於node.js的程式管理Node.js
- Nodyn: 基於JVM的Node.JSJVMNode.js
- Python基礎:關於__name__Python
- 關於公關專案管理的基礎意識(轉)專案管理
- Node.js 系列 - 基礎概念Node.js
- 關於MongoDB的簡單理解(一)--基礎篇MongoDB
- 【機器學習基礎】關於深度學習的Tips機器學習深度學習
- java基礎 關於執行緒安全Java執行緒
- 關於 Node.js 之 BufferNode.js
- Node.js Streams 基礎總結Node.js
- node.js初級基礎一Node.js
- 一些關於網路的基礎知識
- 關於 Node.js Stream API 的用法概述Node.jsAPI
- 關於SqlServer那些事1(迴歸基礎)SQLServer
- javaweb關於jsp、servlet基礎筆記JavaWebJSServlet筆記
- Express 實戰(二):Node.js 基礎ExpressNode.js
- Java基礎7:關於Java類和包的那些事Java
- 關於mysql,需要掌握的基礎(二):JDBC和DAO層MySqlJDBC
- Java學習關於集合框架的基礎介面--Collection介面Java框架
- C++基礎::關於區間端點的問題C++
- [譯] Node.js 基礎知識:沒有依賴關係的 Web 伺服器Node.jsWeb伺服器
- 基於Node.js的HTTP/2 Server實踐Node.jsHTTPServer
- 基於 Koa.js 的 Node.js MVC 框架Node.jsMVC框架
- ThinkJS基於Promise的Node.js MVC框架PromiseNode.jsMVC框架
- NodeBB – 基於 Node.js 的開源論壇Node.js
- 基於Node.js的自動化工具GulpNode.js
- 關於 iOS/OS X 執行緒安全的基礎知識iOS執行緒
- Node.js基礎知識之Path模組Node.js
- 基於graphql的微服務基礎框架微服務框架