Nodejs 터미널 앱

8993 단어 ubuntujavascriptnode
이 게시물이 끝나면 Linux용 명령을 만들어 삶을 더 단순하게 만드는 방법을 배우게 될 것입니다.

의 시작하자



먼저 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

좋은 웹페이지 즐겨찾기