Prevent "meteor shell" from stomping Underscore #3227
The return value of last REPL command is stored in global._ if the REPL is set to use the global context. So after you run your first REPL command, Underscore is no longer available to Meteor server code as global._ - that variable is now the result of your last REPL command.
The return value of last command is stored in global._ if the REPL is set to use the global context. So Underscore is no longer available to Meteor server code as global._ See http://stackoverflow.com/questions/10973968/underscore-doesnt-work-in-coffeescripts-console
Note that our implementation of
In other words, this change is nice because commands are still executed in global scope (so you can define top-level functions etc.). The only difference is that
Now, you might argue that having some way of accessing the last expression would be useful, but that's another discussion (that I'm happy to have here or elsewhere).
Summary: Before this commit you could type `Meteor.is` in a `meteor shell` session and then tab to see a list of possible completions (e.g. `Meteor.isClient`, `Meteor.isServer`), but typing a prefix of a global variable name like `Mete` followed by tab has been broken ever since we stopped using the global object as the REPL context: 7c7e52f The reason for that commit was to prevent the REPL from overwriting the global `_` variable (which most Meteor developers expect to be bound to `require("underscore")`): https://github.com/meteor/meteor/3227 This commit solves #3227 by making `repl.context._` a read-only property that is permanently "bound" to underscore. As a bonus, we now intercept assignments to `_` and store those values as `repl.context.__`, so you still have access to the last result in the shell via `__`. Test Plan: Run `meteor shell`, evaluate a few expressions, and see that (1) global variables can be tab-completed, (2) `_` remains bound to underscore, and (3) `__` gets bound to the result of the evaluated expressions. Reviewers: avital, stubailo, glasser Reviewed By: glasser Differential Revision: https://phabricator.meteor.io/D12