Eu tenho um script foo.js
que contém algumas funções que eu quero jogar no REPL.
Existe uma maneira de o nó executar o meu script e depois saltar para um REPL com todas as globais declaradas, como eu posso com python -i foo.py
ou ghci foo.hs
?
Eu tenho um script foo.js
que contém algumas funções que eu quero jogar no REPL.
Existe uma maneira de o nó executar o meu script e depois saltar para um REPL com todas as globais declaradas, como eu posso com python -i foo.py
ou ghci foo.hs
?
Ainda não há nada incorporado para fornecer a funcionalidade exata que você descreve. No entanto, uma alternativa para usá- require
lo para usar o .load
comando no REPL, como:
.load foo.js
Carrega o arquivo linha por linha, como se você o tivesse digitado no REPL. Diferente require
disso, polui o histórico do REPL com os comandos que você carregou. No entanto, tem a vantagem de ser repetível porque não é armazenado em cache comorequire
.
O que é melhor para você dependerá do seu caso de uso.
Edit: Ele tem aplicabilidade limitada, porque ele não funciona no modo estrito, mas três anos depois eu aprendi que se o seu script não tem 'use strict'
, você pode usar eval
para carregar seu script sem poluir a história REPL:
var fs = require('fs');
eval(fs.readFileSync('foo.js').toString())
eu sempre uso esse comando
funciona exatamente como no Python sem nenhum pacote.
fonte
Eu criei o Vorpal.js , que lida com esse problema, transformando o seu nó em uma CLI interativa. Ele suporta uma extensão REPL, que o leva a um REPL dentro do contexto do seu aplicativo em execução.
Em seguida, você pode executar o aplicativo e ele cairá em um REPL.
fonte
Outra maneira é definir essas funções como globais.
Em seguida, pré-carregue o arquivo no REPL como:
Em seguida, a função
helloWorld
pode ser acessada diretamente no REPL.fonte
Criei o replpad desde que me cansei de recarregar o script repetidamente.
Basta instalá-lo via:
npm install -g replpad
Em seguida, use-o executando:
replpad
Se você deseja que ele assista todos os arquivos nos subdiretórios atual e todos e inclua-os na repl quando eles mudarem:
replpad .
Confira os vídeos no site para ter uma idéia melhor de como funciona e aprenda sobre alguns outros recursos interessantes que possui:
dox()
função que é adicionada a todas as funções principais, ou seja,fs.readdir.dox()
dox()
função que é adicionada a todos os módulos instalados via npm, ou seja,marked.dox()
src
propriedade adicionada a cada função, por exemploexpress.logger.src
.talk
comando).append
comando do tecladoConsulte: https://github.com/thlorenz/replpad
fonte
CXX=clang++ npm install replpad
trabalhar em torno o errog++: error: unrecognized command line option '-stdlib=libc++'
# # Fatal error in ../deps/v8/src/api.cc, line 1248 # Check failed: !value_obj->IsJSReceiver() || value_obj->IsTemplateInfo(). # Illegal instruction: 4
Por que não carregar o arquivo em uma repl de nó interativo?
Em seguida, você pode adicionar aos scripts package.json
testado usando o nó v8.1.2
fonte
node -i -r "./build/main/index.js"
?Atualmente, você não pode fazer isso diretamente, mas
mylib = require('./foo.js')
no REPL. Lembre-se de que os métodos são exportados, não declarados como globais.fonte
.load my_work.js
, apesar de exigir algumasexports.working_var = ...
declarações adicionais , porque o REPL vomita em alguns tipos de javascript perfeitamente válidos, como comentários de várias linhas (pelo menos com a minhareadline
configuração).replpad
é legal, mas para uma maneira rápida e fácil de carregar um arquivo no nó, importar suas variáveis e iniciar uma substituição, você pode adicionar o seguinte código ao final do seu arquivo .jsAgora, se o seu arquivo estiver
src.js
, a execuçãonode src.js
iniciará o nó, carregará o arquivo, iniciará um REPL e copiará todos os objetos declaradosvar
no nível superior, bem como quaisquer globais exportados. Osif (require.main === module)
garante que este código não será executado sesrc.js
está incluído através de umrequire
comunicado. Na verdade, você pode adicionar qualquer código que você deseja que seja excedido quando estiver executando osrc.js
autônomo para fins de depuração dentro daif
instrução.fonte
Aqui está uma versão da função bash da resposta de George :
Se você colocar isso no seu,
~/.bash_profile
poderá usá-lo como um pseudônimo, ou seja:fonte
Outra sugestão que não vejo aqui: experimente este pouco de código
Então você pode simplesmente executar este script e ele incluirá
foo
como uma variávelfonte
Resposta antiga
Irá abrir o nó REPL e digitar todas as linhas de test.js no REPL, mas por alguma razão o nó será encerrado após o término do arquivo
Outro problema é que as funções não serão içadas.
Melhor resposta
Em seguida, todas as globais declaradas sem var no test2.js estarão disponíveis no REPL
não sei por que var a no escopo global não estará disponível
fonte