Выполнить некоторый код, а затем перейти в интерактивный node
Есть ли способ выполнить какой-либо код (в файле или из строки, не имеет значения) перед тем, как перейти в интерактивный режим в node.js?
Например, если я создаю script __preamble__.js
, который содержит:
console.log("preamble executed! poor guy!");
а пользовательский тип node __preamble__.js
получает этот результат:
preamble executed! poor guy!
> [interactive mode]
Ответы
Ответ 1
Действительно старый вопрос, но...
Я искал нечто похожее, я полагаю, и узнал об этом.
Вы можете открыть REPL (ввод node
на вашем терминале), а затем загрузить файл.
Например: .load ./script.js
.
Нажмите enter, и содержимое файла будет выполнено. Теперь все созданное (объект, переменная, функция) в вашем script будет доступно.
Например:
// script.js
var y = {
name: 'obj',
status: true
};
var x = setInterval(function () {
console.log('As time goes by...');
}, 5000);
В REPL:
//REPL
.load ./script.js
Теперь вы вводите REPL и взаимодействуете с "живым кодом".
Вы можете console.log(y)
или clearInterval(x)
;
Это будет немного странно, потому что "Со временем..." продолжают появляться каждые пять секунд (или так).
Но это сработает!
Ответ 2
Вы можете легко создать новый repl
в своем программном обеспечении Node:
var repl = require("repl");
var r = repl.start("node> ");
r.context.pause = pauseHTTP;
r.context.resume = resumeHTTP;
Внутри REPL вы можете вызвать pause()
или resume()
и выполнить функции pauseHTTP()
и resumeHTTP()
напрямую. Просто присвойте все, что хотите представить члену REPL context
.
Ответ 3
Это может быть достигнуто с помощью текущей версии NodeJS (5.9.1
):
$ node -i -e "console.log('A message')"
Флаг -e
оценивает строку, а флаг -i
начинает интерактивный режим.
Вы можете прочитать больше в запрошенном запросе на перенос
Ответ 4
Недавно я начал проект по созданию расширенной интерактивной оболочки для Node и связанных языков, таких как CoffeeScript. Одной из особенностей является загрузка файла или строки в контексте интерпретатора при запуске, который учитывает загруженный язык.
http://danielgtaylor.github.com/nesh/
Примеры:
# Load a string (Javascript)
nesh -e 'var hello = function (name) { return "Hello, " + name; };'
# Load a string (CoffeeScript)
nesh -c -e 'hello = (name) -> "Hello, #{name}"'
# Load a file (Javascript)
nesh -e hello.js
# Load a file (CoffeeScript)
nesh -c -e hello.coffee
Затем в интерпретаторе вы можете получить доступ к функции hello
.
Ответ 5
node -r
позволяет вам потребовать модуль при запуске REPL. NODE_PATH
задает путь поиска модуля. Таким образом, вы можете запустить что-то вроде этого в командной строке:
NODE_PATH=. node -r myscript.js
Это должно поместить вас в REPL с загруженным script.
Ответ 6
Изменить: игнорировать это. @jaywalking101 ответ намного лучше. Сделайте это вместо этого.
Если вы работаете изнутри оболочки Bash (Linux, OS X, Cygwin), тогда
cat __preamble__.js - | node -i
будет работать. Это также приводит много шума от оценки каждой строки преамбулы.js, но послесловие вы попадаете в интерактивную оболочку в нужном вам контексте.
( "'-' to 'cat' просто указывает" использовать стандартный ввод ".)
Ответ 7
Аналогичный ответ на @slacktracer, но если вы отлично используете global
в своем script, вы можете просто require
вместо него (обучение и) с помощью .load
.
Пример lib.js
:
global.x = 123;
Пример node
сеанс:
$ node
> require('./lib')
{}
> x
123
В качестве приятного побочного эффекта вам даже не нужно танцевать var x = require('x'); 0
, так как module.exports
остается пустым объектом, поэтому результат require
не заполняет ваш экран содержимым модуля.
Ответ 8
Vorpal.js был создан для этого. Он предоставляет API для создания интерактивного CLI в контексте вашего приложения.
Он включает плагины, и один из них Vorpal-REPL. Это позволяет вводить repl
, и это приведет вас к REPL в контексте вашего приложения.
Пример для реализации:
var vorpal = require('vorpal')();
var repl = require('vorpal-repl');
vorpal.use(repl).show();
// Now you do your custom code...
// If you want to automatically jump
// into REPl mode, just do this:
vorpal.exec('repl');
Что все!
Отказ от ответственности: я написал Vorpal.
Ответ 9
Не существует способа сделать это изначально. Вы можете либо ввести node интерактивную оболочку node
, либо запустить script, у вас есть node myScrpt.js
. @sarnold прав, в этом случае, если вы хотите, чтобы для вашего приложения вам нужно было сделать это самостоятельно, и использование инструментария repl поможет вам в этом.
Ответ 10
nit-tool позволяет загружать модуль node в интерактивный реплика и иметь доступ к внутренней среде модуля (контекст соединения) для целей разработки
npm install nit-tool -g