Node自动生成文件模板
一、初始化,准备工作
会生成一个package.json文件
在当前文件夹下建一个目录scripts
存放脚本文件generateProects.js
和template.js
并在package.json中加入命令
"scripts": {
"create": "node ./scripts/generateProject"
},
二、编写模板文件
module.exports = {
vueTemplate:
`
<template>
<div>
<h1>这是模板生成的文件</h1>
</div>
</template>
<script>
export default {
data() {
return {}
},
created(){}
methods: {}
}
</script>
<style scoped></style>
`
}
三、编写脚本generateProject.js
const chalk = require('chalk') // 这个库需要手动安装npm i chalk
const path = require('path')
const fs = require('fs')
const pathResolve = (...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 } = require('./template.js') // 引入模板文件
log('请输入文件名称')
process.stdin.on('data', async chunk => {
const inputName = String(chunk).trim().toString()
/** * 文件目录路径 */
const projectDirectory = pathResolve('../src', inputName) // 生成目录放在src下
const hasprojectDirectory = fs.existsSync(projectDirectory)
if (hasprojectDirectory) {
// 判断目录是否存在
errorLog(`${inputName}项目目录已存在,请重新输入`)
} else {
log(`正在生成 文件目录 ${projectDirectory}`)
dotExistDirectoryCreate(pathResolve(projectDirectory)) // 创建文件夹
await generateFile(pathResolve(projectDirectory, `${inputName}.vue`), vueTemplate) // 创建文件
successLog('文件生成成功')
}
process.stdin.emit('end')
})
process.stdin.on('end', () => {
// 结束后退出 process.exit()
})
// 创建文件
function 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)
}
})
})
}
// 创建文件夹
function dotExistDirectoryCreate(directory) {
return new Promise(resolve => {
mkdirs(directory, function () {
resolve()
})
})
}
// 递归创建目录
function mkdirs(directory, callback) {
const exists = fs.existsSync(directory)
if (exists) {
callback()
} else {
mkdirs(path.dirname(directory), () => {
fs.mkdirSync(directory)
callback()
})
}
}
四、最终结果
文件目录
文件结构
文件内容
转载自:https://juejin.cn/post/6924623782208339975