Nuxt/bin/nuxt-init

82 lines
1.8 KiB
Plaintext
Raw Normal View History

2016-11-08 00:18:26 +00:00
#!/usr/bin/env node
2016-11-07 01:34:58 +00:00
const co = require('co')
2016-11-11 14:30:11 +00:00
const fs = require('fs-extra')
2016-11-07 01:34:58 +00:00
const pify = require('pify')
const { resolve, join, basename } = require('path')
const { existsSync, writeFile } = require('fs')
2016-11-11 14:30:11 +00:00
const mkdirp = pify(fs.mkdirp)
2016-11-07 01:34:58 +00:00
const rootDir = resolve(process.argv.slice(2)[0] || '.')
if (basename(rootDir) === 'pages') {
console.warn('Your root directory is named "pages". This looks suspicious. You probably want to go one directory up.')
process.exit(0)
}
co(function * () {
yield new Promise((resolve) => setTimeout(resolve, 0)) // avoid undefined variables basePackage, etc.
if (!existsSync(rootDir)) {
yield mkdirp(rootDir)
}
if (!existsSync(join(rootDir, 'package.json'))) {
yield pify(writeFile)(join(rootDir, 'package.json'), basePackage.replace(/my-app/g, basename(rootDir)))
}
if (!existsSync(join(rootDir, 'nuxt.config.js'))) {
yield pify(writeFile)(join(rootDir, 'nuxt.config.js'), baseConfig)
}
if (!existsSync(join(rootDir, 'static'))) {
yield mkdirp(join(rootDir, 'static'))
}
if (!existsSync(join(rootDir, 'pages'))) {
yield mkdirp(join(rootDir, 'pages'))
yield pify(writeFile)(join(rootDir, 'pages', 'index.vue'), basePage)
}
})
.then(() => {
console.log('Nuxt project [' + basename(rootDir) + '] created')
})
.catch((err) => {
console.error(err)
process.exit(1)
})
const basePackage = `{
"name": "my-app",
"description": "",
"dependencies": {
"nuxt": "latest"
},
"scripts": {
"start": "nuxt"
}
}
`
const baseConfig = `module.exports = {
// Nuxt.js configuration file
2016-11-23 12:40:25 +00:00
// Please look at https://nuxtjs.org/guide/configuration
2016-11-07 01:34:58 +00:00
}
`
const basePage = `<template>
2016-11-07 01:34:58 +00:00
<p>Hello {{ name }}!</p>
</template>
<script>
export default {
data () {
return { name: 'world' }
}
}
</script>
<style>
p {
font-size: 20px;
text-align: center;
padding: 100px;
}
</style>
`