Node에서 웹 앱을 작성 중입니다. db.js
함수 가있는 JS 파일이 있으면 init
명령 줄에서 해당 함수를 어떻게 호출 할 수 있습니까?
Node에서 웹 앱을 작성 중입니다. db.js
함수 가있는 JS 파일이 있으면 init
명령 줄에서 해당 함수를 어떻게 호출 할 수 있습니까?
답변:
왜 이런 일을하고 싶거나 더 표준적인 방법이 될 수 있는지에 대한 의견이 없습니다. 다음은 귀하의 질문에 대한 해결책입니다.
당신의에서 db.js
, 내보내기 init
기능. 여러 가지 방법이 있지만 예를 들면 다음과 같습니다.
module.exports.init = function () {
console.log('hi');
};
그런 다음 db.js
명령 프롬프트와 동일한 디렉토리에 있다고 가정하면 다음과 같이 호출하십시오 .
node -e 'require("./db").init()'
다른 독자들에게 OP의 init
기능은 무엇이든 호출 될 수 있습니다. 중요하지는 않으며 질문에 사용 된 특정 이름 일뿐입니다.
module.exports.init = function () { console.log('hi'); };
그리고 node -e 'require("./db").init()'
어떻게 든 나를 위해 작동하지 않았다. 나는 내가 뭘 잘못했는지 확신하지 못하지만, 당신의 생각에 따라을 사용 module.exports = myFunction,
하고 node -e 'require("./myFunction")()'
나를 위해 일했습니다.
node -e 'require("./index").handler(require("./fixtures/sample_event_01.json"), {}, console.log)'
합니다. 중간 {}
은 상황이 될 것입니다, 자유롭게 조정하십시오. 또한 console.log는 약간 원시적이지만 좋은 시작입니다. 물론 다른 의견에서 언급 한대로 index.js / handler를 요구하는 전용 CLI.js를 작성할 수도 있습니다.
다른 답변에 따라 다음을 추가하십시오. someFile.js
module.exports.someFunction = function () {
console.log('hi');
};
그런 다음에 다음을 추가 할 수 있습니다 package.json
"scripts": {
"myScript": "node -e 'require(\"./someFile\").someFunction()'"
}
터미널에서 전화를 걸 수 있습니다
npm run myScript
나는 이것이 명령을 기억하고 사용하는 훨씬 쉬운 방법을 찾았습니다.
make-runnable을 시도하십시오 .
db.js require('make-runnable');
에서 끝에 추가 하십시오.
이제 할 수있는 일 :
node db.js init
추가 인수는 init
메소드에 전달됩니다 .
CLI에서 직접 실행 (전역)
설치
npm i -g run-func
사용법, 즉 "init"기능을 실행해야합니다. 내 보내야합니다. 하단을 참조하십시오.
run-func db.js init
또는
package.json 스크립트에서 실행 (로컬)
설치
npm i -S run-func
설정
"scripts": {
"init": "run-func db.js init"
}
용법
npm run init
매개 변수
다음 인수는 함수 매개 변수로 전달됩니다. init(param1, param2)
run-func db.js init param1 param2
중대한
함수 (이 예제에서 init
)는 함수를 포함하는 파일로 내 보내야합니다.
module.exports = { init };
또는 ES6 내보내기
export { init };
make-runnable
했지만 이것보다 훨씬 낫습니다. 감사.
npm i -g run-func
간단한 방법 :
프로젝트 구조의 helpers 디렉토리에 db.js 파일이 있다고 가정 해 봅시다.
이제 helpers 디렉토리로 이동하여 노드 콘솔로 이동하십시오.
helpers $ node
2) db.js 파일이 필요합니다
> var db = require("./db")
3) 함수를 호출하십시오 (귀하의 경우 init ())
> db.init()
도움이 되었기를 바랍니다
이건 더럽지 만 작동합니다 :)
나는 전화 할 것이다 main()
스크립트에서 함수를 합니다. 이전에는 스크립트 끝에서 main을 호출했습니다. 그러나 다른 함수를 추가하고 스크립트의 다른 부분에서 함수를 사용하기 위해 스크립트에서 내보냈습니다.하지만 다른 스크립트에서 다른 함수를 가져올 때마다 main () 함수를 실행하고 싶지 않습니다.
그래서 나는 이것을했다. 내 스크립트에서 main ()에 대한 호출을 제거하고 대신 스크립트 끝 에서이 검사를했다.
if (process.argv.includes('main')) {
main();
}
따라서 CLI에서 해당 함수를 호출하려는 경우 : node src/myScript.js main
나는 IIFE를 수행합니다.
(() => init())();
이 코드는 즉시 실행되며 init 함수를 호출합니다.
node init.js
하면 파일에 IIFE가 포함되어 작동합니다. 귀하의 질문을 완전히 이해하지 못했다고 생각합니다. 죄송합니다.
(init)();
이 원하는 경우에 당신은 그것을 간단하게 할 수 있습니다 :)
자바 스크립트 파일 testfile.js에서 간단합니다.
module.exports.test = function () {
console.log('hi');
};
this.test();
프롬프트에서 실행 :
node testfile.js
test
: 매번 실행되므로 다른 함수를 호출하도록 파일을 변경해야 함)
파일에 함수 만 포함 된 경우
myFile.js :
function myMethod(someVariable) {
console.log(someVariable)
}
다음과 같이 명령 행에서 호출하면 아무 일도 일어나지 않습니다.
node myFile.js
그러나 파일을 변경하면 :
myFile.js :
myMethod("Hello World");
function myMethod(someVariable) {
console.log(someVariable)
}
이제 이것은 명령 행에서 작동합니다 :
node myFile.js