다른 사용자가 작성하여 공유한 외부 모듈을 호출하여 사용할 수는 없나요?

다른 사용자가 작성하여 공유한 외부 모듈을 호출하여 사용할 수는 없나요?
사용자가 직접 정의하는 모듈을 배우고 있지만, 내장 모듈 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) 값을 전달하면 압축 파일이 생성된다.