nono
Version:
Nono is a scaffolding for mobile web single-page application develop, which based on command-line operations.
52 lines (41 loc) • 1.55 kB
JavaScript
var Promise = require('bluebird');
var fs = Promise.promisifyAll(require('fs-extra'));
var root = __dirname.replace(/bin\/lib/, 'bin/');
function substitute(str, obj) {
if (!(Object.prototype.toString.call(str) === '[object String]')) {
return '';
}
if (!(Object.prototype.toString.call(obj) === '[object Object]' && 'isPrototypeOf' in obj)) {
return str;
}
return str.replace(/\{([^{}]+)\}/g, function(match, key) {
var value = obj[key.replace(/\s+/g, '')];
return (value !== undefined) ? '' + value : '';
});
}
function generateStructure(type, name) {
var projectPath = 'src/' + type + 's/' + name;
var structurePath = root + 'structure/' + type;
if (fs.existsSync(projectPath)) {
console.log(('Create failed! ' + projectPath + ' is exit!').red);
} else {
return fs.copyAsync(structurePath, projectPath, {clobber: true})
.then(function(err) {
if (err) {
return console.error(err);
} else {
if (type === 'page') {
var pagePath = projectPath + '/index.html';
var pageTemp = fs.readFileSync(pagePath, 'utf8');
var pageHtml = substitute(pageTemp, {pageName: name});
fs.writeFile(pagePath, pageHtml, 'utf8', function() {
console.log(('Create success! The new page is ' + projectPath).green);
});
} else {
console.log(('Create success! The new common module is ' + projectPath).green);
}
}
})
}
}
module.exports = generateStructure;