사용자가 직접 정의하는 모듈을 배우고 있지만, 내장 모듈 File System을 호출했던 것처럼 
                다른 사용자가 작성하여 공유한 외부 모듈도 호출할 수 있습니다. 
                앞서 만든 자바스크립트 병합 모듈에 압축(compress)하는 기능을 추가해 보겠습니다. 
                기능을 직접 추가할 수도 있지만, 이미 공개된 외부 모듈인 minify(http://www.npmjs.com/package/minify)를 호출하여 활용해 보겠습니다.
                
                먼저 Git Bash에서 NPM 명령어인 npm install minify --save를 입력하여 minify 모듈을 설치합니다.
                
                minify 모듈이 설치되면, combineJS.js 파일을 엽니다. 
                다음을 참고하여 minify 모듈을 호출하는 코드와 minify() 모듈을 사용하는 코드를 입력합니다. 
                
                    
                        // combineJS.js 파일 소스 내용
                        /* ! combineJS module @ hyungju-lee, 2020 */
                        // File System 내장 모듈 호출
                        var fs = require('fs')
                            minify = require('minify');
                        /*
                         * combineJS 모듈 정의 및 외부로 출력
                         * 모듈 내부에 전달받을 인자(배열, 문자열) 설정
                         */
                        module.exports = function(jsSrc, exportJs){
                            // var mergeCode = '';
                            // 배열 jsSrc를 개별적으로 접근 조작하기 위해
                            // forEach 배열 메소드 사용
                            jsSrc.forEach(function(file, index){
                                minify(file, function(err, data){
                                    console.log(data);
                                });
                                // fs.readFileSync() 사용하여 파일 내용 읽기
                                // mergeCode += fs.readFileSync(file);
                            });
                            // 병합된 코드 mergeCode를 내용을 파일 생성
                            // fs.writeFileSync(exportJs, mergeCode);
                        }
                    
                
                minify() 모듈 함수의 첫 번째 전달인자로는 압축할 파일을, 두 번째 전달인자로는 압축 과정을 처리한 후 콜백되는 함수를 입력했습니다. 
                콜백 함수는 두 개의 전달인자를 받는데, 하나는 오류(Error)를 처리하는 객체이고, 
                다른 하나는 압축된 코드(data)입니다. 
                콜백 함수 내부에는 압축된 내용을 콘솔에 출력하도록 입력했습니다. 
                minify 모듈을 사용하는 방법은 https://github.com/coderaser/minify를 참고합니다.
                
                입력한 내용을 저장한 후 Git Bash에서 node mergeScript.js 명령어를 입력하여 실행합니다. 
                화면에 각 자바스크립트 파일이 압축된 결과가 연속해서 출력됩니다.
                
                또 책 소스처럼 입력하면 안되네... 위에 사진처럼 입력해야됨..아무래도 버전이 바뀌어서 그런듯, 홈페이지에도 err, data관련한 내용은 안나옴 
                combineJS.js에 전달한 각 자바스크립트 파일을 minify 모듈로 압축한 결과를 확인했습니다. 
                이어서 압축된 코드를 병합하는 코드와 병합이 끝나면 새 문서를 생성하는 코드를 입력합니다. 
                다음을 참고하여 코드를 입력하여 저장한 후 Git Bash에서 동일한 명령어를 실행합니다. 
                jsCombine.js 파일을 확인하려면, 이전과 달리 압축되어 병합된 코드를 확인할 수 있습니다.
                
                    
                        // combineJS.js 파일 소스 내용
                        /* ! combineJS module @ hyungju-lee, 2020 */
                        // File System 내장 모듈 호출
                        var fs = require('fs'),
                            minify = require('minify');
                        /*
                         * combineJS 모듈 정의 및 외부로 출력
                         * 모듈 내부에 전달받을 인자(배열, 문자열) 설정
                         */
                        module.exports = function (jsSrc, exportJs) {
                            var mergeCode = '';
                            // 배열 jsSrc를 개별적으로 접근 조작하기 위해
                            // forEach 배열 메소드 사용
                            jsSrc.forEach(function (file, index) {
                                minify(file).then(function (data) {
                                    mergeCode += data;
                                    if (index == jsSrc.length - 1) {
                                        writeFile();
                                    }
                                });
                                // fs.readFileSync() 사용하여 파일 내용 읽기
                                // mergeCode += fs.readFileSync(file);
                            });
                            // 병합된 코드 mergeCode를 내용을 파일 생성
                            function writeFile() {
                                fs.writeFileSync(exportJs, mergeCode);
                            }
                        };
                    
                
                책 소스가 작동을 안해서 현재 npm minify에 올라온 식으로 바꿈..버전이 달라져서 기존 식이 안먹히는건가.. 
                여튼 아래와 같이 한줄로 minify 된 것을 볼 수 있습니다.
                
            
            
                이제 마무리 단계입니다. combineJS 모듈을 사용할 때 압축 유무를 사용자가 결정할 수 있도록 전달인자 min을 하나 더 추가해 보겠습니다. 
                초기값은 거짓(false)으로 설정합니다.
                
                    
                        // combineJS.js 파일 소스 내용
                        /* ! combineJS module @ hyungju-lee, 2020 */
                        // File System 내장 모듈 호출
                        var fs = require('fs'),
                            minify = require('minify');
                        /*
                         * combineJS 모듈 정의 및 외부로 출력
                         * 모듈 내부에 전달받을 인자(배열, 문자열) 설정
                         * 압축 유무를 설정하는 min 옵션 추가 (기본 값 : false)
                         */
                        module.exports = function (jsSrc, exportJs, min) {
                            var mergeCode = '',
                                len = jsSrc.length - 1; // 조건 확인을 위한 len 변수
                            // min 초기 값 설정
                            min = min || false;
                            // 배열 jsSrc를 개별적으로 접근 조작하기 위해
                            // forEach 배열 메소드 사용
                            jsSrc.forEach(function (file, index) {
                                if(min){
                                    minify(file).then(function (data) {
                                        mergeCode += data;
                                        if (index == len) {
                                            writeFile();
                                        }
                                    });
                                }else{
                                    mergeCode += fs.readFileSync(file);
                                    if(index == len){
                                        writeFile();
                                    }
                                }
                            });
                            // 병합된 코드 mergeCode를 내용을 파일 생성
                            function writeFile() {
                                fs.writeFileSync(exportJs, mergeCode);
                            }
                        };
                    
                
                
                세번째 인자로 거짓(false) 값을 전달했을 땐 압축 파일이 생성 안된다.
                
                반면 세번째 인자로 참(true) 값을 전달하면 압축 파일이 생성된다.