运行vscode chrome调试器扩展的vscode gulp/grunt脚本

Jor*_*lov 7 automation google-chrome gruntjs gulp visual-studio-code

我是vscode和grunt/gulp框架的新手,我想知道,如果有任何可能的方法让你的任务完成一些任务(比如说一些文件,缩小一些图像等),然后访问vscode并运行chrome调试器?

任何建议如何我能做到这一点.

Mar*_*ark 14

这取决于你的意思.很容易完成以下工作流程.

  1. 启动监视文件更改并启动服务器的任务(如browserSync).
  2. 通过.vscode/launch.json中的"launch"命令启动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"
                ]
            }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  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"));
}
Run Code Online (Sandbox Code Playgroud)

正如我所写,你通过ctr-shift-p:run task 启动任务" sync "并选择sync

然后 - 假设您安装了chrome调试器扩展程序 - 通过调试图标启动:从下拉菜单中选择"Chrome:使用sourcemaps启动":然后运行它(使用下拉菜单左侧的绿色小箭头).

祝好运.

[编辑从这里开始].

自从我写这个答案2016以来,vscode添加了使用复合键一次启动多个任务的功能.

{
    "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"
            ]
        }
}
Run Code Online (Sandbox Code Playgroud)

现在将首先运行gulp"sync"任务,然后以调试模式启动Chrome.

当我使用它时,我有

 open: false,
Run Code Online (Sandbox Code Playgroud)

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