VS代码:从node_modules \ .bin

时间:2016-03-25 18:26:25

标签: node.js gruntjs npm visual-studio-code

我正在尝试使用Visual Studio Code,Node.js和Grunt并遇到问题。从本质上讲,我似乎无法说服VS代码从grunt放置它的本地node_modules\.bin位置运行npm。如果我在全球范围内安装gruntgrunt-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来查找其工具或以其他方式解决此问题?

1 个答案:

答案 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"]);