前端工程師須要學習nodejs來擴充本身的知識邊界,也讓本身更方便的理解webpack,前端工程化等。javascript
process對象是node中的一個全局變量,它提供了nodejs進程的信息並對其進行控制,做爲全局變量,process始終能夠直接使用。前端
argv是咱們常會見到一個屬性,process.argv返回一個數組,包含了在運行node代碼時命令行中輸入的值。舉個例子假如咱們運行一段node代碼,並在命令行中添加一些參數:$ node app.js xiaoming 2
,那麼process.argv的值即爲['node', '/path/to/your/app.js', 'xiaoming', 2]
。vue
這個屬性值仍是比較常見的,在vue-cli2中的webpack配置中就使用到了。根據後面的參數來判斷當前是啓動的是開發仍是打包、測試等環境,來加載不一樣的webpack配置。有興趣的能夠自行vue的webpack配置代碼中去查看。java
node做爲後端程序,i/o處理能力天然是其核心能力之一。fs模塊提供了一個能夠與文件系統進行交互的api,全部的文件操做都同時具備同步和異步兩種方式。使用時須要先引入fs模塊const fs = require('fs');
。node
fs.readFile('/path/to/file/',()=>{})
和fs.readFileSync('/path/to/file/')
,分別是fs操做文件系統的異步(不阻塞)和同步(阻塞)兩種方法。node中只要是以sync
結尾的方法皆爲同步(阻塞)操做。webpack
用法簡介:web
const fs = require('fs');
// 1.異步讀取文件,讀取的數據在其回調函數中
fs.readFile('/path/to/file', (err, res) => {
const result = '';
// res表示異步讀取文件內容,默認是buffer格式
// 對獲取res文件添加狀態監聽
res.on('data',(data) => {
result += data;
});
// 監聽res的end狀態,表示文件讀取完畢了
res.on('end', () => {
// 此時的result表示獲取的所有文件內容
});
})
// 2.同步讀取文件
const data = fs.readFileSync('/path/to/file/');
複製代碼
咱們能夠看到,獲取文件內容時,默認是一種buffer格式,這個格式是node中爲了處理tcp流和文件系統操做中的二進制數據而引入的api。vue-cli
這兩個函數的使用方法和readFile、readFileSync類似,讀取一個文件路徑,返回的是一個相應文件目錄下的文件名稱的數組。使用方法分別爲fs.readdir('/filePath',(err, list)=>{ });
和const list = fs.readdirSync('/filePath');
後端
上面咱們看到,在node中如何想使用其餘模塊,方式是使用require引入。其實在node中,咱們也能夠開發本身的模塊並引入使用。前端工程化
示例代碼:
// module.js
module.exports = function(args) {
// 這裏開發本身模塊的邏輯
}
// your program
const myModule = require('module.js');
...
複製代碼
在開發本身模塊的時候有幾個原則:
1.導出一個函數,這個函數能夠準確接受本身所須要的參數
2.模塊程序不要改變其餘任何東西,好比全局變量
3.不要在模塊中作任何輸出,應該將處理的結果返回出去由使用的程序處理
4.若是本身的模塊是個異步操做,則接受的參數中須要有回調函數callback
5.當有錯誤發生,或者有數據的時候使用回調函數進行處理
6.回調函數需按照node習慣,err錯誤處理做爲函數的第一個參數function callback(err, data){}
http模塊是node最重要的核心功能之一,能夠用來處理http請求和生成一個簡單的http服務。先來看一下使用http模塊的幾個簡單應用場景。
// 引入
const http = require('http');
// 1.發起一個簡單的http請求
http.get('/url', function(err, res){
// res參數是node中的stream類型對象
// 能夠理解成會觸發一些事件的對象
res.on('data', function(data){
// 對res進行監聽,獲取到的data是buffer對象
});
res.on('end', function() {
});
});
// 2.生成一個本地的server,端口爲3000
const server = http.createServer(function(req, res) {
// req表示請求,res表示響應
});
server.listen(3000);
複製代碼
做者簡介: 宮晨光,人和將來大數據前端工程師。