Skip to content

Lazy loaders not worked as suspected #25

@litmit

Description

@litmit

Try this code (simulate index.js loaders)

test.js

var obj = {};

Object.defineProperties(obj, {

  'util': {
    get: function() {
      console.log('wrapper called');
      return obj.util = require('util');
    }
  },
});

obj.util.isArray([]);
obj.util.isArray("");

node test.js
Output:

wrapper called
wrapper called

I think this is behavior that was not suspected.

Moreover:
node --use-strict test.js
Output:

wrapper called

TypeError: Cannot set property util of #<Object> which has only a getter
    at Object.defineProperties.util.get (test.js:8:23)
    at Object.<anonymous> (test.js:13:4)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:902:3

Well working code snippet:
test.js

var obj = {};

Object.defineProperties(obj, {

  'util': {
    get: function() {
      console.log('wrapper called');
      delete obj.util;
      return obj.util = require('util');
    },
    configurable: true
  },
});

obj.util.isArray([]);
obj.util.isArray("");

Run the test:
node --use-strict test.js
Output:

wrapper called

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions