65 lines
1.7 KiB
JavaScript
65 lines
1.7 KiB
JavaScript
'use strict';
|
|
|
|
var chalk = require('chalk');
|
|
var fs = require('fs');
|
|
var path = require('path');
|
|
var yeoman = require('yeoman-generator');
|
|
|
|
function validatePackageName(name) {
|
|
if (!name.match(/^([a-zA-Z_$][a-zA-Z\d_$]*\.)+([a-zA-Z_$][a-zA-Z\d_$]*)$/)) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
module.exports = yeoman.generators.NamedBase.extend({
|
|
constructor: function() {
|
|
yeoman.generators.NamedBase.apply(this, arguments);
|
|
|
|
this.option('package', {
|
|
desc: 'Package name for the application (com.example.app)',
|
|
type: String,
|
|
defaults: 'com.' + this.name.toLowerCase()
|
|
});
|
|
},
|
|
|
|
initializing: function() {
|
|
if (!validatePackageName(this.options.package)) {
|
|
throw new Error('Package name ' + this.options.package + ' is invalid');
|
|
}
|
|
},
|
|
|
|
writing: function() {
|
|
var templateParams = {
|
|
package: this.options.package,
|
|
name: this.name
|
|
};
|
|
this.fs.copyTpl(
|
|
this.templatePath(path.join('src', '**')),
|
|
this.destinationPath('android'),
|
|
templateParams
|
|
);
|
|
this.fs.copy(
|
|
this.templatePath(path.join('bin', '**')),
|
|
this.destinationPath('android')
|
|
);
|
|
var javaPath = path.join.apply(
|
|
null,
|
|
['android', 'app', 'src', 'main', 'java'].concat(this.options.package.split('.'))
|
|
);
|
|
this.fs.copyTpl(
|
|
this.templatePath(path.join('package', '**')),
|
|
this.destinationPath(javaPath),
|
|
templateParams
|
|
);
|
|
},
|
|
|
|
end: function() {
|
|
var projectPath = this.destinationRoot();
|
|
this.log(chalk.white.bold('To run your app on Android:'));
|
|
this.log(chalk.white(' Have an Android emulator running, or a device connected'));
|
|
this.log(chalk.white(' cd ' + projectPath));
|
|
this.log(chalk.white(' react-native run-android'));
|
|
}
|
|
});
|