본문 바로가기
개발

10분만에 npm cli 명령어로 자기소개하기

by dohye1 2023. 9. 28.

목차

    반응형

    프론트업계에서 유명하신분인 jbee님의 깃헙을 들어가보면 아래의 명령어만 적혀있다. 

    이 명령어를 터미널에 쳐보니 깃헙링크, 블로그링크가 나왔다.

     

    넘 신기...!

     

    그래서 나도 나를 소개할수있는 cli 명령어를 만들어보려고한다! 

    npx dohye1

     

     

    요즘 넘 바빠서 개인공부를 거의 못했는데, 이번주는 여유가 생겨서 후딱 만들어볼거임!!

     

    방법을 정리하면서 만들어보겠다

    1. 참고자료를 찾아보기

    사실 나는 리액트 프로젝트 보일러 플레이트를 설치할때도 npx create-react-app ~ 이런식으로 명령어를 입력했었는데, 

    그냥 별생각없이 터미널에 따라쳤었을뿐 막상 만들려고하니 어떤 키워드로 구글링해야할지 감이 잘 안잡혔다..ㅠㅜ

    그래도 npx 명령어만들기, how to make npx command 뭐 이런식으로 검색해보니 참고할만한 자료들이 몇개 나왓다.!!!!

    https://dkrnfls.tistory.com/183

     

    npm 만드는 법 && 출시

    간단한 node package를 만들고 출시까지 진행하는 방법을 알아보겠습니다. 진행 순서는 다음과 같습니다. 1. 패키지 만들기 2. 로컬에서 해당 패키지 테스트 3. npm 사이트 회원가입 4. npm cli 이용해서

    dkrnfls.tistory.com

    https://deepgram.com/learn/npx-script

     

    Creating an npx Command - Deepgram Blog ⚡️ | Deepgram

    Build, locally test, and publish npx command scripts...

    deepgram.com

    위 글을 읽어보니, npm에 출시를 해야한다는것을 알게됨!

     

    그리고 이 글을 보면서 또 하나 배움.

     

    npx명령어 자체가 npm package에 선언한 binary를 실행하는 러너라고 한다!

    그래서 npm 사이트에서  jbee라고 검색해보니 아래처럼 bin이라는 폴더가있고 package.json에 "bin" 필드에 명령어가 정의되어있었음!!

    package.json bin에 정의된 키워드가 npx에서 명령어로 사용되는것같다!!

     

    신기하고만,,, 

    저 필드를 한번도 고려해본적이없는데, 이럴때 쓰인다는걸 배움

     

    2. npm 계정 생성

    npm 사이트에서 계정을 만든다!
    그리고 내가 만들 패키지가 이미 존재하는것인지 한번 검색해봐야한다.

     

    내가 원하는 이름으로 한번 검색해보시길

    사실(@{org}/{원하는이름})으로 만들수도있긴함!!

     

    무튼 npm에 올릴 이름은 package.json에서 name 영역에 적어주면된다.

     

    3. 터미널에 보여질 코드를 작성

    사실 어떻게 시작해야할지 감이 잘 오지않았다.

    그래서 여러 문서를 찾아보면서 bin 명령어를 쓰는 패키지를 보고, 그 패키지에서 bin 명령어를 실행시킬때 gluegun이라는 라이브러리를 쓴다는걸 발견!

    https://www.npmjs.com/package/gluegun

     

    gluegun

    A delightful toolkit for building Node-powered CLIs.. Latest version: 5.1.4, last published: 7 days ago. Start using gluegun in your project by running `npm i gluegun`. There are 586 other projects in the npm registry using gluegun.

    www.npmjs.com

    이 문서에 들어가보면 quick-start라는 부분의 명령어를 따라 해보면된다!

     

    quick-start를 모두 따라하면 폴더가 하나 만들어질거임!!

    (나는 dohye1이라는 이름으로 만들었는데, 이걸 따라하시는분들은 dohye1이 들어갈자리에 본인이 정한 단어를 대입하시면됨)

    npx gluegun new dohye1

     

    거기서 package.json을 먼저 뜯어보면된다.

    {
      "name": "dohye1",
      "version": "0.0.9",
      "description": "dohye1 CLI",
      "private": false,
      "types": "build/types/types.d.ts",
      "bin": {
        "dohye1": "bin/dohye1"
      },
      ....

     

    name, version, private, bin을 살펴볼건데,

    name : 출시할 패키지 이름

    version : 출시할 패키지 버전. 만약 내가 코드를 수정한다면 npm에 올릴때마다 version을 변경해줘야한다. 그렇지않으면 아래처럼 에러가뜬다.!

    private 은 false로 설정되어있어야함.

    bin이 제일 중요한데 내가 cli로 실행시키고싶은 명령어를 키로 설정해준다. 그래서 저 키로 설정되어있는 파일 경로로 찾아 들어가서 그 파일을 수정하면됨!!

     

    bin/dohye1 경로의 파일로 들어가보면 가장 아래에

    require(`${__dirname}/../src/cli`).run(process.argv)

    이 명령이 있음!

     

    그래서 src/cli경로로 들어가서 코드를 읽어보니 dohye1으로 시작하는 파일의 결과물을 사용하는것같음!!

    const cli = build()
        .brand('dohye1')
        .src(__dirname)
        .plugins('./node_modules', { matching: 'dohye1-*', hidden: true })

    그래서 dohye1이라는 이름을 가진 파일을 찾아보니 src/commands 아래에 해당 파일이 있다

    그래서 여기를 수정하면 터미널에 찍히는 ui가 결정되는구나라고 생각함!!

    import { GluegunCommand } from 'gluegun'
    
    const command: GluegunCommand = {
      name: 'dohye1',
      run: async (toolbox) => {
        const { print } = toolbox
        print.newline()
        print.newline()
        print.newline()
    
        print.info('안녕하세요 저는 도혜원입니당!')
    
        print.newline()
        print.newline()
    
        print.muted(`${print.checkmark} github : https://github.com/dohye1`)
        print.success(`${print.checkmark} blog : https://dohye1.tistory.com/`)
        print.highlight(
          `${print.checkmark} linked in : https://www.linkedin.com/in/hyewon-do-56b2881b9/`
        )
        print.newline()
        print.newline()
        print.newline()
      },
    }
    
    module.exports = command

    일단 print라는 객체에서 로그를 꾸밀수있는것 방식을 제공하는듯

    이건 공식문서 한번 찾아보고 하면됨!

     

     

    그럼 이제 npm에 올려보자!

    4. npm에 올리기

    npm login

    을 실행해서 npm 계정을 연결한다음

    npm publish --access=public

    을 실행하면 배포성공!

    근데 주의할점은 맨 첨에 올릴땐, version을 설정해줄필요없는데, 이미 배포된것을 업데이트할땐 version을 변경하고 올려야한다!!

     

    배포가 완료되면 터미널에서 npx dohye을 쳐보면 나의 정보가 보임!!!

     

    그리고 npm에도 올라가있음!!