Nodejs 터미널 앱
의 시작하자
먼저 node와 npm을 설치하려면 시스템에 node와 npm이 설치되어 있어야 합니다. install node & npm 최신 안정 버전의 node와 npm을 다운로드하여 설치할 수 있습니다.
* 프로젝트 생성
$ mkdir node-cli
$ cd node-cli
$ npm init -y
hurray we created a node application 😃
1 단계
내가 선택한 코드 편집기에서 프로젝트를 열 수 있습니다.
NPM(Node Package Manager)에서 사용하는 package.json이라는 파일이 있을 것입니다. 이 package.json 파일 정보는 Node JS Application 정보 또는 Node JS Package 세부 정보입니다.
{
"name": "node-cli",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
당신의 package.json은
npm init -y
후에 다음과 같이 보일 것입니다.이 package.json 파일에 속성
"bin":"./index.js"
을 추가해 보겠습니다.이제 본격적인 작업을 시작해 보겠습니다.
index.js 파일을 만들고
//index.js
console.log("Hello, world!");
이제 테스트 목적으로
$ node index.js
Hello, world!
예, 작동 중입니다. 훌륭합니다 😃,
이제 진짜에 집중합시다.
index.js 파일에서
#!/usr/bin/env node;
console.log("Hello, world!");
#!/usr/bin/env 노드 이 라인은 기본적으로 파일의 첫 번째 라인이어야 합니다. 이 파일을 실행할 때 이 라인은 시스템에 마법의 #! 접두사 (shebang이라고 함).
이 index.js 파일을 실행 가능하게 만들고 터미널에서 다음 명령을 실행합니다.
$ chmod +x index.js
응용 프로그램을 실행하기 위해 파일을 실행 가능하게 만듭니다
./index.js
.let me tell you the capability of our command:
It is capable of doing creating a react app and pushing to your Github account, to keep you synced. creating a new project and pushing it to Github is redundant, it's needed to be automated.
프로젝트에 필요한 노드 모듈
$ yarn add minimist axios path
minimist의 사용: 모든 기발한 장식이 없는 낙관주의자의 주장 파서의 내장.
axios 사용 : HTTP 요청을 전달하는 데 사용됩니다.
경로 사용: 경로 모듈은 파일 및 디렉토리 경로 작업을 위한 유틸리티를 제공합니다.
노드와 함께 사전 빌드되어 제공되는
child_process
도 사용할 것입니다.미니미스트의 사용
index.js 파일을 실행하고 싶다고 가정하고
./index.js
하지만 ./index.js --file ./ --n first
와 같이 프로그램에 인수를 전달하려는 경우minimist는 다음과 같은 객체를 줄 것입니다.
{
file : './',
n : 'first'
}
우리는 이런 식으로 minimist를 사용할 수 있습니다
var args = require("minimist")(process.argv.slice(2), {
boolean: ["help", "check"],
string: ["n", "path", "setup"],
});
도움말 및 확인 유형은 부울이고 n, 경로 및 설정은 문자열 유형입니다.
액시오스의 사용
Axios는 HTTP 요청을 수행하는 데 사용되며 Axios를 이와 같이 사용할 수 있습니다.
const { default: Axios } = require("axios");
const payload = {
name: `${args.n}`,
description: "this is text",
homepage: "https://github.com",
private: false,
};
Axios.post("https://api.github.com/user/repos", payload, {
headers: {
"Content-Type": "application/json",
Authorization: `token ${Key}`,
},
}).then(res => console.log(res.data")).catch(e => console.err(e));
Axios는 약속이 이행되었는지 확인하는 약속을 반환합니다
.then()
. 호출하고 실패하면.catch()
호출됩니다.경로의 사용
경로 모듈은 파일 및 디렉토리 경로 작업을 위한 유틸리티를 제공합니다.
child_process 사용
child_process 모듈은 popen(3)과 유사하지만 동일하지는 않은 방식으로 자식 프로세스를 생성하는 기능을 제공합니다. 이 기능은 주로 child_process.spawn() 함수에 의해 제공되지만 여기서는 주로 exec() 메서드를 사용합니다.
const exec = require("child_process").exec;
exec(` {your linux terminal commands or anything goes here }`,
function (err, stdout, stderr) {
if (err) {
console.error(`error: ${err.message}`);
return;
}
if (stderr) {
console.error(`stderr: ${stderr}`);
}
console.log("");
if (stdout) {
console.error(`stdout: ${stdout}`);
}
}
);
이제 우리는 우리가 사용할 패키지에 대해 모두 알고 있습니다.
index.js의 내용
충분히 이해가 되고 의미가 있는 것 같아요!
여기서 키를 얻을 수 있습니다create personal access token
#!/usr/bin/env node
var path = require("path");
const exec = require("child_process").exec;
const { default: Axios } = require("axios");
const Key = <your_key />
var args = require("minimist")(process.argv.slice(2), {
boolean: ["help", "check"],
string: ["n", "path"],
});
const BASEPATH = path.resolve(process.env.BASEPATH || __dirname);
if (args.help) {
printHelp();
} else if (args.n) {
if (args.path) {
var pathto = path.join(BASEPATH, args.path);
console.log("\x1b[32m", "work is in progress, please wait!");
exec(
`cd ${pathto} && mkdir ${args.n} && cd ${args.n} && create-react-app ./`,
(err, stdout, stderr) => {
if (err) {
console.error(`error: ${err.message}`);
return;
}
if (stderr) {
console.error(`stderr: ${stderr}`);
//return;
}
console.log("\x1b[32m", "Creating github repo!");
const payload = {
name: `${args.n}`,
description: "this is text",
homepage: "https://github.com",
private: false,
};
Axios.post("https://api.github.com/user/repos", payload, {
headers: {
"Content-Type": "application/json",
Authorization: `token ${Key}`,
},
})
.then((res) => {
console.log(res.data);
exec(
`cd ${pathto}/${args.n} && git init && git remote add origin ${res.data.ssh_url} && git add . && git branch -M master && git push -u origin master `,
function (err, stdout, stderr) {
if (err) {
console.error(`error: ${err.message}`);
return;
}
if (stderr) {
console.error(`stderr: ${stderr}`);
}
console.log("");
console.log(`cd ${pathto}/${args.n}`);
console.log("yarn start");
console.log("Happy hacking");
}
);
})
.catch((e) => console.log("NetWork Error", e));
}
);
} else {
printHelp();
}
} else {
printHelp();
}
//************************************************
function printHelp() {
console.log("github usage:");
console.log("");
console.log(
"This package can be used while creating a react app and at the same time get synced with github"
);
console.log("");
console.log("--help Gives you help window");
console.log(
"--n ={fineName} --path ={path} File name of the project"
);
}
이를 위한 명령줄 함수를 만들어 보겠습니다.
$ npm link
npm WARN [email protected] No description
npm WARN [email protected] No repository field.
audited 35 packages in 0.769s
3 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
/usr/local/bin/react-app -> /usr/local/lib/node_modules/react-app/index.js
/usr/local/lib/node_modules/react-app -> /home/aman/Github
모두 끝났습니다.😃
Link to the repo
Reference
이 문제에 관하여(Nodejs 터미널 앱), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/amankumarsingh01/nodejs-terminal-app-4nd6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)