make-components
Version:
a tool create components in Vue app in the required folder
63 lines (49 loc) • 1.66 kB
JavaScript
const path = require('path');
const fs = require('fs');
const componentName = process.argv[2];
const registerFile = path.resolve('src/js/vue/registry/imports.js');
const folderName = path.resolve(`src/js/vue/global-components/${componentName}`);
const componentFile = `${folderName}/${componentName}.vue`;
let lines;
try {
if (!fs.existsSync(folderName)) {
fs.mkdirSync(folderName, { recursive: true });
} else {
console.error("Component Folder already exists!");
}
} catch(err) {}
try {
// read contents of the file
const data = fs.readFileSync(registerFile, 'UTF-8');
// split the contents by new line
lines = data.split(/\r?\n/);
} catch (err) {
console.error(err);
process.exit()
}
// Capitalize String
const capitalize = (s) => {
if (typeof s !== 'string') return '';
return s.charAt(0).toUpperCase() + s.slice(1)
};
// Split the component name
let capitalizedComponentName = ' Vue' + componentName.split('-').map((c) => capitalize(c)).join('');
let componentLine = `${capitalizedComponentName}: import(/* webpackChunkName: "global-components/${componentName}" */ '../global-components/${componentName}/${componentName}'),`;
let innerLines = lines.slice(1, lines.length - 1);
innerLines.push(componentLine);
fs.writeFileSync(registerFile, [lines[0], ...innerLines, lines[lines.length - 1]].join('\n'));
let componentFileTemplate = `<template>
</template>
<script>
export default {
};
</script>
`;
try {
if (fs.existsSync(folderName)) {
fs.writeFileSync(componentFile, componentFileTemplate);
} else {
console.error("Component file already exists!");
}
} catch(err) {}