UNPKG

hexo

Version:

A fast, simple & powerful blog framework, powered by Node.js.

139 lines (116 loc) 4.16 kB
var path = require('path'), async = require('async'), moment = require('moment'), fs = require('graceful-fs'), sprintf = require('sprintf-js').sprintf, HexoError = require('../../error'), util = require('../../util'), file = util.file2; module.exports = function(args, callback){ var target = hexo.base_dir, coreDir = hexo.core_dir, log = hexo.log; if (args._[0]) target = path.resolve(target, args._[0]); async.auto({ // Check if target has initialized check: function(next){ fs.exists(path.join(target, '_config.yml'), function(exist){ if (exist){ log.w('This folder has been already initialized.'); return callback(); } next(); }); }, // Copy theme data theme: ['check', function(next){ log.i('Copying theme data...'); file.copyDir(path.join(coreDir, 'assets', 'themes', 'landscape'), path.join(target, 'themes', 'landscape'), function(err){ if (err) return callback(HexoError.wrap(err, 'Theme copy failed')); log.d('Theme data copied'); next(); }); }], // Create blank folders create_folders: ['check', function(next){ var folders = [ 'source/_drafts', 'scripts' ]; async.each(folders, function(folder, next){ log.i('Creating folder: ' + folder); file.mkdirs(path.join(target, folder), function(err){ if (err) return callback(HexoError.wrap(err, 'Folder create failed: ' + folder)); log.d('Folder created: ' + folder); next(); }); }, next); }], // Copy files copy: ['check', function(next){ var files = [ '_config.yml', 'scaffolds/draft.md', 'scaffolds/page.md', 'scaffolds/photo.md', 'scaffolds/post.md' ]; async.each(files, function(item, next){ log.i('Copying file: ' + item); file.copyFile(path.join(coreDir, 'assets', 'init', item), path.join(target, item), function(err){ if (err) return callback(HexoError.wrap(err, 'File copy failed: ' + item)); log.d('File copied: ' + item); next(); }); }, next); }], // Create .gitignore gitignore: ['check', function(next){ var content = [ '.DS_Store', 'node_modules', 'db.json' ]; log.i('Creating file: .gitignore'); file.writeFile(path.join(target, '.gitignore'), content.join('\n'), function(err){ if (err) return callback(HexoError.wrap(err, 'File create failed: .gitignore')); log.d('File created: .gitignore'); next(); }); }], // Create package.json package_json: ['check', function(next){ var content = { name: 'hexo', version: hexo.version, private: true, dependencies: {} }; log.i('Creating file: package.json'); file.writeFile(path.join(target, 'package.json'), JSON.stringify(content, null, ' '), function(err){ if (err) return callback(HexoError.wrap(err, 'File create failed: package.json')); log.d('File created: package.json'); next(); }); }], // Create hello-world.md hello_world: ['check', function(next){ log.i('Creating file: source/_posts/hello-world.md'); file.readFile(path.join(coreDir, 'assets', 'init', 'hello-world.md'), function(err, content){ if (err) return callback(HexoError.wrap(err, 'File read failed: source/_posts/hello-world.md')); content = sprintf(content, { date: moment().format('YYYY-MM-DD HH:mm:ss') }); file.writeFile(path.join(target, 'source', '_posts', 'hello-world.md'), content, function(err){ if (err) return callback(HexoError.wrap(err, 'File create failed: source/_posts/hello-world.md')); log.d('File created: source/_posts/hello-world.md'); next(); }); }); }] }, function(err){ if (err) return callback(HexoError.wrap(err, 'Initialize failed')); log.i('Initialization has been done. Start blogging with Hexo!'); callback(); }); };