// 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');
// 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
// 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);
}
};