75 lines
1.7 KiB
JavaScript
75 lines
1.7 KiB
JavaScript
var path = require('path'),
|
|
fs = require('fs');
|
|
|
|
var //项目名
|
|
prefix,
|
|
//依赖关系
|
|
dep,
|
|
//项目路径
|
|
jsDir;
|
|
|
|
var sort = function(src) {
|
|
if(!dep) {
|
|
console.log('Please call combine.init method first!');
|
|
return;
|
|
}
|
|
|
|
var scripts = [],
|
|
visited = {},
|
|
visit = function(node) {
|
|
if(node in visited) {
|
|
return;
|
|
}
|
|
visited[node] = true;
|
|
|
|
var requires = dep.getRequiresByPath(node);
|
|
|
|
for(var require in requires) {
|
|
visit( dep.getPathByName(require) );
|
|
}
|
|
|
|
scripts.push(node);
|
|
};
|
|
|
|
visit(src);
|
|
|
|
return scripts;
|
|
};
|
|
|
|
var deleteRequire = function(code) {
|
|
var reg = prefix + '\\.require\\([\'\"]([-_\\.a-zA-Z0-9]+)[\'\"]\\);[\n\r]*';
|
|
reg = new RegExp(reg, 'g');
|
|
return code.replace(reg, '');
|
|
};
|
|
|
|
exports.init = function(dependency, config) {
|
|
dep = dependency;
|
|
jsDir = config.getJsDir();
|
|
prefix = config.getProjectName();
|
|
};
|
|
|
|
exports.combineCode = function(src) {
|
|
if(!src) {
|
|
console.log('Please input a file');
|
|
return;
|
|
}
|
|
|
|
src = path.relative(jsDir, src).replace(/\\/g, '/');
|
|
var scripts = sort(src), code = [];
|
|
|
|
for(var i = 0, l = scripts.length; i < l; i++) {
|
|
src = path.join(jsDir, scripts[i]);
|
|
var content = fs.readFileSync(src).toString();
|
|
code.push( deleteRequire(content) );
|
|
}
|
|
|
|
return code.join('\n\n');
|
|
};
|
|
|
|
exports.combineFile = function(src, output) {
|
|
var content = exports.combineCode(src);
|
|
fs.writeFileSync(output, content);
|
|
console.log('success! -> Combined File : ' + src);
|
|
};
|
|
|
|
exports.combine = function() {}; |