Search code examples
javascriptgulpbrowserify

Can't walk dependency graph


My Javascript build process ends up inserting the keyword require() in the file. This is not supported in client side and causes a console error. I have added browserify per other SO answers, however, I am in turn getting another error (below).

Additional Information:

I am using:

  1. Gulp 4
  2. Node (v14.2.0)

Error:

[16:03:55] Using gulpfile /mnt/c/code/mutationObserver/gulpfile.js
[16:03:55] Starting 'default'...
[16:03:55] Starting 'clean'...
[16:03:55] Finished 'clean' after 10 ms
[16:03:55] Starting 'html'...
[16:03:55] Starting 'js'...
[16:03:55] Starting 'css'...
[16:03:55] Finished 'html' after 46 ms
[16:03:55] Finished 'css' after 51 ms
[16:03:55] 'js' errored after 54 ms
[16:03:55] Error: Can't walk dependency graph: Cannot find module '/mnt/c/code/mutationObserver/src/js/*.js' from '/mnt/c/code/mutationObserver/src/js/_fake.js'
    required by /mnt/c/code/mutationObserver/src/js/_fake.js
    at /mnt/c/code/mutationObserver/node_modules/resolve/lib/async.js:136:35
    at load (/mnt/c/code/mutationObserver/node_modules/resolve/lib/async.js:155:43)
    at onex (/mnt/c/code/mutationObserver/node_modules/resolve/lib/async.js:180:17)
    at /mnt/c/code/mutationObserver/node_modules/resolve/lib/async.js:15:69
    at FSReqCallback.oncomplete (fs.js:175:21)
[16:03:55] 'default' errored after 69 ms

My entire Gulpfile.js is as follows:

const { series, parallel, watch, src, dest } = require("gulp");
const plumber = require("gulp-plumber");
const del = require("del");
const concat = require("gulp-concat");
const babel = require("gulp-babel");
const sass = require("gulp-sass");
const browserSync = require("browser-sync").create();
const browserify = require('browserify')
const source = require('vinyl-source-stream')


function html() {
  return src("./src/*.html").pipe(dest("./dist"));
}

function css() {
  return src("./src/css/style.scss")
    .pipe(plumber())
    .pipe(sass().on("error", sass.logError))
    .pipe(dest("./dist/css"));
}

function js() {
  return browserify("./src/js/*.js")
    .bundle()
    .pipe(source("main.js"))
    .pipe(plumber())
    .pipe(
      babel({
        presets: ["@babel/env"],
        plugins: ["@babel/transform-runtime"],
      })
    )
    .pipe(dest("./dist/js"));
}

function clean() {
  return del(["./dist"]);
}

function watchFor() {
  browserSync.init({
    server: {
      baseDir: "./dist/",
    },
  });

  // first rerun the function that distributed the css files, then reload the browser
  watch("./src/css/**/*.scss").on("change", css);
  watch("./dist/css/*.css").on("change", browserSync.reload);

  // first rerun the function that distributed the javascript files, then reload the browser
  watch("./src/js/*.js").on("change", js);
  watch("./dist/js/*.js").on("change", browserSync.reload);

  // first rerun the function that writes to the dist folder, then reload the browser
  watch("./src/*.html").on("change", html);
  watch("./dist/*.html").on("change", browserSync.reload);
}

exports.clean = clean;
exports.css = css;
exports.js = js;
exports.html = html;
exports.watch = watch;
exports.default = series(clean, parallel(html, js, css), watchFor);


Solution

  • I had the same error. This error means that it cannot find the required js file. Make sure that the file is in the correct folder, as specified in "required", and if it's in the same folder, you might need to add ./ .

    browserify main.js -o bundle.js

    Error: Can't walk dependency graph: Cannot find module 'srt' from 'C:\code\html1\main.js'
    

    In my main.js error, I changed:

    var srt = require('srt');
    

    to:

    var srt = require('./srt');
    

    And then it worked.