Skip to content

Instantly share code, notes, and snippets.

@taoalpha
Last active August 29, 2015 14:05
Show Gist options
  • Save taoalpha/c1153f7bc94256168184 to your computer and use it in GitHub Desktop.
Save taoalpha/c1153f7bc94256168184 to your computer and use it in GitHub Desktop.
Using nodejs with bower set up your own CDN or resource library.
// Use bower install to install modules and then run the transfer.js to copy all the main files in each modules to root dir
// Mainly use as a quick tool to manage your cdn or resource library.
// directory structure:
// ├───root
// ├───js/
// └───jqeury
// └───jquery.js
// └───jquery.min.js
// └───css/
// └───normalize.css
// └───normalize.css
// └───fonts/
// └─── font-awesome.woff
// └─── fontawesome-webfont.eot
// └───css/
// └───normalize.css
// └───normalize.css
// └───bower_components/
// └───normalize.css
// └───bower.json
// └─── *
// └───jQuery
// └───bower.json
// └─── *
// └───transfer.js
var fs = require('fs');
var modules = fs.readdirSync('./bower_components');
modules.forEach(function(i){
var pdir = __dirname+"/bower_components/"+i+"/";
var bower = __dirname+"/bower_components/"+i+"/bower.json";
//var pack = __dirname+"/bower_components/"+i+"/package.json";
if(fs.existsSync(bower)){
var bowerjson = JSON.parse(fs.readFileSync(bower));
console.log(bowerjson.name);
if(typeof(bowerjson.main)=="string"){
transferfiles(pdir+bowerjson.main,bowerjson.name);
}else if(typeof(bowerjson.main)=="object"){
bowerjson.main.forEach(function(j){
if(j.indexOf("*")>-1){
var subdir = pdir+j.replace("*","");
console.log(subdir);
var subfiles= fs.readdirSync(subdir);
subfiles.forEach(function(k){
transferfiles(subdir+k,bowerjson.name);
});
}else{
transferfiles(pdir+j,bowerjson.name);
}
})
}
}
//else if(fs.existsSync(pack)){
// console.log(JSON.parse(fs.readFileSync(pack)).style);
//}
});
function transferfiles(file,dname){
var jsdir = __dirname+"/js/";
var cssdir = __dirname+"/css/";
var fontdir = __dirname+"/fonts/";
var ddir = jsdir;
if(endsWith(file,".css")){
ddir = cssdir;
}else if(endsWith(file,".js")){
ddir = jsdir;
}else{
ddir = fontdir;
}
var filename = file.split("/")[file.split("/").length-1];
var minfilename = filename.split(".").slice(0,filename.split(".").length-1).join(".")+".min."+filename.split(".")[filename.split(".").length-1];
var minfilesource = file.split("/").slice(0,file.split("/").length-1).join("/")+"/"+minfilename;
var destfile = ddir+dname+"/"+filename;
var mindestfile = ddir+dname+"/"+minfilename;
if(ddir==fontdir){
fs.createReadStream(file).pipe(fs.createWriteStream(ddir+filename));
//console.log("fonts"+ddir+filename+"\n");
return
}
//console.log("filename:" + filename+"\n"+"destfilename:" + destfile+"\n"+"minifilesource:"+minfilesource+"\n"+"minidestfile:"+mindestfile+"\n");
if(fs.existsSync(ddir+dname)){
fs.createReadStream(file).pipe(fs.createWriteStream(destfile));
if(fs.existsSync(minfilesource) && ddir != fontdir){
fs.createReadStream(minfilesource).pipe(fs.createWriteStream(mindestfile));
}
}else{
fs.mkdirSync(ddir+dname);
fs.createReadStream(file).pipe(fs.createWriteStream(destfile));
if(fs.existsSync(minfilesource) && ddir != fontdir){
fs.createReadStream(minfilesource).pipe(fs.createWriteStream(mindestfile));
}
}
console.log("transfer "+filename+" success \n\n");
}
function endsWith(str, suffix) {
return str.indexOf(suffix, str.length - suffix.length) !== -1;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment