Grunt 작업과 함께 노드 검사기 사용


101

누군가 Grunt 와 함께 노드 검사기를 사용 습니까? 애플리케이션 디버깅을 위해 했습니까? 그렇지 않다면 Grunt 기반 앱을위한 디버깅 도구를 추천 할 수 있습니까?

저는 서버 측 앱을 위해 nodejs 로 작업하고 있으며 Grunt 가 별도의 작업을 사용하도록합니다 (사용자가 작업을 개별적으로 실행할 수 있기 때문입니다).


console.log는 친구입니다. 노드 검사기에 액세스하고 싶지만 디버그 도구는 V8의 일부가 아닌 것 같습니다. 내가 이해하는 것처럼 디버그 도구는 그 자체로 웹 앱입니다. 내가 당신의 시도를하고 싶기 때문에 내가 틀렸다면 나를 정정하십시오.
iancrowther

예, 로깅 시스템 (즉, console.log 또는 다른 종류의 로깅 메커니즘)은 항상 우리의 친구가 될 것이지만 제가 필요로하는 것은 다르고 디버깅 가능한 방법입니다. 지금까지 grunt를 사용하여 프로젝트에 누락 된 요구 사항을 발견 했으므로 지금까지 제거했으며 nodejs를 소유하고 있으므로 node-inspector를 사용하여 디버깅 할 수 있습니다. 나는 그것이 해결책이 아니라는 것을 알고 있지만 작동합니다. 앞으로 노드 검사기 및 기타 도구 / 기능을 추가하여 grunt를 다시 추가 할 것이라고 생각합니다. 마지막으로, 굉장합니다! 나는 다른 프로젝트에서 그것을 사용하고 있으며 정말 흔합니다!
JuanO

그냥 ... 또한, 그런트 주변에 연주하기 시작 그 질문에 관심
드미트리 Pashkevich

@iancrowther, 웹 검사기가 사용하는 도구는 V8에 있습니다. 라는 프로젝트가 node-inspector해당 대화를 node --debug연결하는 브라우저에 디버그 정보를 제공가. 그런 다음 Chrome을 노드 검사기 프로세스에 연결하고 모든 웹 검사기 도구를 사용하여 앱을 디버깅 할 수 있기 때문에이 기능이 훌륭합니다. github.com/dannycoates/node-inspector
David Souther

답변:


135

디버그에서 grunt를 실행하려면 grunt 스크립트를 노드에 명시 적으로 전달해야합니다.

node-debug $(which grunt) task

그리고 debugger;당신의 작업에 줄을 넣으십시오.node-inspector그러면 디버깅 도구가있는 브라우저가 열립니다.

2014 년 2 월 28 일 편집

node-inspector상태 node-debug에서 노드를 시작 --debug하고 node-inspector페이지에 브라우저를 열고 첫 번째 debugger줄에 도달 하거나 중단 점을 설정 하면 중지 하는 명령을 추가했습니다 .

2015 년 1 월 30 일 수정

Windows에서는 상황이 더 복잡합니다. 지침은 @ e.gluhotorenko의 답변을 참조하십시오.


1
이것은 훌륭합니다. 또한 전역 적으로 설치된 다른 npm bin에서도 작동합니다.

1
(투덜) 노드 디버그 $ 작업 사용 nodejs 기본 디버거
토마스 로메로

3
이것에 약간의 문제가 있습니다. 무엇인지 명확히 해주 $(which grunt)시겠습니까? 디버깅하려는 Gruntfile.js 뿐입니 까? 그리고 대한이 task나는 (사용하여 배치해야합니까 serve예를 들어) grunt serve또는 단지 serve? 나는 node-debug Gruntfile.js serve다른 많은 것을 시도했지만 이것이 작동하도록 할 수 없습니다. Node-inspector가 열리고 첫 번째 줄에서 끊어 지지만 함수의 첫 번째 줄로 servedebugger;줄을 넣어도 작업에 들어갈 수 없습니다 .
브렛

2
@brett, 당신은 Windows 또는 OSX / Linux에 있습니까? 유닉스에서 $ (which grunt)는 grunt-cli grunt.js스크립트 의 전체 경로로 대체됩니다 . 이것이 실제로 Grunt를 실행하는 스크립트입니다. Windows 를 사용하는 경우 grunt-cli 스크립트의 가능한 위치는 stackoverflow.com/a/13443026/240358 (아래 답변)을 참조하십시오. 즉, 장소 소요 grunt명령에를 - 당신의 예에서 교체 taskserve
데이비드 남풍

@DavidSouther에게 감사드립니다. Windows 관련 부분을 답변에 추가 하시겠습니까? 난 정말 그냥 ... 리눅스로의 이동을해야
브렛

39

Windows 솔루션

운영

node --debug-brk c:\Users\username\AppData\Roaming\npm\node_modules\grunt-cli\bin\grunt taskname

디렉토리의 cmd에서 Gruntfile.js. debugger;필요한 곳에 줄 을 놓는 것을 잊지 마십시오 .


3
grunt 0.4부터 grunt 진입 점은 grunt-cli패키지의 일부입니다 .node --debug-brk [..]\node_modules\grunt-cli\bin\grunt
mistaecko 2013 년

4
Windows 지침에 감사드립니다. powershell에서 물결표를 사용하여 좀 덜 취약하게 만들 수 있습니다node --debug-brk (Resolve-Path ~\AppData\Roaming\npm\node_modules\grunt-cli\bin\grunt) taskname
George Mauer

야, 나는 이것을 알아 내고 내 대답을 업데이트하는 데 30 분을 보냈습니다! 그냥 아래로 스크롤 했어야 했어!
David Souther

1
다른 콘솔 및 실행 열 것을 잊지 마세요node-inspector
valter.santos.matos

@ valter.santos.matos 실제로는 이제 노드를 사용해야합니다. --inspect 아래 언급 됨
Jackie

7

디버그하려면 bin 아래의 grunt 파일을 수정해야합니다. 내 컴퓨터에서 grunt는 전역 적으로 설치되었으므로 / usr / local / lib / node_modules / grunt / bin으로 이동하여 파일을 열고 수정했습니다.

#!/usr/bin/env node

#!/usr/bin/env node --debug-brk

--debug-brk는 실행 된 자바 스크립트의 첫 번째 줄에서 중단됩니다.

노드 검사기의 드롭 다운에서 작업 js 파일을 찾을 수 없기 때문에이 작업만으로는 충분하지 않으므로 디버깅하려는 파일을 수정해야합니다 debugger;. 중단 점이 발생하기를 원합니다. 이제 첫 번째 휴식 후에 계속을 클릭 할 수 있습니다.debugger; 라인

꽤 엉망진창이지만 지금까지 찾은 유일한 방법입니다.


2
이것은 / usr / bin / env의 다양한 동작과 shebang 줄에서 #과 \ n 사이의 문서화되지 않은 마법에 의존하기 때문에 엄청나게 복잡합니다.
David Souther

2
나를 위해 작동하지 않습니다. Grunt는 여전히 디버그 모드없이 실행됩니다.
Eugene Gluhotorenko 2012

@DavidSouther Shebangs는 문서화되지 않은 마법이 아닙니다. 표준화 된 POSIX 동작
Miles Rout

6

최근에 grunt-node-inspector를 만들어 나머지 grunt 워크 플로로 노드 검사기를 쉽게 구성 할 수 있습니다. 확인해보세요. https://github.com/ChrisWren/grunt-node-inspector를 하십시오.

다음은 grunt-node-inspector, grunt-concurrent 및 grunt-shell을 사용하여 grunt 작업을 디버깅하는 방법을 보여주는 Gruntfile 섹션입니다 : https://github.com/CabinJS/Cabin/blob/master/Gruntfile. js # L44-L77


당신은 생각하고 있습니다 node --debug-brk $(which grunt) node-inspector build test. 나는 그것을 좋아한다.
David Souther

나는 동시 사용을 제외하고 거의, 때문에이 node-inspector종료하고 허용하지 않습니다 buildtest영원히 실행되므로 실행합니다. 내가 설정 한 스 니펫에 대한 링크를 추가했습니다.
ChrisWren

흠. 다시 생각해 보면 ... 내 워크 플로는 방금 시작 node-inspector &하여 백그라운드에두고 완료라고합니다. 그것에 대한 당신의 생각은?
David Souther 2013

1
이유는 확실하지 않지만 이것은 나를 위해 작동하지 않는 것 같습니다. 명령을 실행 한 grunt node-inspector다음 localhost URL로 이동하면 소스 파일이 표시되지 않습니다. 디버거 도구가 비어 있습니다.
Kris Hollenbeck

두 개의 개별 명령을 실행하여 소스를 표시 할 수있었습니다. grunt node-inspector그리고 node --debug-brk Gruntfile.js내 grunt 디렉토리에서. 그러나 grunt 파일에 중단 점을 설정하면 연결 오류와 함께 충돌합니다.
Kris Hollenbeck 2014-06-02

4

내 앱을 실행하고 노드 검사기를 실행하는 작업을 완료했습니다. 현재 제안보다 훨씬 낫습니다.이 작업을 gruntfile에 추가하기 만하면됩니다.

  grunt.registerTask('debug', 'My debug task.', function() {
        var done = this.async();
        grunt.util.spawn({
            cmd: 'node',
            args: ['--debug', 'app.js'],
            opts: {
                //cwd: current workin directory
            }
        },
        function (error, result, code) {
            if (error) {
                grunt.log.write (result);
                grunt.fail.fatal(error);
            }
            done();
        });
        grunt.log.writeln ('node started');
        grunt.util.spawn({
            cmd: 'node-inspector',
            args: ['&'],
            opts: {
                //cwd: current workin directory
            }
        },
        function (error, result, code) {
            if (error) {
                grunt.log.write (result);
                grunt.fail.fatal(error);
            }
            done();
        });
        grunt.log.writeln ('inspector started');
    });

1
grunt-node-inspector의 저자가 맞습니다. 이 솔루션은 posix 환경에서만 작동하지만 노드 검사기를 구성하기가 더 쉽고 동시에 posix 및 창에서 작동합니다.
rainabba dec

3

여기에 훌륭한 답변이 있습니다. 2017 년에는 이제 할 수 있습니다.

node --inspect --debug-brk $(which grunt) taskName

어떤 것을 인쇄합니다.

To start debugging, open the following URL in Chrome: chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:9229/232652c3-f63c-4b00-8de9-17dfad5db471

크롬에서 URL을 열면 바로 사용할 수 있습니다!

Node 7.3.0을 사용하고 있으며 Mac을 사용하고 있습니다. Windows에서 실행하려면 다른 게시물의 조언을 따라야 할 수도 있습니다.


2

2019 업데이트

  • 디버그 모드에서 grunt 작업을 시작하고 첫 번째 줄에서 중단하려는 경우 :

    node --inspect-brk $(which grunt) taskName

  • 특정 포트에서 디버그 모드로 grunt 작업을 시작하려면 :

    node --inspect-brk=8080 $(which grunt) taskName

  • grunt의 디버깅 세션을 실행하는 노드 프로세스에 VSCODE를 연결하려면 vscode에서 다음 구성을 사용하십시오.

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    
    {
      "type": "node",
      "request": "attach",
      "name": "Attach by port IP 5656",
      "port": 8080
    }
  ]
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.