Files
directus/packages/create-directus-project/lib/index.js
2021-06-14 15:10:50 -04:00

78 lines
1.8 KiB
JavaScript
Executable File

#!/usr/bin/env node
'use strict';
const commander = require('commander');
const path = require('path');
const chalk = require('chalk');
const fse = require('fs-extra');
const execa = require('execa');
const ora = require('ora');
const pkg = require('../package.json');
const checkRequirements = require('./check-requirements');
const program = new commander.Command(pkg.name);
program
.version(pkg.version)
.arguments('<directory>')
.description('Create a new Directus project')
.action(create)
.parse(process.argv);
async function create(directory) {
checkRequirements();
const rootPath = path.resolve(directory);
if (await fse.pathExists(rootPath)) {
const stat = await fse.stat(rootPath);
if (stat.isDirectory() === false) {
// eslint-disable-next-line no-console
console.log(`Destination ${chalk.red(directory)} already exists and is not a directory.`);
process.exit(1);
}
const files = await fse.readdir(rootPath);
if (files.length > 0) {
// eslint-disable-next-line no-console
console.log(`Destination ${chalk.red(directory)} already exists and is not an empty directory.`);
process.exit(1);
}
} else {
await fse.mkdir(rootPath);
}
await fse.mkdir(path.join(rootPath, 'uploads'));
await fse.mkdir(path.join(rootPath, 'extensions'));
const extensionFolders = ['interfaces', 'displays', 'layouts', 'modules'];
for (const folderName of extensionFolders) {
await fse.mkdir(path.join(rootPath, 'extensions', folderName));
}
const spinner = ora('Installing Directus').start();
await execa('npm', ['init', '-y'], {
cwd: rootPath,
stdin: 'ignore',
});
await execa('npm', ['install', 'directus', '--production', '--no-optional'], {
cwd: rootPath,
stdin: 'ignore',
});
spinner.stop();
await execa('npx', ['directus', 'init'], {
cwd: rootPath,
stdio: 'inherit',
});
process.exit(0);
}