Rollup complains "is not exported" when it is

1.5k Views Asked by At

I'm running into this error while bundling one JS library which includes a package from another of my JS libraries. Both are bundled via Rollup, as UMD modules. I've reacreated this issue in a separate repo in order to show a simple example.

It'd be best to pull the repo and npm run build to see what I'm running into.

build/index.js → dist/index.umd.js...
(!) "this" has been rewritten to "undefined"
https://rollupjs.org/guide/en/#error-this-is-undefined
node_modules/some-package/index.umd.js
3:   typeof define === 'function' && define.amd ? define(['exports'], factory) :
4:   (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["clarakm-env-js"] = {}));
5: })(this, (function (exports) { 'use strict';
      ^
6:   var MY_CONSTANT = "this is my constant";
[!] RollupError: "MY_CONSTANT" is not exported by "node_modules/some-package/index.umd.js", imported by "build/index.js".
https://rollupjs.org/guide/en/#error-name-is-not-exported-by-module
build/index.js (1:9)
1: import { MY_CONSTANT } from 'some-package';
            ^
2: console.log(MY_CONSTANT);
3: //# sourceMappingURL=index.js.map
    at error (/home/josh/Desktop/rollup-issue/node_modules/rollup/dist/shared/rollup.js:210:30)
    at Module.error (/home/josh/Desktop/rollup-issue/node_modules/rollup/dist/shared/rollup.js:13578:16)
    at Module.traceVariable (/home/josh/Desktop/rollup-issue/node_modules/rollup/dist/shared/rollup.js:13961:29)
    at ModuleScope.findVariable (/home/josh/Desktop/rollup-issue/node_modules/rollup/dist/shared/rollup.js:12442:39)
    at Identifier.bind (/home/josh/Desktop/rollup-issue/node_modules/rollup/dist/shared/rollup.js:8371:40)
    at CallExpression.bind (/home/josh/Desktop/rollup-issue/node_modules/rollup/dist/shared/rollup.js:6165:28)
    at CallExpression.bind (/home/josh/Desktop/rollup-issue/node_modules/rollup/dist/shared/rollup.js:9888:15)
    at ExpressionStatement.bind (/home/josh/Desktop/rollup-issue/node_modules/rollup/dist/shared/rollup.js:6169:23)
    at Program.bind (/home/josh/Desktop/rollup-issue/node_modules/rollup/dist/shared/rollup.js:6165:28)
    at Module.bindReferences (/home/josh/Desktop/rollup-issue/node_modules/rollup/dist/shared/rollup.js:13574:18)

All of this is built via tsc && rollup -c. Since MY_CONSTANT is clearly exported from some-module, why does Rollup complain that it is not exported?


src/index.ts

import { MY_CONSTANT } from 'some-package';

console.log(MY_CONSTANT);

rollup.config.mjs

import nodeResolve from '@rollup/plugin-node-resolve';

export default {
  input: 'build/index.js',
  output: {
    file: 'dist/index.umd.js',
    format: 'umd'
  },
  plugins: [
    nodeResolve(),
  ]
};

node_modules/some-package/index.d.ts

export declare const MY_CONSTANT = 'this is my constant'; 

node_modules/some-package/index.umd.js

(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
  typeof define === 'function' && define.amd ? define(['exports'], factory) :
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["clarakm-env-js"] = {}));
})(this, (function (exports) { 'use strict';
  var MY_CONSTANT = "this is my constant";

  exports.MY_CONSTANT = MY_CONSTANT;
}));

node_modules/some-package/package.json

{
  "name": "some-package",
  "version": "1.0.0",
  "main": "index.umd.js",
  "module": "index.umd.js",
  "types": "index.d.ts"
}
1

There are 1 best solutions below

0
Josh M. On

I fixed this by changing the format of the package to es rather than umd. I assumed Rollup could handle UMD out of the box but ... maybe not?