① 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 ,将对应项目的入口文件配置在这里即可