① webstorm怎麼啟動nodejs的調試和伺服器
1.安裝:抄npm install -g node-inspector
2.啟動debug模式(單獨命令行):
node-debug &(該命令默認8080埠)
node-debug --web-port 1984 (定義任意埠)
3.訪問chrome debug devTools
路徑如:http://127.0.0.1:1984/?ws=127.0.0.1:1984&port=5858
4.啟動gulp或者grunt服務(具有gulp或者grunt任務時)
node --debug-brk $(which grunt) server (這種模式使用在第一次初始化執行的代碼)
node --debug $(which grunt) server(這種模式使用在初始化之後監聽的node代碼)
② Docker運行nodejs及調試
首先在項目根目錄下添加Dockerfile文件(這里我選用的是簡單地nestjs作為例子)
在項目根目錄下添加docker-compose.yml
在項目根目錄下添加nodemon-docker-debug.json
在package.json中加入docker運行命定及nodejs debug命定
1.首先運行yarn docker(npm run docker)來構建及運行docker 容器
1.項目根目錄下新建.vscode文件夾,在.vscode文件夾下添加launch.json
*注意這里的port一定要與你docker-compose.yml設置的debug port保持一致
運行vscode調試工具,如果能夠成功連接到docker中的程序,可以在container logs 中看到連接成功的log
接下來嘗試斷點調試
原文鏈接 http://watsonzuo.com/2019/05/22/docker-nodejs-debug/
③ 如何定位Node.js的內存泄漏
一、定位node.js內存漏洞的工具:
工欲善其事必先利其器,在排查時,我們還是需要一些工具來幫忙的。
devTool
這個是今年初出的 Node.js 調試工具,基於 Electron 將 Node.js 和 Chromium 的功能融合在了一起。操作起來比 node-inspector 方便,開放的 Timeline 功能還是比較實用的,雖然不是實時顯示。
僅需要 devtool xxx.js,還可以通過 .devtoolrc 來進行參數定製,具體見 GitHub
heapmp + chrome devTool
這個是比較傳統的定位內存泄漏的組合。heapmp 可以直接在代碼中調用生成內存快照,然後將快照文件導入到 chrome devTool 進行分析,之後操作其實和前者就差不多了。不過,這個方案和前者有一點區別就是,前者實際還是在瀏覽器環境中,所以生成的內存快照會有一些 DOM 對象的存在,會有一定的干擾。而這個方案,是直接調用底層 V8 的方法,生成的快照只有 Node.js 環境中的對象。
memwatch
這個可以在代碼里直接使用,實時檢測內存動態,當發生內存泄漏的時候,會觸發 『leak』 事件,會傳遞當前的堆狀態,配合 heapmp 有奇效。
二、定位問題:
用 devTool 的可以忽略下面的過程:
打開 Chrome Devtools ,進入到 Profiles 選項卡,點 Load 按鈕,載入之前生成的快照。
對於內存快照,有四個視圖,Summary,Comparison,Containment,Statistics,這裡面常用的是前三個。
在 Summary 視圖中,我們可以看到當前快照的全部信息,以及多個快照之間的信息。在列表裡顯示的都是對象的構造函數名字,可以先忽略被括弧包裹的對象,優先觀察其他的對象,最後再來看他們。後面的 shallow size 表示的是對象自身的大小,retained size 表示的是對象和它依賴對象的大小,一般是 GC 不可達的。
在 Comparison 視圖中,我們可以進行多個快照之間的對比,這個用處比較大,如果我們將前兩次快照進行對比,可能比較快速的定位出問題的對象。注意觀察 New、Deleted、Delta,如果是內存泄漏的對象,可能是一直在 New,而沒有 Deleted。
在 Containment 視圖中,我們可以查看整個 GC 路徑,當然一般不會用到。因為展開在 Summary 和 Comparison 列舉的每一項,都可以看到從 GC roots 到這個對象的路徑。通過這些路徑,你可以看到這個對象的句柄被什麼持有,從而定位問題產生的原因。值的注意的是,其中背景色黃色的,表示這個對象在 javascript 中還存在引用,所以可能沒有被清除。如果是紅色的,表示的是這個對象在 Javascript 中不存在引用,但是依然存活在內存中,一般常見於 DOM 對象,它們存放的位置和 Javascript 中對象還是有不同的,在 Node.js 中很少遇見。
④ 如何使用nodejs搭建開發環境
1.安裝NodeJS
1.編譯環境
源代碼編譯器,通常 Unix/Linux平台都自帶了C++的編譯器(GCC/G++)。如果沒有,請通過當前發行版的軟體包安裝工具安裝make,g++這些編譯工具。
Debian/Ubuntu下的工具是apt-get
RedHat/centOS下通過yum命令
Mac OS X下你可能需要安裝xcode來獲得編譯器
2.網路加密
其次,如果你計劃在Node.js中啟用網路加密,OpenSSL的加密庫也是必須的。該加密庫是libssl-dev,可以通過apt-get install libssl-dev等命令安裝。
3.手動編譯
wget http://nodejs.org/dist/v0.10.26/node-v0.10.26.tar.gz
tar zxvf node-v0.6.1.tar.gz
cd node-v0.10.26
./configure
上面幾行命令是通過wget命令下載最新版本的代碼,並解壓之。./configure命令將會檢查環境是否符合Nodejs的編譯需要。
make
make install
2.安裝NPM
1.NPM的全稱是Node Package Manager, 是NodeJs的第三方安裝庫。
curl http://npmjs.org/install.sh | sh
curl http://npmjs.org/install.sh是通過curl命令獲取這個安裝shell腳本,按後通過管道符| 將獲取的腳本交由sh命令來執行。
2.更改第三方庫
npm install underscore
[email protected] ./node_moles/underscore
由於一些特殊的網路環境,直接通過npm install命令安裝第三方庫的時候,經常會出現卡死的狀態。幸運的是國內CNode社區的@fire9 同學利用空餘時間搭建了一個鏡像的NPM資源庫,伺服器架設在日本,可以繞過某些不必要的網路問題。你可以通過以下這條命令來安裝第三方庫:
npm --registry "http://npm.hacknodejs.com/
如果你想將它設為默認的資源庫,運行下面這條命令即可:
npm config set registry "http://npm.hacknodejs.com/ "
通過npm安裝包。安裝好之後會自動被安裝到 /usr/local/bin 目錄下,而相依的函式庫也會自動安裝到 /usr/local/lib/node 目錄下,實在是非常方便。
3.安裝NodeJS調試環境
1.用npm命令安裝全局模式的 node-inspector組件
sudo npm install -g node-inspector
2.更改埠
修改 node-inspector/lib/config.js的埠
』web-port』: {
desc: 『Port to host the inspector』,
convert: conversions.stringToInt,
defaultValue: 6868
},
3.使用
node-inspector啟動一個調試工具
在chrome瀏覽器中輸入http://127.0.0.1:6868/debug?port=5858打開chrome的調試模式
使用node debug調試nodeJS項目
node --debug-brk=5858 read.js
可以在chrome中查看到調試信息
4.使用Sublime構建NodeJS
設置Sublime的Builder->>
Tools ->> Build System ->> New Build System
將如下代碼寫入
{
「cmd」: ["/usr/local/bin/node", 「$file」],
「file_regex」: 「^[ ]File "(…?)」, line ([0-9]*)",
「selector」: 「source.javascript」
}
保存為NodeJs.sublime-build文件
如此可以直接使用Com+B來使用nodejs運行程序
⑤ 怎麼結束node.js serverside javascript
核心API支持一種事件驅動的體系結構,在這種體系結構中,對象(稱為「發射器」)周期性地發出命名事件,這些事件導致函數對象(「偵聽器」)被調用。例如,每當一個對等點連接到它時,當文件被打開時,或者當數據被讀取時,就會發出事件。
一類是非常重要的,這是EventEmitter類。發出事件的所有對象都是這個類的實例。他們暴露on() EventEmitter。功能,允許一個或多個功能被連接到命名物體發出的事件。
當EventEmitter對象發出一個事件,所有連接到這個特定的事件稱為同步功能。另一個重要概念是流。它是一個抽象介面,可以通過例如對HTTP伺服器的請求來實現。流是可讀的、可寫的,或者兩者都是(雙工的)。
所有數據流都eventemitters,但他們也有其他的自定義方法和屬性,取決於他們是否可讀,可寫,或雙。如果流既可讀又可寫,則它實現所有的方法和事件。因此,一個雙工或轉換流完全由這個API描述,盡管它們的實現可能有些不同。
雖然很多東西可以告訴如何利用Node.js為您的網站,我會結束這後一個簡單的「Hello World」的例子如何創建您的第一個Node.js後端代碼。
創建一個名為「myfirstnode文件。JS」,然後添加以下代碼:
consthttp=require('http');
http.createServer((request,response)=>{
response.writeHead(200,{'Content-Type':'text/plain'});
response.end('HelloWorld ');
}).listen(8124);
console.log('Node.jsservernowrunningat
);
執行以下命令啟動伺服器:
$nodeMyFirstNode.js
Serverrunningat
測試瀏覽器中的鏈接會產生一個可預測的結果:
⑥ NodeJs VSCode 斷點調試
1.首先 你已經有一個.js 文件了,例如我的demo12.js
2.在工作區內打一些斷點,如無異常的話應該是實心紅點
3.點擊 運行和調試 按鈕
4.點擊小齒輪按鈕,修改配置文件
5.右鍵剛才那個js文件,復制出其相對路徑,放在配置文件${workplaceFolder} 的後面
6.點擊開始按鈕,進行調試
運行成功後,程序會定位到打斷點的地方,並且,調試控制台可以看到輸入結果,上面的一排按鈕與其他調試工具類似,不贅述了
在實際開發當中,可以配置多分launch.json文件,以應對不同項目的調試
修改name值用於區分,並且,要修改program ,將對應項目的入口文件配置在這里即可