一、node入門
(一)、 首先我們需要下載安裝
1.說實話就是一個代碼的運行環境,我們下載是下載穩定版LTS后綴 下載完之后就一頓安裝就完事
(二)、 明確一點,還有簡單的運行
我們的ECMAScript依然是萬物的核心,node的組成就是ESCA 還有Node模塊
所有的語法都是js的,
node執行方式:在同級的文件夾下node XXX.JS就能運行了
(三)、 Nodejs模塊花開發
’模塊化開發‘是一種軟件開發方式
-
js有弊端,文件與文件依賴不明確.命名沖突導致代碼覆蓋
-
使用模塊化開發方式就可以解決這個問題
- nodejs開發的模塊開發規范
nodejs中 一個js就是一個模塊
默認不會導入模塊內的東西
我們使用exports可以到處當前模塊里的東西(變量啊 )
我們在另一個文件我們需要使用的話就用require就行了
核心:exports對象里面就保存了你先要到處的屬性(函數也是屬性本質上來說)
在另一個模塊里 requerti就是返回以惡express對象,這樣我們模塊之間就能實現通信了
示例代碼
a模塊
const add = (n1, n2) => n1 + n2;
exports.add = add; //這個的意思就是到出
b模塊
//const a = require('./03.module-a.js');
//這個是可以去掉js的
const a = require('./03.module-a'); //它是由返回值的,值= 窮啊hi前模塊中的experson對象
console.log(a);
console.log(a.add(10, 20));
除了exports還有什么樣的方式導出呢?
1.exprots
2.方式
module.exports.version = version;
module.exports.sayHi = syHi;
exports對象還有moudle.exports
這兩個都是一個對象地址的引用
注意: 當exports對象和moudle.exports對象指向的不是同一個對象時 以module.exports為准
我們的導入操作依然沒有變化:require('./04.module.exports.js'); 注意這個js后綴可以去掉,這里導入是相對路徑
代碼舉例:
const greeting = name => `hello ${name}`;
const x = 100;
exports.x = x;
module.exports.greeting = greeting;
// 當exports對象和moudle.exports對象指向的不是同一個對象時 以module.exports為准
module.exports = {
name: 'zhangsan'
}
// 這樣的話 你這樣的寫就錯了我們不以這個為准我們以exports為准
exports = {
age: 20
}
(四)、 Node的一些重要的系統模塊
- 文件模塊fs
功能:
1.讀取文件的模塊
2.寫入文件
3.創建文件夾
- 使用舉例:讀取文件
代碼規范: fs.redFile('路徑(注意)',[文件編碼],callback)//文件編碼是可選項
// 1.通過模塊的名字fs對模塊進行引用
// 模塊的名字是很重要的, 因為在node中, 一些系統的api是也要遵循node引入規范的
const fs = require('fs');
//這樣你就拿到了,一個可以處理文件的fs對象了 這個對象就可以處理各種各樣的文件
// 2.通過模塊內部的readFile讀取文件內容
//代碼實例:fs.redFile('路徑(注意)',[文件編碼],callback)
// 這個[]表示這個參數是可選的
fs.readFile('./01.helloworld.js', 'utf8', (err, data) => {
// 如果文件讀取出錯err 是一個對象 包含錯誤信息
// 如果文件讀取正確 err是 null
// doc 是文件讀取的結果
console.log(err);
console.log(data);
});
- 使用舉例:寫入文件(通常是用來收集錯誤日志)
代碼規范: fs.writeFile('寫入到哪兒去(是一個包含文件的路徑名)','即將寫入的內容',callback)
const fs = require('fs');
//1.由於你這個fs.writeFile是一個耗時的操作,故而不能拿變量去接受
//重要如過demo,txt不存在 我們就自動創建一個
fs.writeFile('./demo.txt', '即將要寫入的內容', err => {
if (err != null) {
console.log(err);
return;
}
console.log('文件內容寫入成功');
// 第三個callback還是非常重要的
})
- 系統模塊path
為什么有這個?因為我們得服務器可能再window還有linux下運行,而我們的linux的路徑符號是不一樣的,為了解決這個東西於是乎這個東西就誕生了
path不是一個耗時操作 我們可以直接拿到返回值,這個返回值就是拼接好的路徑字符串
1.語法
path.join('路徑','路徑','....')
2.代碼實例
path不是一個耗時操作 我們可以直接拿到返回值,這個返回值就是拼接好的路徑字符串
const path = require('path'); //引入!!引入!
const finalPath = path.join('public', 'uploads', 'avatar');
這個返回值會自動根據系統的不同 ,變成不同的路徑出來
相對路徑是有問題的:它相對的是當前的命令行窗口
注意,在大多數Node服務器開發我們一般都是做成絕對路徑
3.獲取當前文件的絕對路徑的一個屬性
__dirname這個屬性里面就保存了當前js文件所在的絕對路徑
const fs = require('fs');
const path = require('path');
console.log( __dirname);
console.log(path.join(__dirname, '01.helloworld.js'))
fs.readFile(path.join(__dirname, '01.helloworld.js'), 'utf8', (err, doc) => {
console.log(err)
console.log(doc)
});
(五)、 常見的第三方模塊
所謂的第三方模塊都是別人做好的’輪子‘。他們都在一個文件夾里面
第三方的模塊存在的形式
1.以js文件存在,里面對外暴露了一些API接口 ,通過這個接口你就可以很方便的搞到它里面的功能
2.命令行功能的形式存在,什么意思呢?就是這種模塊的使用 ,是通過命令行輸入命令實現的,這也是大多是CLI腳手架的實現方式
- 獲取第三方模塊
我們在npm上存儲還有發布模塊,只要你想 你也就可以發布,這個npm有一個網站,有興趣你可以去看看
npm全稱 'node pack mannerge'
在node安裝的時候 npm工具已經 附在其中了,
使用的方式:npm install XXX 這個XX就是你想要的模塊名字
1.使用舉例
- 安裝 formidable包
npm install formidable,敲擊回車就完事,默認的下載到的地址就是當前的文件夾目錄 ,里面有一個node_modules文件夾,這些包都會下載到這個文件夾里面
同時我們還有package-lock.json文件 這里面記錄了當前項目所用的所有的包信息,
在你移值或者發生項目給別人的時候 你不必發生整個項目,你可以不發送node_modules文件夾,上傳到git也是一樣 ,一般是不上傳這個文件夾。
我們根據package-lock.json就可以完成node_modules里面的所有依賴包的安裝
命令:npm install
-
卸載 formidable
npm uninstall formidable -
全局安裝
安裝有兩種一種是:本地安裝,一種是全局安裝
所謂的全局就是安裝一起 全局都可以用 ,每一個項目都可以用
對應的本地安裝就是僅限當前項目使用 -
安裝一個重要的全局的包 nodemon
這個東西 ,是提供自動刷新的功能,只要文件有改動它就會自動更新
使用nodemon舉例:
命令行下:nodemon XXX.JS ,此時命名就掛起了;這樣只要XXX.js文件發生改動 ,控制台就會自動的刷新控制台,
全局安裝nodemon
npm install nodemon -g
-
如何斷開這個掛起的操作?ctrl+c就可以了
-
再來一個包nrm
作用 改變下載的網站,原生的npm在國外下載,在國內我們需要換一個下載地址,這個nrm就是來干這個事的
安裝
npm install nrm -g
查詢可用的國內下載地址nrm ls
切換npm下載地址 nrm user
nrm user taobao回車就完事
- 安裝一下gulp
還是一樣的操作流程
npm install gulp
注意我們不要-g 因為我們的gulp是庫文件的形式安裝,只在當前項目下能使用
講一下這個gulp是什么:這是基於node的前端構建工具
什么是構建工具呢?
意思就是你可以拿這個東西去做一些重復性的工作,比如
壓縮html js css代碼
es6語法的轉換(轉化為es5)
less轉css
抽取公共文件部分
游覽器的自動刷新...我們還有好多的騷操作,這點的內容我們將會在下一講給大家講解: