Estou escrevendo um aplicativo Web no Node. Se eu tiver algum arquivo JS db.js
com uma função init
, como eu poderia chamar essa função na linha de comando?
Estou escrevendo um aplicativo Web no Node. Se eu tiver algum arquivo JS db.js
com uma função init
, como eu poderia chamar essa função na linha de comando?
Respostas:
Não há comentários sobre o motivo pelo qual você deseja fazer isso ou qual poderia ser uma prática mais padrão: aqui está uma solução para sua pergunta ... Lembre-se de que o tipo de cotação exigido pela sua linha de comando pode variar.
No seu db.js
, exporte a init
função. Existem várias maneiras, mas por exemplo:
module.exports.init = function () {
console.log('hi');
};
Em seguida, chame-o assim, assumindo que você db.js
esteja no mesmo diretório que seu prompt de comando:
node -e 'require("./db").init()'
Para outros leitores, a init
função do OP poderia ter sido chamada de qualquer coisa, não é importante, é apenas o nome específico usado na pergunta.
module.exports.init = function () { console.log('hi'); };
E node -e 'require("./db").init()'
não funcionou para mim de alguma forma. Não sei ao certo o que fiz de errado, mas seguindo sua ideia, usei module.exports = myFunction,
e depois node -e 'require("./myFunction")()'
trabalhei para mim.
node -e 'require("./index").handler(require("./fixtures/sample_event_01.json"), {}, console.log)'
. O meio {}
seria o contexto, fique à vontade para se ajustar. O console.log também é um pouco primitivo, mas é um bom começo. Obviamente, você também pode escrever um CLI.js dedicado que, por sua vez, exija () o index.js / handler, conforme declarado em outros comentários.
Conforme as outras respostas, adicione o seguinte a someFile.js
module.exports.someFunction = function () {
console.log('hi');
};
Você pode adicionar o seguinte a package.json
"scripts": {
"myScript": "node -e 'require(\"./someFile\").someFunction()'"
}
No terminal, você pode ligar para
npm run myScript
Acho essa uma maneira muito mais fácil de lembrar dos comandos e usá-los
Tente tornar executável .
No db.js, adicione require('make-runnable');
até o final.
Agora você pode fazer:
node db.js init
Quaisquer argumentos adicionais seriam passados para o init
método
Executar diretamente da CLI (global)
Instalar
npm i -g run-func
Uso ou seja, execute a função "init", ela deve ser exportada, veja o final
run-func db.js init
ou
Executar a partir do script package.json (local)
Instalar
npm i -S run-func
Configuração
"scripts": {
"init": "run-func db.js init"
}
Uso
npm run init
Params
Quaisquer argumentos a seguir serão passados como parâmetros de função init(param1, param2)
run-func db.js init param1 param2
Importante
a função (neste exemplo init
) deve ser exportada no arquivo que a contém
module.exports = { init };
ou exportação ES6
export { init };
make-runnable
, mas isso é muito melhor do que isso, eu pensa. Obrigado.
npm i -g run-func
maneira simples:
digamos que você tenha o arquivo db.js em um diretório de ajuda na estrutura do projeto.
agora entre no diretório helpers e vá para o console do nó
helpers $ node
2) exigir arquivo db.js.
> var db = require("./db")
3) chame sua função (no seu caso, init ())
> db.init()
espero que isto ajude
Este está sujo, mas funciona :)
Vou chamar a main()
função do meu script. Anteriormente, acabei de colocar chamadas para main no final do script. No entanto, adicionei outras funções e as exportei do script (para usar funções em outras partes do código) - mas não quero executar a função main () toda vez que importo outras funções em outros scripts.
Então eu fiz isso, no meu script eu removi a chamada para main () e, em vez disso, no final do script, coloquei esta verificação:
if (process.argv.includes('main')) {
main();
}
Então, quando eu quero chamar essa função na CLI: node src/myScript.js main
Eu faço um IIFE, algo assim:
(() => init())();
este código será executado imediatamente e chamará a função init.
node init.js
e o arquivo contiver um IIFE, ele funcionará. Eu acho que não entendi completamente sua pergunta. Desculpe.
(init)();
se quiser :)
Simples, no arquivo javascript testfile.js:
module.exports.test = function () {
console.log('hi');
};
this.test();
Executando no prompt:
node testfile.js
test
é executado toda vez, então você precisa alterar o arquivo para chamar outra função)
Se seu arquivo contiver apenas sua função, por exemplo:
myFile.js:
function myMethod(someVariable) {
console.log(someVariable)
}
Chamando a partir da linha de comando como esta, nada acontecerá:
node myFile.js
Mas se você alterar seu arquivo:
myFile.js:
myMethod("Hello World");
function myMethod(someVariable) {
console.log(someVariable)
}
Agora isso funcionará na linha de comando:
node myFile.js