【问题标题】:vscode gulp / grunt script running vscode chrome debugger extensionvscode gulp / grunt 脚本运行 vscode chrome 调试器扩展
【发布时间】:2016-10-14 14:00:40
【问题描述】:

我是 vscode 和 grunt / gulp 框架的新手,我想知道,是否有可能让您的任务执行某些任务(比如说转译一些文件、缩小一些图像等)然后访问 vscode 并运行铬调试器?

任何建议我如何做到这一点。

【问题讨论】:

    标签: google-chrome automation gruntjs gulp visual-studio-code


    【解决方案1】:

    这完全取决于您的意思。很容易完成以下工作流程。

    1. 启动一个任务(例如 browserSync)来监视您的文件更改并启动服务器。
    2. 通过 .vscode/launch.json 中的“启动”命令启动 chrome 调试器扩展,该命令连接到在步骤 1 中启动的相同 url。类似

      {
          "version": "0.1.0",
          "configurations": [
              {
                  "name": "Chrome : Launch with sourcemaps",
                  "type": "chrome",
                  "request": "launch",
                  "url": "http://localhost:3000",
                  "webRoot": "${workspaceRoot}",
                  "sourceMaps": true,
                  "runtimeArgs": [
                  "--remote-debugging-port=9222"
                  ]
              }
      }
      
    3. 您的 js 将在您的断点处停止并且现在可以调试了。

    4. 更改您的 js 并且(通过您的 gulp/grunt 任务观察器)它将在 chrome 浏览器中更新,并且仍然可以像以前一样调试,而无需您手动重新加载。

    如果您在必要的 gulp 任务方面需要帮助,请告诉我。但这里有一个 gulp.js 代码示例(我在这里使用 gulp4.0,它在 3.x 中将工作!!):

    var gulp = require("gulp");
    var browserSync = require("browser-sync").create();
    var sass = require("gulp-sass");
    // var uglify = require("gulp-uglify");
    var concat = require("gulp-concat");
    // var rename = require("gulp-rename");
    var autoprefixer = require("gulp-autoprefixer");
    var cleanCSS = require("gulp-clean-css");
    var sourcemaps = require("gulp-sourcemaps");
    var cached = require("gulp-cached");
    var remember = require("gulp-remember");
    
    
    function serve(done) {
    
      browserSync.init({
        server: {
          baseDir: "./",
          index: "home.html"
        },
        ghostMode: false
      });
      done();
    }
    
    function reload(done) {
      browserSync.reload();
      done();
    }
    
    var paths = {
      styles: {
        src: "./scss/*.scss",
        dest: "./css"
      },
      scripts: {
        src: "./js/*.js",
        dest: "./js"
      }
    };
    
    function watch() {
      gulp.watch(paths.scripts.src, gulp.series(processJS, reload));
      gulp.watch(paths.styles.src, gulp.series(sass2css, reload));
      gulp.watch("./*.html").on("change", browserSync.reload);
    }
    
    var build = gulp.series(serve, watch);
    
    gulp.task("sync", build);
    
    function sass2css() {
      return gulp.src("./scss/*.scss")
        .pipe(cached("removing scss cached"))
        // .pipe(sourcemaps.init())
        .pipe(sass().on("error", sass.logError))
        // .pipe(sourcemaps.write("./css/sourceMaps"))
        .pipe(gulp.dest("./css"));
    }
    
    function processJS() {
      return gulp.src("./js/*.js")
        .pipe(sourcemaps.init())
        // .pipe(concat("concat.js"))
        // .pipe(gulp.dest("./concats/"))
        // .pipe(rename({ suffix: ".min" }))
        // .pipe(uglify())
        .pipe(sourcemaps.write("./maps"))
        // .pipe(gulp.dest("./js"));
    }
    

    正如我所写,您通过 ctr-shift-p 启动任务“sync”:运行任务并选择 sync

    然后 - 假设您安装了 chrome 调试器扩展 - 通过调试图标启动它:从下拉菜单中选择“Chrome : Launch with sourcemaps”:并运行它(下拉菜单左侧的绿色小箭头)。

    祝你好运。

    [编辑从这里开始]。

    自从我在 2016 年写下这个答案以来,vscode 添加了使用 compounds 键一次启动多个任务的功能。

    {
        "version": "0.1.0",
        "compounds": [
            {
                "name": "Start server and chrome debugger",
                "configurations": ["Gulp sync", "Chrome : Launch with sourcemaps" ]
            }
        ],
        "configurations": [
    
            {
                "type": "node",
                "request": "launch",
                "name": "Gulp sync",
                "program": "${workspaceFolder}/node_modules/gulp/bin/gulp.js",
                "args": [
                    "sync"
                ]
            },
            {
                "name": "Chrome : Launch with sourcemaps",
                // works with or without preLaunchTask
                "type": "chrome",
                "request": "launch",
                "url": "http://localhost:3000",
                "webRoot": "${workspaceRoot}",
    
                "sourceMaps": true,
                "runtimeArgs": [
                  "--remote-debugging-port=9222"
                ]
            }
    }
    

    现在将首先运行 gulp“同步”任务,然后以调试模式启动 Chrome。

    当我使用它时,我有

     open: false,
    

    在 browserSync 选项中,因此它不会打开额外的默认浏览器窗口(除了即将启动的 chrome)。

    【讨论】:

    • 我看到了这个:“preLaunchTask”:“sync”,它可以在launch.json中设置来启动一个任务(在.vscode/tasks.json中定义),它声称做你想做的事在更少的击键。因此,启动调试器将首先运行 gulp/grunt/etc。可以启动服务器并监视文件的任务。但是我很难让它干净地工作。而且它并没有真正节省多少时间。
    • Edit 我现在似乎有启动前任务,但它仍然需要我按两次 F5。首先启动预启动任务(在我的情况下为“同步”),第二次启动 chrome 调试器。奇数...
    • 感谢您的回答。 “preLaunchTask”实际上是我正在寻找的。问题是有时 chrome 无法正确附加到 chrome,但我稍后会看到我可以为它做些什么。
    猜你喜欢
    • 2017-08-31
    • 2020-07-12
    • 1970-01-01
    • 2017-09-13
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    相关资源
    最近更新 更多