Respostas:
Ainda não há nada incorporado para fornecer a funcionalidade exata que você descreve. No entanto, uma alternativa para usá- requirelo para usar o .loadcomando no REPL, como:
.load foo.js
Carrega o arquivo linha por linha, como se você o tivesse digitado no REPL. Diferente requiredisso, 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 evalpara carregar seu script sem poluir a história REPL:
var fs = require('fs');
eval(fs.readFileSync('foo.js').toString())
eu sempre uso esse comando
node -i -e "$(< yourScript.js)"
funciona exatamente como no Python sem nenhum pacote.
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.
var vorpal = require('vorpal')();
var repl = require('vorpal-repl');
vorpal
.delimiter('myapp>')
.use(repl)
.show()
.parse(process.argv);
Em seguida, você pode executar o aplicativo e ele cairá em um REPL.
$ node myapp.js repl
myapp> repl:
Outra maneira é definir essas funções como globais.
global.helloWorld = function() { console.log("Hello World"); }
Em seguida, pré-carregue o arquivo no REPL como:
node -r ./file.js
Em seguida, a função helloWorldpode ser acessada diretamente no REPL.
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()srcpropriedade adicionada a cada função, por exemploexpress.logger.src.talkcomando).appendcomando do tecladoConsulte: https://github.com/thlorenz/replpad
CXX=clang++ npm install replpadtrabalhar 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?
node -h
-e, --eval script evaluate script
-i, --interactive always enter the REPL even if stdin
node -e 'var client = require("./build/main/index.js"); console.log("Use `client` in repl")' -i
Em seguida, você pode adicionar aos scripts package.json
"repl": "node -e 'var client = require(\"./build/main/index.js\"); console.log(\"Use `client` in repl\")' -i",
testado usando o nó v8.1.2
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.
.load my_work.js, apesar de exigir algumas exports.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 minha readlineconfiguraçã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 .js
if (require.main === module){
(function() {
var _context = require('repl').start({prompt: '$> '}).context;
var scope = require('lexical-scope')(require('fs').readFileSync(__filename));
for (var name in scope.locals[''] )
_context[scope.locals[''][name]] = eval(scope.locals[''][name]);
for (name in scope.globals.exported)
_context[scope.globals.exported[name]] = eval(scope.globals.exported[name]);
})();
}
Agora, se o seu arquivo estiver src.js, a execução node src.jsiniciará o nó, carregará o arquivo, iniciará um REPL e copiará todos os objetos declarados varno nível superior, bem como quaisquer globais exportados. Os if (require.main === module)garante que este código não será executado se src.jsestá incluído através de um requirecomunicado. Na verdade, você pode adicionar qualquer código que você deseja que seja excedido quando estiver executando o src.jsautônomo para fins de depuração dentro da ifinstrução.
Aqui está uma versão da função bash da resposta de George :
noderepl() {
FILE_CONTENTS="$(< $1 )"
node -i -e "$FILE_CONTENTS"
}
Se você colocar isso no seu, ~/.bash_profilepoderá usá-lo como um pseudônimo, ou seja:
noderepl foo.js
Outra sugestão que não vejo aqui: experimente este pouco de código
#!/usr/bin/env node
'use strict';
const repl = require('repl');
const cli = repl.start({ replMode: repl.REPL_MODE_STRICT });
cli.context.foo = require('./foo'); // injects it into the repl
Então você pode simplesmente executar este script e ele incluirá foocomo uma variável
Resposta antiga
type test.js|node -i
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.
node -e require('repl').start({useGlobal:true}); -r ./test2.js
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