// mergeScripts.js 파일 내용
// 사용자 정의 모듈 'modules/combineJS.js' 호출
var combineJS = require('./modules/combineJS.js');
// combineJS 모듈 사용
combineJS();
## Note
Node.js는 ES6를 '부분적'으로 지원합니다.
그래서 ES6에서 제공하는 모듈기능은 사용하지 못합니다. (import, export)
그래서 여전히 commonJS에서 제공하는 모듈 기능인 require 함수를 사용해야합니다.
Node.js에서 ES6의 모듈(import, export)을 읽게하려면 babel이라는 추가 환경세팅을 해야됩니다.
이 부분은 다음에 해보도록 하겠습니다.
// modules/combineJS.js 파일 내용
// combineJS 모듈 정의
function combineJS(){
console.log('combineJS 모듈');
}
그리고 mergeScripts.js 파일이 있는 곳에서
// modules/combineJS.js 파일 내용
// combineJS 모듈 정의
function combineJS(){
console.log('combineJS 모듈');
}
// combineJS 모듈 외부로 출력 (Exports)
module.exports = combineJS;
위의 소스를 아래처럼도 쓸 수 있습니다.
// modules/combineJS.js 파일 내용
// combineJS 모듈 외부로 출력 (Exports)
module.exports = function (){
console.log('combineJS 모듈');
};
// modules/combineJS.js 파일 내용
// File System 내장 모듈 호출
var fs = require('fs');
/*
* combineJS 모듈 정의 및 외부로 출력
* 모듈 내부에 전달받을 인자(배열, 문자열) 설정
*/
module.exports = function(jsSrc, exportJs){
console.log(jsSrc, exportJs);
}
그리고 mergeScripts.js 파일도 다음과 같이 수정합니다.
// mergeScripts.js 파일 내용
// 사용자 정의 모듈 'modules/combineJS.js' 호출
var combineJS = require('./modules/combineJS.js');
/*
* combineJS 모듈 사용
* 전달인자 1 : 병합하고자 하는 JS 파일 리스트(배열)
* 전달인자 2 : 병합되어 생성된 파일 경로(문자열)
* */
combineJS(['./script1.js', './script2.js'], './jsCombine.js');
첫번째 인자로 전달받은 배열 아이템(병합할 개별 자바스크립트 파일)마다 코드를 적용할 수 있도록 배열 객체를 제어할 수 있는
forEach() 함수를 사용했습니다.
// modules/combineJS.js 파일 내용
// File System 내장 모듈 호출
var fs = require('fs');
/*
* combineJS 모듈 정의 및 외부로 출력
* 모듈 내부에 전달받을 인자(배열, 문자열) 설정
*/
module.exports = function(jsSrc, exportJs){
// 배열 jsSrc를 개별적으로 접근 조작하기 위해
// forEach 배열 메소드 사용
jsSrc.forEach(function(file, index){
console.log(file, index);
});
}
// modules/combineJS.js 파일 내용
// File System 내장 모듈 호출
var fs = require('fs');
/*
* combineJS 모듈 정의 및 외부로 출력
* 모듈 내부에 전달받을 인자(배열, 문자열) 설정
*/
module.exports = function(jsSrc, exportJs){
// 배열 jsSrc를 개별적으로 접근 조작하기 위해
// forEach 배열 메소드 사용
jsSrc.forEach(function(file, index){
var content = fs.readFileSync(file);
console.log('콘텐츠: \n' + content);
});
}
// modules/combineJS.js 파일 내용
// File System 내장 모듈 호출
var fs = require('fs');
/*
* combineJS 모듈 정의 및 외부로 출력
* 모듈 내부에 전달받을 인자(배열, 문자열) 설정
*/
module.exports = function(jsSrc, exportJs){
var mergeCode = '';
// 배열 jsSrc를 개별적으로 접근 조작하기 위해
// forEach 배열 메소드 사용
jsSrc.forEach(function(file, index){
// fs.readFileSync() 사용하여 파일 내용 읽기
mergeCode += fs.readFileSync(file);
});
console.log(mergeCode);
}
// modules/combineJS.js 파일 내용
// File System 내장 모듈 호출
var fs = require('fs');
/*
* combineJS 모듈 정의 및 외부로 출력
* 모듈 내부에 전달받을 인자(배열, 문자열) 설정
*/
module.exports = function(jsSrc, exportJs){
var mergeCode = '';
// 배열 jsSrc를 개별적으로 접근 조작하기 위해
// forEach 배열 메소드 사용
jsSrc.forEach(function(file, index){
// fs.readFileSync() 사용하여 파일 내용 읽기
mergeCode += fs.readFileSync(file);
});
fs.writeFileSync(exportJs, mergeCode);
}
npm install --save minify
npm i -S minify
minify 모듈이 설치되면, 다음을 참고하여 minify 모듈을 호출하는 코드와 minify() 모듈을 사용하는 코드를 입력합니다.
// modules/combineJS.js 파일 내용
const fs = require('fs'),
minify = require('minify'),
options = {
html: {
removeAttributeQuotes: false,
removeOptionalTags: false
},
};
module.exports = function(jsSrc, exportJs){
jsSrc.forEach(function(file, index){
minify(file, options)
.then(console.log)
.catch(console.error);
});
}
// modules/combineJS.js 파일 내용
// File System 내장 모듈 호출
var fs = require('fs'),
minify = require('minify');
module.exports = function (jsSrc, exportJs) {
var mergeCode = '';
jsSrc.forEach(function (file, index) {
minify(file).then(function (data) {
mergeCode += data;
if (index == jsSrc.length - 1) {
writeFile();
}
});
});
function writeFile() {
fs.writeFileSync(exportJs, mergeCode);
}
};
// mergeScripts.js 파일 내용
// 사용자 정의 모듈 'modules/combineJS.js' 호출
var combineJS = require('./modules/combineJS.js');
/*
* combineJS 모듈 사용
* 전달인자 1 : 병합하고자 하는 JS 파일 리스트(배열)
* 전달인자 2 : 병합되어 생성된 파일 경로(문자열)
* */
combineJS(['./script1.js', './script2.js'], './jsCombine.js', true);
// modules/combineJS.js 파일 내용
// File System 내장 모듈 호출
var fs = require('fs'),
minify = require('minify');
module.exports = function (jsSrc, exportJs, min) {
var mergeCode = '',
len = jsSrc.length - 1,
compress = min;
jsSrc.forEach(function (file, index) {
if (compress) {
minify(file).then(function (data) {
mergeCode += data;
if (index == len) {
writeFile();
}
});
} else {
mergeCode += fs.readFileSync(file);
if (index == len) {
writeFile();
}
}
});
function writeFile() {
fs.writeFileSync(exportJs, mergeCode);
}
};