Запуск script для node.js repl
Есть ли способ настроить node.js repl? Я хочу, чтобы jquery и подчеркивание автоматически при каждом запуске repl. Есть ли файл (noderc?), Который загружает node.js, когда он запускает repl?
Эквивалент в Python заключается в редактировании ~/.ipython/ipy_user_conf.py
с помощью:
import_mod('sys os datetime re itertools functools')
Ответы
Ответ 1
Я не знаю какого-либо такого файла конфигурации, но если вы хотите, чтобы в REPL были доступны модули foo
и bar
, вы можете создать файл myrepl.js
, содержащий:
var myrepl = require("repl").start();
["foo", "bar"].forEach(function(modName){
myrepl.context[modName] = require(modName);
});
и когда вы выполняете его с помощью node myrepl.js
, вы получаете REPL с этими доступными модулями.
Вооруженный этими знаниями, вы можете поместить #!/path/to/node
вверху и сделать его исполняемым напрямую, или вы можете изменить свою версию модуля repl.js(источник доступен в https://github.com/joyent/node/blob/master/lib/repl.js для проверки) или что-то еще:)
Ответ 2
Я пробовал это сегодня, но .start
потребовал аргумент. Также я думаю, что useGlobal:true
было важно. Я закончил с помощью:
var myrepl=require('repl').start({useGlobal:true});
myrepl.context['myObj']=require('./myObject');
Сохранение этого кода в test.js
Я мог бы сделать node test.js
, затем получить доступ к myObj
в REPL.
Ответ 3
Может быть более новая функция Node.js(так как этому вопросу четыре года), но вы можете загружать и сохранять историю изменений как ipython.
.break - While inputting a multi-line expression, sometimes you get lost or just don't care about completing it. .break will start over.
.clear - Resets the context object to an empty object and clears any multi-line expression.
.exit - Close the I/O stream, which will cause the REPL to exit.
.help - Show this list of special commands.
.save - Save the current REPL session to a file
.save ./file/to/save.js
.load - Load a file into the current REPL session.
.load ./file/to/load.js
Я не могу понять, как это выполнить автоматически при запуске оболочки, но .load something
для меня сейчас достаточно удобен.
Ответ 4
Февраль 2017 - пока я согласен с принятым ответом, хотел бы добавить здесь немного больше комментариев.
Как настроить следующее (из домашнего каталога на моем Mac)
.node
├── node_modules
│ ├── lodash
│ └── ramda
├── package.json
└── repl.js
Тогда repl.js может выглядеть следующим образом:
const repl = require('repl');
let r = repl.start({
ignoreUndefined: true,
replMode: repl.REPL_MODE_STRICT
});
r.context.lodash = require('lodash');
r.context.R = require('ramda');
// add your dependencies here as you wish..
И, наконец, поместите псевдоним в ваш файл .bashrc
или .zshrc
и т.д. (в зависимости от ваших префиксов оболочки) - что-то вроде:
alias noder='node ~/.node/repl.js'
Теперь, чтобы использовать эту конфигурацию, вам просто нужно ввести noder
из командной строки. Выше я также указал, что всегда хотел бы быть в strict mode
и не хочу, чтобы undefined
печатался на консоли для объявлений и т.д.
Для актуальной информации о параметрах repl
и, в частности, repl.start
см. здесь
Ответ 5
Сохраняя вещи здесь, я собрался.
repl.js:
// things i want in repl
global.reload = require('require-nocache')(module) // so I can reload modules as I edit them
global.r = require('ramda') // <3 http://ramdajs.com/
// launch, also capture ref to the repl, in case i want it later
global.repl = require('repl').start()
Я могу ссылаться на это с помощью node repl
, который чувствует себя правильно, и мне не нужны глобальные переменные, потому что я просто messin 'вокруг в repl.