Created
April 23, 2019 12:14
-
-
Save verdi327/86dcf110d0b681bc9eedbf67fd6dceed to your computer and use it in GitHub Desktop.
Create React App File Generator Script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const fs = require("fs"); | |
const nodeFS = require("node-fs"); | |
const argv = require('yargs') | |
.usage('Usage: npm run generate [component] [relative/to/src]') | |
.describe('relative/to/src', 'allows nested directory creation from ./src folder') | |
.example('npm run generate FooList') | |
.example('npm run generate FooList Components/Foo') | |
.demandOption(['component']) | |
.help() | |
.argv; | |
const [folderName, path] = argv._; | |
if (!folderName) { | |
console.log('[ERROR]: Must supply a component name') | |
return; | |
} | |
let relativePath = './src'; | |
if (path) { | |
relativePath += path | |
} | |
relativePath += `/${folderName}`; | |
fs.stat(relativePath, (err) => { | |
if (!err) { | |
console.log(`[ERROR]: ${folderName} already exists at ${relativePath}`); | |
} | |
else if (err.code === 'ENOENT') { | |
try { | |
nodeFS.mkdirSync(relativePath, 0o777, true); | |
fs.writeFileSync(`${relativePath}/${folderName}.js`, setupJsFile(folderName)); | |
fs.writeFileSync(`${relativePath}/${folderName}.css`, setupCSSFile(folderName)); | |
fs.writeFileSync(`${relativePath}/${folderName}.test.js`, setupJsTestFile(folderName)); | |
} catch (err) { | |
console.error(err.message) | |
} | |
} | |
}); | |
function setupJsFile(folderName) { | |
return `import React, {Component} from 'react'; | |
import './${folderName}.css'; | |
export default class ${folderName} extends Component { | |
render() { | |
return ( | |
<div></div> | |
) | |
} | |
} | |
`; | |
}; | |
function setupCSSFile(folderName) { | |
return `/* styling for ${folderName} Component */`; | |
} | |
function setupJsTestFile(folderName) { | |
return `import React from 'react'; | |
import ReactDOM from 'react-dom'; | |
import ${folderName} from './${folderName}'; | |
describe('${folderName} Component', () => { | |
it('renders without crashing', () => { | |
const div = document.createElement('div'); | |
ReactDOM.render(< ${folderName} />, div); | |
ReactDOM.unmountComponentAtNode(div); | |
}); | |
}) | |
`; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment