Почему require ( "underscore" ) возвращает undefined при выполнении в node.js REPL?

Когда я запускаю node в консоли и набираю var _ = require('underscore');, _ заканчивается undefined. Если я поместил один и тот же код в файл и выполнил его, библиотека подчёркивания будет включена как ожидалось.

$ node
> var _ = require('underscore');
> console.log(_)
undefined // underscore library does not load
> var async = require('async');
undefined
> console.log(async) // async library does
{ noConflict: [Function],
  nextTick: [Function],
  forEach: [Function],
...
>

Но тот же код в файле .js, выполненный как node test.js, показывает загрузку обеих библиотек, как ожидалось. Что происходит?

Ответ 1

Node repl привязывает _ к значению последнего оцениваемого ввода; который перезаписывает привязку _ в var _ = ...;. Также см. документацию node.js для ответа.

Это верно, независимо от того, что заменяет ..., например:

$ node
> var _ = "any value";
undefined
> _
undefined