esbuild icon indicating copy to clipboard operation
esbuild copied to clipboard

`OnLoad` in custom plugin is called for disabled modules

Open alan-agius4 opened this issue 1 year ago • 4 comments

OnLoad in custom plugin is called for disabled modules, this causes the module not to no longer be "empty".

Reproduction entry.js

import url from 'url';
console.log("urlTest", url);

package.json

{
  "name": "test",
  "version": "0.0.0",
  "browser": {
    "url": false
  },
  "dependencies": {
    "url": "0.11.3"
  }
}
require("esbuild").build({
  bundle: true,
  outdir: "dist",
  entryPoints: ["./entry.js"],
  plugins: [
    {
      name: "plugin",
      setup(build) {
        build.onLoad({ filter: /\.[cm]?[jt]sx?$/ }, (args) => {
          return {
            contents: `console.log('foo')`,
            loader: "js",
          };
        });
      },
    },
  ],
});

Actual

"use strict";
(() => {
  // entry.js
  console.log("foo");
})();

Expected

If a module is disabled, the OnLoad won't be triggered. Another option is to include a context indicator in the onLoad arguments, signaling that the module is disabled. This way, the custom loader can decide whether or not to return data.

"use strict";
(() => {
  var __create = Object.create;
  var __defProp = Object.defineProperty;
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
  var __getOwnPropNames = Object.getOwnPropertyNames;
  var __getProtoOf = Object.getPrototypeOf;
  var __hasOwnProp = Object.prototype.hasOwnProperty;
  var __commonJS = (cb, mod) => function __require() {
    return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
  };
  var __copyProps = (to, from, except, desc) => {
    if (from && typeof from === "object" || typeof from === "function") {
      for (let key of __getOwnPropNames(from))
        if (!__hasOwnProp.call(to, key) && key !== except)
          __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
    }
    return to;
  };
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
    // If the importer is in node compatibility mode or this is not an ESM
    // file that has been converted to a CommonJS file using a Babel-
    // compatible transform (i.e. "__esModule" has not been set), then set
    // "default" to the CommonJS "module.exports" for node compatibility.
    isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
    mod
  ));

  // (disabled):node_modules/url/url.js
  var require_url = __commonJS({
    "(disabled):node_modules/url/url.js"() {
    }
  });

  // entry.js
  var import_url = __toESM(require_url());
  console.log("urlTest", import_url.default);
})();

Esbuild version: 0.20.0

alan-agius4 avatar Feb 05 '24 09:02 alan-agius4

What is the status of this ticket?

This is causing problems with the new angular17+ esbuild system and various packages

JonasSchoenwald avatar Aug 14 '24 15:08 JonasSchoenwald

  1. Does anyone have a workaround for this problem? EDIT -> seems fixed with within "@microsoft/signalr": "8.0.7" for me.
  2. Whats the status of this ticket?

MischaFrei avatar Mar 11 '25 11:03 MischaFrei

facing same issue with @microsoft/signalr": "8.0.0 in angular build

Muntazir86 avatar May 06 '25 10:05 Muntazir86

+1

mka-cmyk avatar Jul 31 '25 06:07 mka-cmyk