it-swarm-pt.tech

execute algum código e entre no nó interativo

Existe uma maneira de executar algum código (em um arquivo ou em uma string, realmente não importa) antes de entrar no modo interativo no node.js?

Por exemplo, se eu criar um script __preamble__.js que contém:

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

e um usuário digita node __preamble__.js eles obtêm esta saída:

preamble executed! poor guy!
> [interactive mode]
66
user961528

Pergunta realmente antiga, mas ...

Eu estava procurando por algo semelhante, acredito, e descobri isso. Você pode abrir o REPL (digitando node no seu terminal) e carregar um arquivo. Assim: .load ./script.js.) Pressione enter e o conteúdo do arquivo será Agora tudo o que foi criado (objeto, variável, função) em seu script estará disponível.

Por exemplo:

// script.js
var y = {
    name: 'obj',
    status: true
};

var x = setInterval(function () {
    console.log('As time goes by...');
}, 5000);

No REPL:

//REPL
.load ./script.js

Agora você digita REPL e interage com o "código ativo". Você pode console.log(y) ou clearInterval(x);

Será um pouco estranho, porque "À medida que o tempo passa ..." continue aparecendo a cada cinco segundos (mais ou menos). Mas vai funcionar!

94
slacktracer

Você pode iniciar um novo repl em seu software Node com bastante facilidade:

var repl = require("repl");
var r = repl.start("node> ");
r.context.pause = pauseHTTP;
r.context.resume = resumeHTTP;

De dentro do REPL, você pode chamar pause() ou resume() e executar as funções pauseHTTP() e resumeHTTP() diretamente. atribua o que você deseja expor ao membro context do REPL.

25
sarnold

Isso pode ser alcançado com o versão atual do NodeJS (5.9.1):

$ node -i -e "console.log('A message')"

O -e flag avalia a string e o -i flag inicia o modo interativo.

Você pode ler mais no referenciado solicitação de recebimento

20
gnerkus

Recentemente, iniciei um projeto para criar um Shell interativo avançado para Node e linguagens associadas como CoffeeScript. Um dos recursos é carregar um arquivo ou string no contexto do intérprete na inicialização, que leva em conta o idioma carregado.

http://danielgtaylor.github.com/nesh/

Exemplos:

# 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

Depois, no intérprete, você pode acessar a função hello.

7
Daniel

node -r permite que você exija um módulo quando REPL é iniciado. NODE_PATH define o caminho de pesquisa do módulo. Então você pode executar algo parecido com isto na sua linha de comando:

NODE_PATH=. node -r myscript.js

Isso deve colocá-lo em um REPL com seu script carregado.

7
Doh Simpson

Editar: ignore isso. A resposta de @ jaywalking101 é muito melhor. Faça isso em vez disso.

Se você estiver executando dentro de um Bash Shell (Linux, OS X, Cygwin),

cat __preamble__.js - | node -i

vai funcionar. Isso também gera muito barulho ao avaliar cada linha de preâmbulo. Js, mas depois você pousa em um Shell interativo no contexto desejado.

(O '-' para 'cat' apenas especifica "usar entrada padrão".)

2
fiddlemath

Vorpal.js foi criado para fazer exatamente isso. Ele fornece uma API para criar uma CLI interativa no contexto do seu aplicativo.

Inclui plugins, e um deles é Vorpal-REPL . Isso permite que você digite repl e isso o levará a um REPL dentro do contexto do seu aplicativo .

Exemplo a implementar:

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');

Isso é tudo!

Isenção de responsabilidade: escrevi Vorpal.

2
dthree

Resposta semelhante a @slacktracer, mas se você estiver bem usando global em seu script, poderá simplesmente require em vez de (aprender e) usando .load.

Exemplo lib.js:

global.x = 123;

Exemplo node sessão:

$ node
> require('./lib')
{}
> x
123

Como um bom efeito colateral, você não precisa nem dançar var x = require('x'); 0, pois module.exports Continua sendo um objeto vazio e, portanto, o resultado require não será preenchido sua tela com o conteúdo do módulo.

2
Felix Rabe

Não há como fazer isso nativamente. Você pode inserir o nó interativo Shell node ou executar um script que possui node myScrpt.js. O @sarnold está certo, pois se você quiser isso para o seu aplicativo, precisará fazer isso sozinho, e usar o kit de ferramentas de substituição é útil para esse tipo de coisa

0
Evan

nit-tool permite carregar um módulo de nó no repl interativo e ter acesso ao ambiente interno do módulo (contexto de junção) para fins de desenvolvimento

npm install nit-tool -g
0
neu-rah