I'm using babel to transpile es6 code to es5. I have this mongoose model
// src/user.model
const User = mongoose.model('User', userSchema);
export default User;
used in this index.js file within the same folder
// src/index.js
import User from "./user.model";
export {User};
On build it generates this error
return _user["default"];
^
TypeError: Cannot read properties of undefined (reading 'default')
The full compiled code is
// build/index.js
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "User", {
enumerable: true,
get: function get() {
return _user["default"];
}
});
var _user = _interopRequireDefault(require("./user.model"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
As you can see the _user
variable is initialized after it was referenced.
When I tweak this compiled code and initialize the _user
variable before it is used, the error goes.
Is there something I can do to prevent babel from initializing variables before it is called?
I had this error message but my problem was a circular dependency. Essentially I had something like this:
Contents of a.js:
Contents of b.js:
The problem is that Node is still trying to initialize a.js, and in doing so it got one of it's functions called before importing C. Specifically it's functions got called while importing B.
My fix was to re-order the imports in a.js: