Merge pull request #44 from wistityhq/feature/dry

Add --dry option
This commit is contained in:
Loïc Saint-Roch 2015-12-02 16:55:31 +01:00
commit d05150e163
8 changed files with 61 additions and 5 deletions

View File

@ -44,6 +44,22 @@ You now are able to use the Strapi CLI. Simply create your first application and
$ strapi new <appName> $ strapi new <appName>
``` ```
Note that you can generate a dry application using the `dry` option:
```bash
$ strapi new <appName> --dry
```
This will generate a Strapi application without:
- the built-in `user`, `email` and `upload` APIs,
- the `grant` hook,
- the open-source admin panel,
- the Waterline ORM (`waterline` and `blueprints` hooks disabled),
- the Strapi Studio connection (`studio` hook disabled).
This feature allows you to only use Strapi for your HTTP server structure if you want to.
### Start your application ### Start your application
```bash ```bash

View File

@ -52,6 +52,13 @@ module.exports = function () {
strapiPackageJSON: packageJSON strapiPackageJSON: packageJSON
}; };
// Save the `dry` option inside the scope.
if (scope.args[1] && scope.args[1].dry) {
scope.dry = true;
} else {
scope.dry = false;
}
// Pass the original CLI arguments down to the generator // Pass the original CLI arguments down to the generator
// (but first, remove commander's extra argument) // (but first, remove commander's extra argument)
cliArguments.pop(); cliArguments.pop();

View File

@ -44,6 +44,7 @@ cmd = program.command('new');
cmd.unknownOption = NOOP; cmd.unknownOption = NOOP;
cmd.description('create a new application '); cmd.description('create a new application ');
cmd.action(require('./strapi-new')); cmd.action(require('./strapi-new'));
cmd.option('-d, --dry', 'naked Strapi application');
// `$ strapi start` // `$ strapi start`
cmd = program.command('start'); cmd = program.command('start');

View File

@ -36,6 +36,17 @@ function Strapi() {
// Mixin support for `Strapi.prototype.after()`. // Mixin support for `Strapi.prototype.after()`.
mixinAfter(this); mixinAfter(this);
// Bind `this` context for all `Strapi.prototype.*` methods.
this.load = this.load.bind(this);
this.start = this.start.bind(this);
this.stop = this.stop.bind(this);
this.restart = this.restart.bind(this);
this.initialize = this.initialize.bind(this);
this.exposeGlobals = this.exposeGlobals.bind(this);
this.runBootstrap = this.runBootstrap.bind(this);
this.isLocalStrapiValid = this.isLocalStrapiValid.bind(this);
this.isStrapiAppSync = this.isStrapiAppSync.bind(this);
// Expose `koa`. // Expose `koa`.
this.server = require('koa'); this.server = require('koa');
this.app = require('koa')(); this.app = require('koa')();

View File

@ -116,8 +116,10 @@ module.exports = function (strapi) {
// (aiming to not have issue with adapters when rebuilding the dictionary). // (aiming to not have issue with adapters when rebuilding the dictionary).
// It's kind of messy, for now, but it works fine. If someone has a better // It's kind of messy, for now, but it works fine. If someone has a better
// solution we'd be glad to accept a Pull Request. // solution we'd be glad to accept a Pull Request.
const ormConfig = JSON.parse(fs.readFileSync(path.resolve(strapi.config.appPath, strapi.config.paths.config, 'environments', strapi.config.environment, 'databases.json'))); if (!strapi.config.dry) {
strapi.config.orm = ormConfig.orm; const ormConfig = JSON.parse(fs.readFileSync(path.resolve(strapi.config.appPath, strapi.config.paths.config, 'environments', strapi.config.environment, 'databases.json')));
strapi.config.orm = ormConfig.orm;
}
// Save different environments inside an array because we need it in the Strapi Studio. // Save different environments inside an array because we need it in the Strapi Studio.
strapi.config.environments = fs.readdirSync(path.resolve(strapi.config.appPath, strapi.config.paths.config, 'environments')); strapi.config.environments = fs.readdirSync(path.resolve(strapi.config.appPath, strapi.config.paths.config, 'environments'));

View File

@ -64,6 +64,9 @@ module.exports = function (strapi) {
workers: os.cpus().length workers: os.cpus().length
}, },
// Application is not `dry` by default.
dry: false,
// Default paths. // Default paths.
paths: { paths: {
tmp: '.tmp', tmp: '.tmp',

View File

@ -37,7 +37,16 @@ module.exports = function (strapi) {
delete hooks.studio; delete hooks.studio;
} }
// Handle folder-defined modules (default to `lib/index.js`) // Remove undesired hooks when this is a `dry` application.
if (strapi.config.dry) {
delete hooks.blueprints;
delete hooks.dashboard;
delete hooks.grant;
delete hooks.studio;
delete hooks.waterline;
}
// Handle folder-defined modules (default to `./lib/index.js`)
// Since a hook definition must be a function. // Since a hook definition must be a function.
if (_.isObject(hookPrototype) && !_.isArray(hookPrototype) && !_.isFunction(hookPrototype)) { if (_.isObject(hookPrototype) && !_.isArray(hookPrototype) && !_.isFunction(hookPrototype)) {
hookPrototype = hookPrototype.index; hookPrototype = hookPrototype.index;

View File

@ -12,6 +12,13 @@ const Strapi = require('./Strapi');
* (maintains backwards compatibility with constructor usage). * (maintains backwards compatibility with constructor usage).
*/ */
module.exports = function () { module.exports = strapiFactory;
function strapiFactory() {
return new Strapi(); return new Strapi();
}; }
// Backwards compatibility for Strapi singleton usage.
const singleton = strapiFactory();
strapiFactory.isLocalStrapiValid = singleton.isLocalStrapiValid.bind(singleton);
strapiFactory.isStrapiAppSync = singleton.isStrapiAppSync.bind(singleton);