用户
 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,登录网站

小程序社区 首页 教程 实战教程 查看内容

微信小程序转换器(二)—— 文件的操作

Rolan 2020-11-17 09:56

这篇主要说的是文件操作,去遍历和读取文件,然后去选择对应的转换器。

启动方法

转换器的主函数,整个转换器在这里启动。

function run() {
    const currentPath = inputAppPath()
    const outPutPath = outputAppPath()
    deleteall(outPutPath) // 删除以前的编译结果
    fs.mkdirSync(outPutPath) // 新建存放编译结果文件夹
    const files = fs.readdirSync(currentPath); // 获取当前目录下的所有文件
    AnalyzeApp().run() // 编译全局文件
    files.forEach(file => { // 遍历当前目录的所有文件
        const currentFilePath = currentPath + '/' + file
        const currentOutputPath = outPutPath + '/' + file
        
        // 遍历根目录,如果是文件夹走进Analyze方法,继续递归遍历
        if (fs.statSync(currentFilePath).isDirectory() && file !== config.output.name){
            fs.mkdirSync(currentOutputPath)
            // 去遍历文件
            Analyze(currentFilePath, currentOutputPath)
        }
    })  
}

run()

复制代码

Analyze函数

用来遍历文件,并将文件导向对应的转换器。

function Analyze(filePath, outputPath){
    // 将文件导向相应的处理函数
    function analyzeFile(filePath, outputPath) {
        switch(path.extname(filePath)) {
            case '.js':
                buildJs(filePath, outputPath)
                break;
            case '.wxss':
                buildWxss(filePath, outputPath.replace('.wxss', '.acss'))
                break;
            case '.json':
                buildJson(filePath, outputPath)
                break;
            case '.wxml':
                buildXml(filePath, outputPath.replace('.wxml','.axml'))
                break;
            case '.ts':
                break;
            case '.DS_Store':
                break;
            default:
                copyFile(filePath, outputPath.replace('.wxss', ''))
        }
    }
    
    // 如果当前文件是文件夹,继续向下遍历 否则就调用analyzeFile导向相应的处理函数
    if (fs.statSync(filePath).isDirectory()) {
        const files = fs.readdirSync(filePath)
        files.forEach(file => {
            const currentFilePath = filePath+'/'+file
            const currentOutputPath = outputPath+'/'+file
            // 如果是文件夹,继续向下遍历 否则就调用analyzeFile导向相应的处理函数
            if(fs.statSync(currentFilePath).isDirectory()) {
                fs.mkdirSync(currentOutputPath)
                Analyze(currentFilePath, currentOutputPath)
            } else analyzeFile(currentFilePath, currentOutputPath)
        })
    } else analyzeFile(filePath, outputPath) // 处理文件
}

复制代码
全局文件处理

因为全局的app.json和页面的json文件不一样,需要单独处理。索性就把app.json、app.js、app.wxss这几个在最外层的文件给单独处理了,其他非文件夹文件不做处理好了。

其实可以在配置文件中增加个exclude属性,来匹配不用处理的文件路径,但既然是个简易的只有框框的转换器,就先采用前面提到的方式。


function AnalyzeApp() {
    //处理app.json
    function json() {
        const appJson = JSON.parse(readFile(inputAppPath('./app.json')))
        const appWindow = appJson.window
        if (appWindow) {
            Object.keys(appWindow).forEach(key => {
                const item = compares.WINDOWCONVERTERCONFIG[key]
                if (item) {
                    if (item.target) replaceAtrr(appWindow, key, item.target)
                    item.handler && item.handler(appWindow)
                }  
            })
        }
    
        if (appJson.tabBar) {
            compares.TABBARCONVERTERCONFIG.forEach(element => {
                if (appJson.tabBar.hasOwnProperty(element.originalKey)) {
                    if (element.originalKey == 'list') compares.TABBARCONVERTERCONFIG.list.forEach(item => {
                        element.list.forEach(keyItem => {
                            replaceAtrr(item, keyItem.originalKey, keyItem.key)
                        })
                    })
                    replaceAtrr(appJson.tabBar, element.originalKey, element.key)
                }
            })
    
        }
        
        writeFile(outputAppPath('./app.json'), JSON.stringify(appJson))
        return appJson
    }

    //处理app.wxss
    function wxss() {
        const outputPath = outputAppPath('./app.acss')
        buildWxss(inputAppPath('./app.wxss'), outputPath)
    }
    
    //处理app.js
    function js() {
        return buildJs(inputAppPath('./app.js'), outputAppPath('./app.js'))
    }
    return { 
    	json, wxss, js,
        run() {
            json()
            wxss()
            js()
        }
    }
}

复制代码
最后

对,文件操作部分就是那么短hhhhhhh。node就是那么开心

鲜花
鲜花
鸡蛋
鸡蛋
分享至 : QQ空间
收藏