vsivsi/meteor-file-collection

DeprecationWarning in Meteor 1.6 / Node 8

edemaine opened this issue · 1 comments

Meteor 1.6 upgrades to Node 8 which adds this deprecation of root as an alias for global. vsivsi:file-collection does not seem to use the root alias. Nonetheless, I'm getting a DeprecationWarning on the last line of this compiled JavaScript:

    function FileCollection(root, options) {
      var indexOptions, ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, ref8, self;
      this.root = root != null ? root : share.defaultRoot;

which comes from this line of CoffeeScript. (If you want to test, set environment variable NODE_OPTIONS to --throw-deprecation so that you can see what line is causing the warning.)

I don't understand why this DeprecationWarning is triggering. The relevant nodejs code seems to just make a global variable called root that behaves in this way, but root is clearly an argument to FileCollection. OK, here are some experiments in Node 8 (meteor node):

> function f(root) { console.log(root) }
undefined
> f(5)
5
undefined
> function g(root) { this.root = root; }
undefined
> g(5)
DeprecationWarning: 'root' is deprecated, use 'global'
    at g (repl:1:30)
    at repl:1:1
    at ContextifyScript.Script.runInThisContext (vm.js:50:33)
    at REPLServer.defaultEval (repl.js:240:29)
    at bound (domain.js:301:14)
    at REPLServer.runBound [as eval] (domain.js:314:12)
    at REPLServer.onLine (repl.js:441:10)
    at emitOne (events.js:120:20)
    at REPLServer.emit (events.js:210:7)
    at REPLServer.Interface._onLine (readline.js:282:10)
[restart Node to reset warning]
> function h() { this.root = 5; }
undefined
> h()
DeprecationWarning: 'root' is deprecated, use 'global'
    at h (repl:1:26)
    at repl:1:1
    at ContextifyScript.Script.runInThisContext (vm.js:50:33)
    at REPLServer.defaultEval (repl.js:240:29)
    at bound (domain.js:301:14)
    at REPLServer.runBound [as eval] (domain.js:314:12)
    at REPLServer.onLine (repl.js:441:10)
    at emitOne (events.js:120:20)
    at REPLServer.emit (events.js:210:7)
    at REPLServer.Interface._onLine (readline.js:282:10)
>

So this means that this is getting set to the global environment... Oops, this is because I'm calling FileCollection instead of doing new FileCollection. My bad.

Glad you were able to figure it out!