Подтвердить что ты не робот

Выполнить некоторый код, а затем перейти в интерактивный node

Есть ли способ выполнить какой-либо код (в файле или из строки, не имеет значения) перед тем, как перейти в интерактивный режим в node.js?

Например, если я создаю script __preamble__.js, который содержит:

console.log("preamble executed! poor guy!");

а пользовательский тип node __preamble__.js получает этот результат:

preamble executed! poor guy!
> [interactive mode]
4b9b3361

Ответ 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