rsnext/packages/create-next-app/lib/index.js
Joe Haddad 4eb8aba692
Add Create Next App package (#8018)
* Add Create Next App package

* Fix Create Next App tests

* Fix company name

* Update package.json
2019-07-17 16:53:56 -04:00

60 lines
1.5 KiB
JavaScript

const path = require('path')
const fs = require('fs')
const copyDir = require('./utils/copy-dir')
const install = require('./utils/install')
const loadExample = require('./utils/load-example')
const messages = require('./messages')
module.exports = function createNextApp (opts) {
const projectName = opts.projectName
if (!projectName) {
console.log(messages.missingProjectName())
process.exit(1)
}
if (fs.existsSync(projectName) && projectName !== '.') {
console.log(messages.alreadyExists(projectName))
process.exit(1)
}
const projectPath = (opts.projectPath = process.cwd() + '/' + projectName)
if (opts.example) {
loadExample({
projectName: projectName,
example: opts.example
}).then(installWithMessageFactory(opts))
} else {
const templatePath = path.resolve(__dirname, './templates/default')
copyDir({
templatePath: templatePath,
projectPath: projectPath,
projectName: projectName
})
.then(installWithMessageFactory(opts))
.catch(function (err) {
throw err
})
}
}
function installWithMessageFactory (opts) {
const projectName = opts.projectName
const projectPath = opts.projectPath
return function installWithMessage () {
return install({
projectName: projectName,
projectPath: projectPath,
packages: ['react', 'react-dom', 'next']
})
.then(function () {
console.log(messages.start(projectName))
})
.catch(function (err) {
throw err
})
}
}