vue-cli3 项目优化之自动生成组件
栏目: JavaScript · 发布时间: 5年前
内容简介:做前端的大家都知道通过本文就是通过
介绍
做前端的大家都知道通过 vue
开发的项目每次创建新组建的时候,都要新建一个目录,然后新增 .vue
文件,在这个文件中再写入 template
、 script
、 style
这些内容,虽然在写入的时候大家都有自己的自动补全共计,不过这些都是模板性的,每次都要这样重复操作,很麻烦有没有。
本文就是通过 node
来帮助我们,自动去执行这些重复操作,而我们只需要告诉控制台我们需要创建的组件名字就可以了。
本文自动创建的组件包含两个文件:入口文件 index.js
、vue文件 main.vue
1.1 chalk工具
为了方便我们能看清控制台输出的各种语句,我们先安装一下 chalk
npm install chalk --save-dev
1.2 创建views
- 在根目录中创建一个
scripts
文件夹 - 在
scripts
中创建generateView
文件夹 - 在
generateView
中新建index.js
,放置生成组件的代码 - 在
generateView
中新建template.js
,放置组件模板的代码,模板内容可根据项目需求自行修改
index.js
// index.js const chalk = require('chalk') const path = require('path') const fs = require('fs') const resolve = (...file) => path.resolve(__dirname, ...file) const log = message => console.log(chalk.green(`${message}`)) const successLog = message => console.log(chalk.blue(`${message}`)) const errorLog = error => console.log(chalk.red(`${error}`)) // 导入模板 const { vueTemplate, entryTemplate } = require('./template') // 生成文件 const generateFile = (path, data) => { if (fs.existsSync(path)) { errorLog(`${path}文件已存在`) return } return new Promise((resolve, reject) => { fs.writeFile(path, data, 'utf8', err => { if (err) { errorLog(err.message) reject(err) } else { resolve(true) } }) }) } log('请输入要生成的页面组件名称、会生成在 views/目录下') let componentName = '' process.stdin.on('data', async chunk => { // 组件名称 const inputName = String(chunk).trim().toString() // Vue页面组件路径 const componentPath = resolve('../../src/views', inputName) // vue文件 const vueFile = resolve(componentPath, 'main.vue') // 入口文件 const entryFile = resolve(componentPath, 'entry.js') // 判断组件文件夹是否存在 const hasComponentExists = fs.existsSync(componentPath) if (hasComponentExists) { errorLog(`${inputName}页面组件已存在,请重新输入`) return } else { log(`正在生成 component 目录 ${componentPath}`) await dotExistDirectoryCreate(componentPath) } try { // 获取组件名 if (inputName.includes('/')) { const inputArr = inputName.split('/') componentName = inputArr[inputArr.length - 1] } else { componentName = inputName } log(`正在生成 vue 文件 ${vueFile}`) await generateFile(vueFile, vueTemplate(componentName)) log(`正在生成 entry 文件 ${entryFile}`) await generateFile(entryFile, entryTemplate(componentName)) successLog('生成成功') } catch (e) { errorLog(e.message) } process.stdin.emit('end') }) process.stdin.on('end', () => { log('exit') process.exit() }) function dotExistDirectoryCreate(directory) { return new Promise((resolve) => { mkdirs(directory, function() { resolve(true) }) }) } // 递归创建目录 function mkdirs(directory, callback) { var exists = fs.existsSync(directory) if (exists) { callback() } else { mkdirs(path.dirname(directory), function() { fs.mkdirSync(directory) callback() }) } }
template.js
// template.js module.exports = { vueTemplate: compoenntName => { return `<template> <div class="${compoenntName}"> ${compoenntName}组件 </div> </template> <script> export default { name: '${compoenntName}' }; </script> <style lang="stylus" scoped> .${compoenntName} { }; </style>` }, entryTemplate: compoenntName => { return `import ${compoenntName} from './main.vue' export default [{ path: "/${compoenntName}", name: "${compoenntName}", component: ${compoenntName} }]` } }
1.3 配置package.json
"new:view": "node ./scripts/generateView/index"
如果使用 npm
的话 就是 npm run new:view
如果是 yarn
自行修改命令
1.4 结果
以上所述就是小编给大家介绍的《vue-cli3 项目优化之自动生成组件》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 通过npm或yarn自动生成vue组件
- vue-cli3 项目优化之通过 node 自动生成组件模板 generate View、Component
- Simulink自动生成代码
- changelog 日志自动生成插件
- APIAuto 2.0.0 发布,机器学习自动化测试、自动生成代码和注释、自动静态检查...
- 深度有趣 | 23 歌词古诗自动生成
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。