nodejs環境

動態編譯:nodemon安裝html

https://www.cnblogs.com/JuFoFu/p/5140302.html?utm_source=tuicool&utm_medium=referral前端

在開發環境下,每每須要一個工具來自動重啓項目工程,以前接觸過 python 的 supervisor,如今寫 node 的時候發現 supervisior 在不少地方都有他的身影,node 也有一個 npm 模塊 supervisior 也是用來監控進程的,不過除了 supervisior 外,還有不少其餘的工具,從 github 的評分上看,比較熱門的有 forever,nodemon,node-dev,具體這些工具的區別能夠參考這篇文章 Comparison: Tools to Automate Restarting Node.js Server After Code Changes ,我的以爲在開發環境仍是用 nodemon,由於配置比較方便,文檔也很清晰。因此這裏先主要講 nodemon。node

nodemon用來監視node.js應用程序中的任何更改並自動重啓服務,很是適合用在開發環境中。
nodemon將監視啓動目錄中的文件,若是有任何文件更改,nodemon將自動從新啓動node應用程序。
爲了減小頻繁改代碼形成頻繁重啓,能夠配置時只監聽一個主文件,修改完代碼後改動一下該文件便可。python

安裝jquery

npm install -g nodemon
啓動應用
nodemon [your node app]
使用幫助
nodemon -h 或者 nodemon --help
若是沒有在應用中指定主機和端口,能夠在命令中指定:
nodemon ./server.js localhost 8080
開啓debug模式
nodemon --debug ./server.js 80
在工程目錄下新建 nodemon.json文件,配置以下:c++

{
    "restartable": "rs", 
    "ignore": [
        ".git", 
        "node_modules/**/node_modules"
    ], 
    "verbose": true, 
    "execMap": {
        "": "node", 
        "js": "node --harmony"
    }, 
    "watch": [
        "./bin/www"
    ], 
    "env": {
        "NODE_ENV": "development", 
        "PORT": "8888"
    }, 
    "ext": "js json", 
    "legacy-watch": false
}

nodemon 比較流行的緣由之一就是它的可配置性比較高,下面是官網給出的配置文件 nodemon.json 的例子,加上我本身瞭解到的有用的一些配置,開發環境建議能夠把每一個參數都寫上備用,生產環境就把沒有必要的參數去掉,有些字段是能夠在命令行模式以參數形式給出的,能夠經過 -h 查看,下面逐個解釋:git

{
    "restartable": "rs", 
    "ignore": [
        ".git", 
        "node_modules/**/node_modules"
    ], 
    "verbose": true, 
    "execMap": {
        "": "node", 
        "test": "gulp test"
    }, 
    "events": {
        "start": "echo 'app start'", 
        "crash": "echo 'app crash'", 
        "exit": "echo 'app exit'", 
        "restart": "echo 'app restart'"
    }, 
    "ext": "js json", 
    "watch": [
        "./src/**"
    ], 
    "env": {
        "NODE_ENV": "env", 
        "PORT": "3000"
    }, 
    "legacy-watch": false
}

express安裝es6

https://segmentfault.com/a/1190000015170332github

npm install express -g // 全局安裝express
npm install express-generator -g // 全局安裝express腳手架,安裝以後可使用express命令
express --version // 檢查express版本
mkdir app
cd app
/**
* 生成項目文件
* express 默認使用ajs模板,加上 -e 指定更友好的ejs模板
*/
express -e
npm intall // 安裝依賴
npm start // 啓動項目web

如何修改程序啓動的默認3000端口入口 文件 bin/www

 

CommonJS規範,同步加載模塊,後端nodejs推薦使用,內置require、export方法,建議有時間去了解一下實現機制
AMD規範,異步加載模塊,在Angular、Vue等前端框架使用,經過requierjs模塊也能夠在瀏覽器中使用
ES6是下一代JS規範的模塊加載方式,暫時不夠通用,node中建議仍是使用CommonJS規範

es6以前的語法很亂,因此不少人想用其餘更嚴格的語言編寫而後轉譯爲js,例如typescript、coffeescript等擴展語言。

當 npm install -g 模塊中途斷網失敗時,該包的狀態多是不徹底的致使uninstall也無效,這時只能到users/用戶名/appdata/npm/nodemodules去刪掉該模塊而且刪除npm.cmd命令

node模塊
核心模塊(node安裝的),文件模塊(本身寫的import時帶了相對路徑.或..等的)、普通模塊(從模塊名引入的)
node對加載過的模塊會緩存,且是緩存編譯和執行後的對象,對同一模塊二次加載時會使用緩存對象,且核心模塊優先於文件模塊的緩存,確保用戶的同名模塊不能覆蓋核心模塊
模塊定位
模塊中能夠查看查詢模塊的路徑:
console.log(module.paths)
JS引擎嘗試查找模塊(其實全局變量也是)通常是鏈式查找,即一層層向上查找,所以不建議模塊太深。chrome引擎作的優化是創建hash路徑加快查找,但這種比較怕eval,即動態生成變量添加到全局做用域(沒法事先創建索引),因此eval is evil。
文件定位
node會給沒有後綴的模塊嘗試添加.js(經過fs模塊同步加載執行) .node(這是用c/c++寫的addon,編譯後node用dlopen函數執行,代價較高) .json(加載後用JSON.parse解析後返回對象)等後綴進行查找,其餘後綴都當js文件加載,建議能加上的就加上。
當模塊的package.json沒有寫main時則以index.js做爲模塊入口。

node模塊編譯後都會把模塊代碼放到當即執行函數中防止變量污染全局變量。
node裏面有runInThisContext方法,和eval類似但只在當前模塊做用域中添加東西,可用來混淆代碼。其原理相似於執行Function.prototype.toString = xxx;改變編譯過程。

100ms規則
JS引擎->繪製隊列->HTML引擎,JS引擎會將要渲染的內容放入隊列,隊列滿了時經過HTML引擎render,若是JS引擎處理超過100ms沒有通知渲染,用戶將感受卡頓。常規解決方法是異步操做,還有webworker子進程等。

異步IO的幾個關鍵詞:單線程、事件循環、觀察者、IO線程,除了用戶代碼不能並行外,文件IO、網絡請求均可以通過異步並行執行。
node在windows平臺下settimeout最小間隔大概爲15ms。
process.nettick將回調放到下次事件循環中執行,比settimeout(func,0)更高效(直接插到隊列尾,不用查一遍紅黑樹),todo:對比process.setImediate

node應用
純耗cpu的應用,上雲走雲計算;
部分cpu部分耗io的,耗cpu部分能夠c/c++實現而後用node調用
新老系統兼容,例如老系統是html的輸出,但新系統想要json的輸出:
superagent 庫訪問拿到html
cheerio 在後端支持jquery語法,分析html取出數據
微信機器人框架:
chatie
區塊鏈很愛用node
spring cloud是第一代微服務系統,有全家桶net flex,不太好跟node結合
istol是第二代微服務service mesh,跟node能夠結合

socket.io實現websocket,客戶端服務端全雙工通訊 webrtc基於websocket實現全雙工的視頻流傳輸、交流

相關文章
相關標籤/搜索