babel-plugin-transform-commonjs icon indicating copy to clipboard operation
babel-plugin-transform-commonjs copied to clipboard

Support for re-exporting ES6 modules

Open frenzzy opened this issue 5 years ago • 2 comments

IN example:

module.exports = require('./lib/index.js');

OUT actual:

import _libIndexJs from "./lib/index.js";
var module = {
  exports: {}
};
var exports = module.exports;

module.exports = _libIndexJs;
export default module.exports;

OUT expected:

export * from "./lib/index.js";

Source Code: https://unpkg.com/[email protected]/index.js

import { graphql } from 'react-relay'
// Uncaught SyntaxError: The requested module 'node_modules/react-relay/index.js' does not provide an export named 'graphql'

frenzzy avatar Jul 31 '19 10:07 frenzzy

Would be cool to support named exports too

Source code: https://unpkg.com/[email protected]/lib/index.js

IN example:

var ReactRelayContext = require("./ReactRelayContext");
var ReactRelayFragmentContainer = require("./ReactRelayFragmentContainer");
var ReactRelayPaginationContainer = require("./ReactRelayPaginationContainer");
var ReactRelayQueryRenderer = require("./ReactRelayQueryRenderer");
var ReactRelayRefetchContainer = require("./ReactRelayRefetchContainer");
var RelayRuntime = require("relay-runtime");

module.exports = {
  QueryRenderer: ReactRelayQueryRenderer,
  MutationTypes: RelayRuntime.MutationTypes,
  RangeOperations: RelayRuntime.RangeOperations,
  ReactRelayContext: ReactRelayContext,
  applyOptimisticMutation: RelayRuntime.applyOptimisticMutation,
  commitLocalUpdate: RelayRuntime.commitLocalUpdate,
  commitMutation: RelayRuntime.commitMutation,
  createFragmentContainer: ReactRelayFragmentContainer.createContainer,
  createPaginationContainer: ReactRelayPaginationContainer.createContainer,
  createRefetchContainer: ReactRelayRefetchContainer.createContainer,
  fetchQuery: RelayRuntime.fetchQuery,
  graphql: RelayRuntime.graphql,
  requestSubscription: RelayRuntime.requestSubscription
};

OUT actual:

import _relayRuntime from "relay-runtime";
import _ReactRelayRefetchContainer from "./ReactRelayRefetchContainer";
import _ReactRelayQueryRenderer from "./ReactRelayQueryRenderer";
import _ReactRelayPaginationContainer from "./ReactRelayPaginationContainer";
import _ReactRelayFragmentContainer from "./ReactRelayFragmentContainer";
import _ReactRelayContext from "./ReactRelayContext";
var module = {
  exports: {}
};
var exports = module.exports;
var ReactRelayContext = _ReactRelayContext;
var ReactRelayFragmentContainer = _ReactRelayFragmentContainer;
var ReactRelayPaginationContainer = _ReactRelayPaginationContainer;
var ReactRelayQueryRenderer = _ReactRelayQueryRenderer;
var ReactRelayRefetchContainer = _ReactRelayRefetchContainer;
var RelayRuntime = _relayRuntime;

module.exports = {
  QueryRenderer: ReactRelayQueryRenderer,
  MutationTypes: RelayRuntime.MutationTypes,
  RangeOperations: RelayRuntime.RangeOperations,
  ReactRelayContext: ReactRelayContext,
  applyOptimisticMutation: RelayRuntime.applyOptimisticMutation,
  commitLocalUpdate: RelayRuntime.commitLocalUpdate,
  commitMutation: RelayRuntime.commitMutation,
  createFragmentContainer: ReactRelayFragmentContainer.createContainer,
  createPaginationContainer: ReactRelayPaginationContainer.createContainer,
  createRefetchContainer: ReactRelayRefetchContainer.createContainer,
  fetchQuery: RelayRuntime.fetchQuery,
  graphql: RelayRuntime.graphql,
  requestSubscription: RelayRuntime.requestSubscription
};
export default module.exports;

OUT expected:

import _relayRuntime from "relay-runtime";
import _ReactRelayRefetchContainer from "./ReactRelayRefetchContainer";
import _ReactRelayQueryRenderer from "./ReactRelayQueryRenderer";
import _ReactRelayPaginationContainer from "./ReactRelayPaginationContainer";
import _ReactRelayFragmentContainer from "./ReactRelayFragmentContainer";
import _ReactRelayContext from "./ReactRelayContext";
var module = {
  exports: {}
};
var exports = module.exports;
var ReactRelayContext = _ReactRelayContext;
var ReactRelayFragmentContainer = _ReactRelayFragmentContainer;
var ReactRelayPaginationContainer = _ReactRelayPaginationContainer;
var ReactRelayQueryRenderer = _ReactRelayQueryRenderer;
var ReactRelayRefetchContainer = _ReactRelayRefetchContainer;
var RelayRuntime = _relayRuntime;

module.exports = {
  QueryRenderer: ReactRelayQueryRenderer,
  MutationTypes: RelayRuntime.MutationTypes,
  RangeOperations: RelayRuntime.RangeOperations,
  ReactRelayContext: ReactRelayContext,
  applyOptimisticMutation: RelayRuntime.applyOptimisticMutation,
  commitLocalUpdate: RelayRuntime.commitLocalUpdate,
  commitMutation: RelayRuntime.commitMutation,
  createFragmentContainer: ReactRelayFragmentContainer.createContainer,
  createPaginationContainer: ReactRelayPaginationContainer.createContainer,
  createRefetchContainer: ReactRelayRefetchContainer.createContainer,
  fetchQuery: RelayRuntime.fetchQuery,
  graphql: RelayRuntime.graphql,
  requestSubscription: RelayRuntime.requestSubscription
};
export const { // <====== NAMED EXPORTS ADDED
  QueryRenderer,
  MutationTypes,
  RangeOperations,
  ReactRelayContext,
  applyOptimisticMutation,
  commitLocalUpdate,
  commitMutation,
  createFragmentContainer,
  createPaginationContainer,
  createRefetchContainer,
  fetchQuery,
  graphql,
  requestSubscription,
} = module.exports;
export default module.exports;

Is it possible/doable?

See also rollup-plugin-commonjs and its namedExports option for inspiration.

frenzzy avatar Jul 31 '19 11:07 frenzzy

Any progress so far?

screetBloom avatar Oct 19 '21 02:10 screetBloom