Actualización

This commit is contained in:
Xes
2025-04-10 12:36:07 +02:00
parent 1da7c3f3b9
commit 4aff98e77b
3147 changed files with 320647 additions and 0 deletions

View File

@@ -0,0 +1,75 @@
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() {};

View File

@@ -0,0 +1,19 @@
var fs = require('fs'),
path = require('path'),
config = {};
exports.getProjectName = function() {
return config.name;
};
//js文件夹必须和tools在同一级目录
exports.getJsDir = function() {
if(config.jsDir) {
return path.resolve(__dirname, '../../', config.jsDir);
}
};
exports.parse = function(uri) {
uri = path.normalize(uri);
config = JSON.parse( fs.readFileSync(uri) );
};

View File

@@ -0,0 +1,136 @@
var fs = require('fs'),
path = require('path');
var //项目名
prefix,
//项目路径
jsDir,
//依赖文件路径
depsPath,
//依赖关系缓存
dependencies = {
pathToNames: {}, // 1 to many
nameToPath: {}, // 1 to 1
requires: {} // 1 to many
};
function addDepsToFile(src, provides, requires) {
var insertText, fd;
requires = '[' + requires.join(',') + ']';
provides = '[' + provides.join(',') + ']';
insertText = [
prefix,
'.addDependency(\'',
src,
'\', ',
provides,
', ',
requires,
');\n'
].join('');
try{
fd = fs.openSync(depsPath, 'a');
fs.writeSync(fd, insertText, 0, 'utf8');
}catch(e){
return false;
}
return true;
}
function addDepsToObj(src, provides, requires) {
var provide, require, deps = dependencies;
for( var i = 0; (provide = provides[i]); i++) {
deps.nameToPath[provide] = src;
if (!(src in deps.pathToNames)) {
deps.pathToNames[src] = {};
}
deps.pathToNames[src][provide] = true;
}
for( var j = 0; (require = requires[j]); j++) {
if (!(src in deps.requires)) {
deps.requires[src] = {};
}
deps.requires[src][require] = true;
}
}
function scanFile(uri) {
if( path.basename(uri) === 'deps.js') {
return;
}
var reg = prefix + '\\.(require|provide)\\([\'\"]([-_\\.a-zA-Z0-9]+)[\'\"]\\);[\n\r]*',
provides = [],
requires = [],
content = fs.readFileSync(uri),
match;
reg = new RegExp(reg, 'g');
uri = path.relative(jsDir, uri).replace(/\\/g, '/');
do {
match = reg.exec(content);
if(match) {
if( match[1] === 'require' ) {
requires.push('\'' + match[2] + '\'');
}
if( match[1] === 'provide' ) {
//prefix不应该被包含在provide name中
var provide = match[2].split('.');
if(provide[0] === prefix) {
provide = provide.slice(1).join('.');
} else {
provide = match[2];
}
provides.push('\'' + provide + '\'');
}
}
} while(match);
addDepsToFile( uri, provides, requires );
addDepsToObj( uri, provides, requires );
console.log('success! -> create one dependency record : ' + uri);
}
exports.scan = function(uri) {
var stat = fs.statSync(uri);
if( stat.isDirectory() ) {
fs.readdirSync(uri).forEach(function(part) {
exports.scan( path.join(uri, part) );
});
} else if( stat.isFile() ) {
scanFile(uri);
}
};
exports.init = function(config) {
prefix = config.getProjectName();
jsDir = config.getJsDir();
depsPath = path.join(jsDir, 'deps.js');
fs.writeFile(depsPath, '');
console.log('success! -> create a new deps.js');
exports.scan(jsDir);
};
exports.getRequiresByPath = function(src) {
return dependencies.requires[src];
};
exports.getPathByName = function(name) {
return dependencies.nameToPath[name];
};
exports.getDepsPath = function() {
return depsPath;
};