UNPKG

budgie-react

Version:

budgie-react is a react-redux boilerplate with routing running on a webpack server. By, using budgie-react, we can create components and pages with auto redux mapping, More exciting features comming in newer releases...

243 lines (230 loc) 5.55 kB
#!/usr/bin/env node const readLine = require('readline').createInterface({ input: process.stdin, output: process.stdout, }); const fs = require('fs'); const { exec } = require('child_process') let state = { projectName: 'BudgieReact', closeApp: false, readmeContent: '# Budgie React Boilerplate\n## Welcome to the new project, where we can create exciting react templates which will be fully customized and flexible to work with. Clone this project to know more.\n### To Clone this project, use:\n```git clone https://github.com/yashdatir/budgie-react.git```\n### Install Node dependency\n```npm i```\n### Start the project\n```npm run start:dev```', packageJSON: { entry: 'index.js', scripts: { test: 'echo "Error: no test specified" && exit 1', 'start:dev': 'webpack-dev-server .', build: 'webpack .', }, keywords: [], author: '', license: 'ISC', devDependencies: { '@babel/core': '^7.15.5', '@babel/plugin-syntax-dynamic-import': '^7.8.3', '@babel/plugin-transform-runtime': '^7.15.0', '@babel/preset-env': '^7.15.6', '@babel/preset-react': '^7.14.5', '@babel/runtime': '^7.15.4', 'babel-eslint': '^10.1.0', 'babel-loader': '^8.2.2', eslint: '^7.32.0', 'eslint-config-airbnb-base': '^14.2.1', 'eslint-config-prettier': '^8.3.0', 'eslint-plugin-jest': '^24.4.2', webpack: '^4.43.0', 'webpack-cli': '^3.3.1', 'webpack-dev-server': '^3.10.3', }, dependencies: { react: '^17.0.2', 'react-dom': '^17.0.2', 'react-redux': '^7.2.5', 'react-router-dom': '^5.3.0', redux: '^4.1.1', }, }, webpackFileContent: ` const path = require("path"); module.exports = { mode: "development", entry: "./index.js", output: { path: path.resolve(__dirname, "public"), filename: "main.js" }, target: "node", devServer: { port: "3000", contentBase: ["./public"], open: true, historyApiFallback: true, }, resolve: { extensions: [".js", ".jsx", ".json"] }, module: { rules: [{ test: /\.(js|jsx)$/, exclude: /node_modules/, use: { loader: "babel-loader" } }] } } `, indexContent: ` import React from 'react'; import ReactDOM from "react-dom"; import AppInit from "./app/AppInit"; ReactDOM.render(<AppInit />, document.getElementById("root")); `, babelrcContent: `{ "presets": ["@babel/preset-env", "@babel/preset-react"], "plugins": ["@babel/plugin-syntax-dynamic-import", "@babel/plugin-transform-runtime"] }`, indexHTML: `<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Budgie-React</title> </head> <body> <div id="root"></div> <script src="main.js"></script> </body> </html>` }; function create_package_json(name) { const { packageJSON: { dependencies, devDependencies, scripts, entry, keywords, author, license, }, } = state; return { name, version: '0.0.1', description: '', main: entry, scripts, keywords, author, license, devDependencies, dependencies, }; } function create_project(name) { fs.mkdir(name, (err) => { if (err) { return err; } fs.writeFileSync(`./${name}/README.md`, state.readmeContent, (err) => { if (err) throw err; }); fs.writeFileSync( `./${name}/package.json`, JSON.stringify(create_package_json(name)), (err) => { if (err) throw err; }, ); fs.writeFileSync( `./${name}/webpack.config.js`, state.webpackFileContent, (err) => { if (err) throw err; }, ); fs.writeFileSync( `./${name}/index.js`, state.indexContent, (err) => { if (err) throw err; }, ); fs.writeFileSync( `./${name}/.babelrc`, state.babelrcContent, (err) => { if (err) throw err; }, ); create_react(name); }); } function create_react(name) { fs.mkdir(`${name}/public`, (err)=>{ if(err){ return err } fs.writeFileSync( `./${name}/public/index.html`, state.indexHTML, (err) => { if (err) throw err; }, ); }) fs.mkdir(`${name}/app`, (err)=>{ if(err){ return err; } fs.writeFileSync( `./${name}/app/AppInit.jsx`, ` import React from "react" const AppInit = () => { return ( <>Hello World</> ) } export default AppInit `, (err) => { if (err) throw err; }, ); }); console.log("Initialized with a boiler..."); console.log("Installing Node Modules!") exec(`cd ${name} && npm i`, (error, stdout, stderr)=>{ if(error){ console.log(error); return null; } else if(stderr){ console.log(stderr); return null; } console.log(stdout) }); } function create_pages() {} function create_components() {} (function init() { console.log('...Welcome to BudgieReact...'); readLine.question( `What would you prefer as your project name?[${state.projectName}]: `, (text) => { if (text) { state = { ...state, projectName: text, }; } create_project(state.projectName); readLine.close(); }, ); })();