连续复制
一键复制
一键打包

uniapp 生成路径+添加到router

const path = require('path')
const fs = require('fs')

/**
 * 获取vue模板
 * @param name
 * @return {string}
 */
function getVue(name) {
    const vtpl = `<template>
  <view class="${name}">

  </view>
</template>

<script>
  export default {
    name: "${name}",
    data() {
      return {};
    },
    computed:{
    },
    watch:{
    },
    onLoad(){},
    onShow(){},
    onReady(){},
    onHide(){},
    beforeMount() {
    },
    mounted() {
    },
    methods: {}
  };
</script>

<style lang="scss" scoped>@import "${name}";</style>
`
    return vtpl
}

/**
 * 获取scss模板
 * @param name
 * @returns {string}
 */
function getScss(name) {
    const scss = `.${name}{

  }`
    return scss
}

// 从参数里面获取表名
function getValueArgv(argv, param) {
    let val = ''
    const index = argv.findIndex((item) => item.toLowerCase().startsWith(param))
    if (index > -1) {
        val = argv[index].slice(5)
    }
    return val
}

async function run() {
    const page = getValueArgv(process.argv, 'page')
    const mode = getValueArgv(process.argv, 'mode') || 'single'
    console.log('示例:\nnode code.js mode=single|all page=pages/index/index\n')
    if (mode == 'single') {
        if (!page) {
            console.log('缺少page\n')
            return
        }
        const pages = fs.readFileSync(__dirname + '/pages.json')
        const pagesStr = JSON.parse(pages)
        if (pagesStr.pages.filter((v) => v.path == page).length > 0) {
            console.log('页面已经存在')
            return
        }
        genPage(page)

        pagesStr.pages.push({
            path: page,
            style: { navigationBarTitleText: '标题文件' },
            auth: true
        })

        fs.writeFileSync(path.join(__dirname, '/pages.json'), JSON.stringify(pagesStr), 'utf8')
    } else {
        let pages = fs.readFileSync(__dirname + '/pages.json')
        pages = JSON.parse(pages).pages
        pages.map((item) => {
            genPage(item.path, item)
        })
    }
}

/**
 *
 * @param {String} page 生成页面
 * @param {Object} router 路由信息
 */
function genPage(page, router) {
    const rootPath = './'
    const folder = path.join(__dirname, rootPath)
    const pageArr = page.split('/')
    console.log(page)
    const pageName = pageArr.pop()
    const finalPath = path.join(folder, pageArr.join('/'))
    // 创建文件夹
    mkdirsSync(finalPath)

    // 创建页面文件
    if (!fs.existsSync(finalPath + '/' + pageName + '.vue')) {
        console.log('生成 ' + finalPath + '/' + pageName + '.vue 成功')
        writeFile(finalPath + '/' + pageName + '.vue', getVue(pageName))
    } else {
        console.log(finalPath + '/' + pageName + '.vue 已存在')
    }
    // 创建scss文件
    if (!fs.existsSync(finalPath + '/' + pageName + '.scss')) {
        writeFile(finalPath + '/' + pageName + '.scss', getScss(pageName))
        console.log('生成 ' + finalPath + '/' + pageName + '.scss' + ' 成功')
    } else {
        console.log('生成 ' + finalPath + '/' + pageName + '.scss 失败')
    }
}

/**
 * 文件同步写入
 * @param {文件名} file 文件名
 * @param {文件内容} fileContent 写入文件内容
 */
function writeFile(file, fileContent) {
    fs.writeFileSync(file, fileContent)
}

/**
 * 创建目录
 * @param dirname
 * @return {boolean}
 */
function mkdirsSync(dirname) {
    console.log(dirname)
    if (fs.existsSync(dirname)) {
        return true
    } else {
        if (mkdirsSync(path.dirname(dirname))) {
            fs.mkdirSync(dirname)
            return true
        }
    }
}

run()