我正在尝试使用Visual Studio Code,Node.js和Grunt并遇到问题。从本质上讲,我似乎无法说服VS代码从grunt
放置它的本地node_modules\.bin
位置运行npm
。如果我在全球范围内安装grunt
和grunt-cli
,那么一切正常,但就个人而言,我不明白我为什么要这样做。
我有一个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 Code会自动获取gruntfile中的任务并在U.I中向我显示。
但是,如果我不全局安装(或全局卸载它们),它会给我这个错误:
'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": []
}
这解决了错误但我不再列出任何任务 - 我只得到“找不到任务”
如何在VS Code中使用node_modules\.bin
来查找其工具或以其他方式解决此问题?
答案 0 :(得分: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
中,有必要实际注册与VS Code配置文件中的任务相匹配的taskName
任务。例如,上面示例中的default
任务注册如下:
// Default Task is to run grunt-ts build task named `ts'
grunt.registerTask("default", ["ts"]);