명령줄에서 스크립트 기능 실행(노드 JS)
노드로 웹 앱을 만들고 있습니다.JS 파일이 있는 경우db.js
기능을 가지고init
명령줄에서 어떻게 그 함수를 호출할 수 있습니까?
이 방법을 사용하는 이유나 보다 표준적인 방법에 대해서는 코멘트를 하지 않습니다.다음은 질문에 대한 해결책입니다.명령줄에 필요한 견적 유형은 다를 수 있습니다.
고객님의 고객명db.js
, 를 내보냅니다.init
기능.여러 가지 방법이 있지만, 예를 들어 다음과 같습니다.
module.exports.init = function () {
console.log('hi');
};
그럼 이렇게 불러주세요.db.js
는 명령 프롬프트와 같은 디렉토리에 있습니다.
node -e 'require("./db").init()'
다른 독자들에게 OP의init
함수는 어떤 것으로도 불릴 수 있었고, 중요한 것은 아니며, 단지 질문에서 사용된 특정 이름일 뿐입니다.
다른 답변과 마찬가지로 다음 사항을 추가합니다.someFile.js
module.exports.someFunction = function () {
console.log('hi');
};
다음으로 다음 항목을 에 추가할 수 있습니다.package.json
"scripts": {
"myScript": "node -e 'require(\"./someFile\").someFunction()'"
}
단말기에서 전화를 걸 수 있습니다.
npm run myScript
이 방법을 사용하면 명령어를 기억하고 사용할 수 있습니다.
업데이트 2020 - CLI
@mix3d가 지적한 바와 같이 명령어를 실행할 수 있습니다.file.js
파일 및someFunction
옵션 뒤에 공백으로 구분된 매개 변수가 계속됩니다.
npx run-func file.js someFunction "just some parameter"
바로 그겁니다.
file.js
위의 예에서 호출됨
const someFunction = (param) => console.log('Welcome, your param is', param)
// exporting is crucial
module.exports = { someFunction }
상세설명
CLI에서 직접 실행(글로벌)
설치하다
npm i -g run-func
사용 방법(예: 실행 함수 "init"), 내보내야 합니다. 아래쪽을 참조하십시오.
run-func db.js init
아니면
패키지에서 실행합니다.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 };
실행 가능한 것을 시험해 보세요.
db.js에서 추가require('make-runnable');
끝까지.
다음 작업을 수행할 수 있습니다.
node db.js init
그 이상의 arg는, 에 건네집니다.init
method(목록 또는 키-값 쌍 형식)를 지정합니다.
CLI를 사용하여 기능을 실행하고 싶을 때도 있고, 실행할 때도 있습니다.require
다른 모듈에서 온 것입니다.둘 다 하는 방법은 다음과 같습니다.
// file to run
const runMe = () => {}
if (require.main === module) {
runMe()
}
module.exports = runMe
이것은 더럽지만 효과가 있다.:)
내가 전화할게main()
기능을 합니다.이전에는 스크립트의 마지막에 메인에 콜을 걸었을 뿐입니다.그러나 다른 함수를 추가하여 스크립트에서 내보냈습니다(코드의 다른 부분에서 함수를 사용하기 위해). 그러나 다른 스크립트로 다른 함수를 Import할 때마다 main() 함수를 실행하고 싶지 않습니다.
그래서 스크립트에서 main()에 대한 콜을 삭제하고 스크립트의 마지막에 다음 체크를 붙였습니다.
if (process.argv.includes('main')) {
main();
}
CLI에서 해당 할 수 있습니다.node src/myScript.js main
간단한 방법:
예를 들어 프로젝트 구조의 도우미 디렉토리에 db.delpers 파일이 있다고 가정해 보겠습니다.
이제 도우미 디렉토리로 이동하여 노드 콘솔로 이동합니다.
helpers $ node
2) db.dll 파일이 필요합니다.
> var db = require("./db")
3) 함수를 호출합니다(이 경우 init()).
> db.init()
이것이 도움이 되기를 바란다
을 db.js
수 .db_init.js
그냥: "네, 네,node db_init.js
.
db.deb.db.deb:
module.exports = {
method1: function () { ... },
method2: function () { ... }
}
db_init.syslog:
var db = require('./db');
db.method1();
db.method2();
난 IIE 같은 걸 하고 있어
(() => init())();
이 코드는 즉시 실행되며 init 함수를 호출합니다.
2022년 업데이트 - ES 모듈로 전환한 경우 필수 기술을 사용할 수 없으며 동적 가져오기를 사용해야 합니다.
node -e 'import("./db.js").then(dbMod => dbMod.init());'
또는 --experimental-specifier-resolution=node 플래그를 사용합니다.
node --experimental-specifier-resolution=node -e 'import("./db").then(dbMod => dbMod.init());'
이 방법이 당신이 의미하는 바가 아닐 수도 있지만, 누가 알겠습니까?
index.displaces를 표시합니다.
const arg = process.argv.splice(2);
function printToCli(text){
console.log(text)
}
switch(arg[0]){
case "--run":
printToCli("how are you")
break;
default: console.log("use --run flag");
}
명령어 실행node . --run
명령줄
probuss-MacBook-Air:fb_v8 probus$ node . --run
how are you
probuss-MacBook-Air:fb_v8 probus$
arg[0], arg[1], arg[2] ... 등을 추가할 수 있습니다.
★★★★★★에node . --run -myarg1 -myarg2
https://github.com/DVLP/run-func/blob/master/index.js에서 영감을 얻음
https://github.com/JiangWeixian/esrua을 만듭니다.
file if 파파index.ts
export const welcome = (msg: string) => {
console.log(`hello ${msg}`)
}
막 달리다
esrua ./index.ts welcome -p world
output은 unput이 됩니다.hello world
.env 파일에서 환경변수를 포함할 경우 다음을 사용할 수 있습니다.
npx env-cmd node -e 'require("./db").init()'
파일내의 특정의 기능도 실행하는 경우는, 다음과 같이 사용합니다.
npx env-cmd npx run-func db.js init someArg
또는 승인된 답변에 대한 논거를 제시하려면 다음과 같은 작업을 수행해야 합니다.
npx env-cmd node -e 'require("./db").init(someArg)'
쓰기보다 덜를 들어,할 때 , 사용하기를 합니다.env-cmd
run-func
.
주의: 보통 다음과 같이 추가합니다.--experimental-modules
필요할 때 마지막에
는 TypeScript로 .ts-node
@Lee Goddard 답변과 유사합니다.
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★app
★★★★★★★★★★★★★★★★★」init
로따따
// app.ts
export const app = express();
export async function init(): Promise<void> {
// app init logic...
}
npx ts-node -e 'require("./src/app").init();'
npx ts-node -e 'import("./src/app").then(a => a.init());' // esmodule
파일에 함수만 포함되어 있는 경우, 예를 들어 다음과 같습니다.
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
언급URL : https://stackoverflow.com/questions/30782693/run-function-in-script-from-command-line-node-js
'programing' 카테고리의 다른 글
Mysql 두 날짜 필드 비교 (0) | 2022.10.27 |
---|---|
생성된 소스 폴더와 함께 Intelij를 사용할 수 없습니다. (0) | 2022.10.27 |
JavaScript를 사용하여 URL 매개 변수 변경 및 기본값 지정 (0) | 2022.10.27 |
Laravel first 아니면 새 제품인지 확인하는 방법? (0) | 2022.10.27 |
phpmyadmin에서 외부 키를 만드는 방법 (0) | 2022.10.27 |