5분 안에 지저분한 NPM 스크립트를 길들이는 방법

문제? 물론 설명하자면 npm 스크립트는 강력하지만 작업 실행자가 없고 단순하게 유지하려는 경우 npm 스크립트를 사용하여 cli 도구, bash 및 node로 대부분의 모든 것을 달성할 수 있습니다. 스크립트.

그러나 조만간 스크립트가 단순하지 않다는 것을 알게 됩니다. 🔥 새로운 것은 아니지만 npm 문서에 숨겨져 있던 🔥 핫한 새 소식을 알려 드리려고 왔습니다. npm 스크립트의 복잡성을 추론하고 유지 관리할 수 있는 것으로 옮기는 데 도움이 될 것입니다. .

나는 op 패턴을 만드는 패턴(다운로드 필요 없음)을 만들었습니다. A, 이름과 B를 생각할 수 없었기 때문에 이름이 지정되었습니다. 이 작업이 무엇을 하는지 스스로에게 묻는다면 작업이 아마도 좋은 설명일 것입니다.

코드



package.json (simplified)



{
    ...
    "config" : { "heads" : 7 },
    "scripts": {
        "compile_the_jabberwocky": "./ops.js",
        "minify_the_hydra": "./ops.js"
    }
}


"Adam, you fool, this is going to run the same script!"



네, 하지만 제 말을 들어보세요. 여전히 모든 스크립트가 같은 위치에 있기를 원합니다. 잠시 후에 JavaScript를 보여 드리겠습니다. 모든 것이 명확해질 것이지만 먼저 패턴의 규칙을 살펴보겠습니다.
  • 하나의 스크립트
  • npm은 변수 보간을 위해 이것을 사용하기 때문에 스크립트 이름에 기차 케이스를 사용합니다. 이것은 우리가 공식 표준에 가장 가까운 것입니다... 그들이 말하는 것을 알다시피 로마에서는 경쟁 표준을 발명하지 마십시오.
  • 인수 없음, "config"선호 및 process.env

  • ops.js



    const lifecycle = process.env.npm_lifecycle_event;
    const scripts = {
        /*
        * @description such docs!
        * @note normally you can't comment
        */
        "compile_the_jabberwocky"() {
            //... Maybe exec bash or write some js or something else.
            // How about concurrently spawn or handle sync tasks
         },
         /*
         * @description proves you only need the key to match
         */
         "minify_the_hydra"() {
             // Get some params
             const silly_var = process.env.npm_package_heads
            exec('npx run_hydra');
         }
    }
    
    if (lifecycle in scripts) {
        scripts[lifecycle]();
    }
    


    마무리 생각



    package.json의 스크립트 이름 키가 함수 이름과 일치하기만 하면 npm이 일부 스크립트를 실행하도록 하는 것이므로 이를 건너뛰고 JavaScript에서 일부 스크립트를 실행하도록 하면 됩니다.

    💡 아이디어는 어디서 얻었나요?



    "마지막으로 npm_lifecycle_event 환경 변수는 실행 중인 주기의 단계로 설정됩니다. 따라서 현재 일어나고 있는 일에 따라 전환하는 프로세스의 다른 부분에 단일 스크립트를 사용할 수 있습니다."

    문서에서 훔쳤어요 😳 그래서 다음에 생각날 때 작업 실행자가 필요하지만 정말인가요?

    좋은 웹페이지 즐겨찾기