2016-03-25 36 views
0

我正在試驗Visual Studio Code,Node.js和Grunt,並且遇到問題。實質上,我似乎無法說服VS碼從npm所在的當地node_modules\.bin位置運行grunt。如果我在全球安裝gruntgrunt-cli,但是,我個人並不明白爲什麼我必須這樣做。VS Code:使用來自node_modules .bin的Grunt

我有一個package.json文件看起來像這樣:

{ 
    "version": "1.0.0", 
    "name": "VSCODETEST", 
    "private": true, 
    "devDependencies": { 

     "grunt": "~0.4.5", 
     "grunt-cli": "~1.1.0", 

     "typescript": "~1.8.9", 
     "grunt-typescript": "~0.8.0" 

    }, 

    "dependencies": { 
     "jquery": "~2.2.2", 
     "bootstrap": "4.0.0-alpha.2" 
    } 
} 

運行npm install下載的依賴性層次結構。

我在gruntfile.js定義,在我的項目的根各項任務,這個任務的文件中.vscode\tasks.json

{ 
    "version": "0.1.0", 
    "command": "grunt", 
    "isShellCommand": true, 
    "tasks": [] 
} 

我知道這是工作,因爲,在全球安裝了工具軟件之後...

npm install -g grunt grunt-cli 

... VS代碼自動獲取gruntfile中的任務並在UI中向我顯示它們

但是,如果我不安裝這些全球(或卸載它們,在全球範圍),它給了我這個錯誤:

'grunt' is not recognized as an internal or external command, 
operable program or batch file. 

顯然,它不能在其路徑找到grunt所以我嘗試補救通過修改任務文件...

{ 
    "version": "0.1.0", 
    "command": "${workspaceRoot}\\node_modules\\.bin\\grunt", 
    "isShellCommand": true, 
    "tasks": [] 
} 

這解決了錯誤,但我不再得到任何任務中列示 - 我只得到「沒有任務找到」

我怎麼能eith呃包括node_modules\.bin在VS代碼用來找到它的工具或繞過這個其他方式?

回答

0

我找到了解決方法:.vscode\tasks.json應該是這樣的:

{ 
    "version": "0.1.0", 
    "command": "${cwd}/node_modules/.bin/grunt", 
    "isShellCommand": true, 
    "showOutput": "always", 
    "tasks": [ 
     { 
      "taskName": "default", 
      "args": [], 
      "isBuildCommand": true, 
      "problemMatcher": "$tsc-watch" 
     } 
    ] 
} 

最重要的變化是command的規範運行。

此外,在gruntfile.js中,有必要實際註冊與taskName匹配給VS代碼配置文件中的任務的任務。例如,上面的例子中的default任務註冊如下:

// Default Task is to run grunt-ts build task named `ts' 
grunt.registerTask("default", ["ts"]); 
相關問題