Estou escrevendo um aplicativo Web no Node. Se eu tiver algum arquivo JS db.jscom 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.jscom 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 initfunção. Existem várias maneiras, mas por exemplo:
module.exports.init = function () {
console.log('hi');
};
Em seguida, chame-o assim, assumindo que você db.jsesteja no mesmo diretório que seu prompt de comando:
node -e 'require("./db").init()'
Para outros leitores, a initfunçã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 initmé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.jse 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