developit / microbundle

📦 Zero-configuration bundler for tiny modules.
https://npm.im/microbundle
MIT License
8.03k stars 362 forks source link

Oddities when bundling for Node #984

Closed webketje closed 2 years ago

webketje commented 2 years ago

I've noticed following oddities when bundling for Node with the following command:

microbundle --target node --no-sourcemap -f cjs,esm --strict --types

When object spread operator is used ({ ...defaults, ...options }), in both the generated index.js and index.cjs (of a type: module package), those lines are replaced with a custom _extends function, which is added:

function _extends() {
  _extends = Object.assign || function (target) {
    for (var i = 1; i < arguments.length; i++) {
      var source = arguments[i];

      for (var key in source) {
        if (Object.prototype.hasOwnProperty.call(source, key)) {
          target[key] = source[key];
        }
      }
    }

    return target;
  };

  return _extends.apply(this, arguments);
}

Object spread is supported in Node since v8.3 and my package specifies engines.node >= 12 so this is "useless" extra code in the output. Temp fix is to directly use Object.assign in source code instead of obj spread.

Another oddity I noticed was that there was generated code referring to document but this shouldn't be the case for Node builds?

rschristian commented 2 years ago

"engines" in your package.json is totally ignored by Microbundle.

That being said, #954 bumped the Node target to 12 from 8. I believe targeting 8 effectively means 8.0.0, hence no spread. Hasn't been released yet I don't think.

rschristian commented 2 years ago

Can confirm, #954 does correct this. Closing this out as there's nothing actionable at the moment.