使用Docker + Node.js 进行调试,使用Chrome DevTools编辑

由于Docker + Node.js的调试环境搭建让我花了一些时间,所以我总结了简单的步骤。这是使用Chrome DevTools进行调试的一个示例。

这次用到的东西

Docker、Node.js和npm:这些都不用多说,可以使用yarn或其他类似的工具。

2. nodemon:它是一个用来监视源代码变化并自动重启服务器的工具。如果没有这样的工具,每次修改代码后都需要手动重启nodejs才能使改动生效。

3. NIM(节点检查器管理器),Chrome开发工具:它是Chrome的扩展程序,可以在Chrome开发工具中进行调试。

搭建环境

1. Docker、npm、NIM 需要预先安装。

    • Docker

 

    • npm

 

    NIM

准备一个JS文件。

var http = require('http');
var server = http.createServer(
    function (request, response) {
        response.write('Hello World!');
        response.end();
    }
).listen(3000);
    • Hello World! が表示されます

 

    portは3000

3. 准备package.json文件

{
  "name": "debug-test",
  "version": "1.0.0",
  "description": "debug test",
  "license": "MIT",
  "scripts": {
    "start": "node src/index.js",
    "start:debug": "nodemon -L --inspect-brk=0.0.0.0:9229 src/index.js"
  },
  "dependencies": {},
  "devDependencies": {
    "nodemon": "^1.14.1"
  }
}
    • 対象の変更を監視しnodejsを再起動する為 nodemon を入れます

 

    • nodemonの -L オプションは、コンテナなどマウントされたドライブでnodemonを実行する時に、監視を有効にする為のオプションです。nodemonのreadmeに書いてあるのですが、これ気づかなくてハマりました;

 

    • –inspectはChromeでのデバッグを有効にするオプションで、末尾に-brkを付けると最初の行で停止します。

 

    ソケットは指定しない場合デフォルト127.0.0.1:9229となりますが、Dockerは127.0.0.1を経由しない様で、0.0.0.0を指定する事で動作しました。

准备Docker Compose文件。

version: "3"
services:
  node:
    image: node:alpine
    user: "node"
    working_dir: /home/node/app
    environment:
      - NODE_ENV
    volumes:
      - ../app:/home/node/app
    expose:
      - "3000"
      - "9229"
    ports:
      - "3000:3000"
      - "9229:9229"
    command: "npm run start:debug"
    • port 3000と9229を使用します

 

    パッケージJSONにデバッグ用のstart:debugを作成してあるので、start:debugを実行します

5. 目录结构

node-test
  ├─app
  │  ├─node_modules
  │  ├─src
  │  │  └─index.js
  │  └─package.json
  └─docker
      └─docker-compose.yml

转到包含 package.json 的目录并运行 npm install。

cd ○○○\node-test\app
npm install

进入包含docker-compose.yml的目录并构建docker。

cd ○○○\node-test\docker
docker-compose build

使用NIM(Node Inspector Manager)和Chrome开发工具进行调试。

1. 将NIM的设置配置为“主机:localhost”和“端口:9229”。

2018-06-22_15h12_28.png
2018-06-22_15h11_10.png

使用docker-compose up -d命令来启动容器并启动node。

使用docker-compose up -d命令,将执行设置为”npm run start:debug”的命令并通过package.json中的start:debug配置启动nodejs。

积分

在Docker上进行调试时,关键点是在”nodemon -L –inspect-brk=0.0.0.0:9229 src/index.js”命令中的”-L”选项和”0.0.0.0:9229″的指定。

总结

以上是使用Chrome DevTools在Docker上进行NodeJS调试的一个示例。

使用这个方法可以在devtools的断点处停止并确认值,所以不再需要直接在代码中编写console.log。改动也变得轻松,因为nodemon会自动重新启动nodejs。

我原本打算在VisualStudioCode中举个例子,但是如果继续写下去会很难理解,所以打算分开来写。

bannerAds