18720358503 在线客服 人才招聘 返回顶部
企业动态 技术分享 行业动态

微信小程序界面设计_通过npm或yarn主动生成vue组件

2021-01-08分享 "> 对不起,没有下一图集了!">
通过npm或yarn自动生成vue组件的方法示例       这篇文章主要介绍了通过npm或yarn自动生成vue组件的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

不知道大家每次新建组件的时候,是不是都要创建一个目录,然后新增一个.vue文件,然后写template、script、style这些东西,如果是公共组件,是不是还要新建一个index.js用来导出vue组件、虽然有vscode有代码片段能实现自动补全,但还是很麻烦,今天灵活运用scripts工作流,自动生成vue文件和目录。

实践步骤

安装一下chalk,这个插件能让我们的控制台输出语句有各种颜色区分

npm install chalk --save-dev 
yarn add chalk --save-dev

在根目录中创建一个 scripts 文件夹

新增一个generateComponent.js文件,放置生成组件的代码

新增一个template.js文件,放置组件模板的代码

template.js文件,里面的内容可以自己自定义,符合当前项目的模板即可

// template.js
module.exports = {
 vueTemplate: compoenntName = {
 return ` template 
 div 
 ${compoenntName}组件
 /div 
 /template 
 script 
export default {
 name: '${compoenntName}'
 /script 
 style scoped lang="stylus" rel="stylesheet/stylus" 
.${compoenntName} {
 /style 
 entryTemplate: `import Main from './main.vue'
export default Main`
}

generateComponent.js生成vue目录和文件的代码

// generateComponent.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}`))
essLog = message = console.log(chalk.blue(`${message}`))
const errorLog = error = console.log(chalk.red(`${error}`))
const { vueTemplate, entryTemplate } = require('./template')
const _ = process.argv.splice(2)[0] === '-com'
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)
// 公共组件目录src/base,全局注册组件目录src/base/ponents
_ log('请输入要生成的组件名称、如需生成全局组件,请加 global/ 前缀') : log('ponents/目录下')
ponentName = ''
process.stdin.on('data', async chunk = {
 const inputName = String(chunk).trim().toString()
 // 根据不同类型组件分别处理
 if (_) {
 // 组件目录路径
 ponentDirectory = resolve('../src/base', inputName)
 // vue组件路径
 ponentVueName = ponentDirectory, 'main.vue')
 // 入口文件路径
 const entryComponentName = ponentDirectory, 'index.js')
 const hasComponentDirectory = ponentDirectory)
 if (hasComponentDirectory) {
 errorLog(`${inputName}组件目录已存在,请重新输入`)
 return
 } else {
 log(`ponent 目录 ${componentDirectory}`)
 ponentDirectory)
 try {
 if (inputName.includes('/')) {
 const inputArr = inputName.split('/')
 componentName = inputArr[inputArr.length - 1]
 } else {
 componentName = inputName
 log(`正在生成 vue 文件 ${componentVueName}`)
 ponentVueName, ponentName))
 log(`正在生成 entry 文件 ${entryComponentName}`)
 await generateFile(entryComponentName, entryTemplate)
 successLog('生成成功')
 } catch (e) {
 errorLog(e.message)
 } else {
 const inputArr = inputName.split('/')
 const directory = inputArr[0]
 ponentName = inputArr[inputArr.length - 1]
 // 页面组件目录
 ponentDirectory = resolve('../ponents', directory)
 // vue组件
 ponentVueName = ponentDirectory, `${componentName}.vue`)
 const hasComponentDirectory = ponentDirectory)
 if (hasComponentDirectory) {
 log(`${componentDirectory}组件目录已存在,直接生成vue文件`)
 } else {
 log(`ponent 目录 ${componentDirectory}`)
 ponentDirectory)
 try {
 log(`正在生成 vue 文件 ${componentName}`)
 ponentVueName, ponentName))
 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()

配置package.json,是为了区别是创建页面组件还是公共组件

"scripts": {
 "new:view":"node scripts/generateComponent",
 "": "node scripts/generateComponent -com"

执行

 npm run new:view // 生成页组件
 npm  // 生成基础组件
 yarn run new:view // 生成页组件
 yarn  // 生成基础组件


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持凡科。


"> 对不起,没有下一图集了!">
在线咨询