Ionic / bower / cordova - ignore files for build

前端 未结 4 808
梦如初夏
梦如初夏 2021-02-07 10:36

My project structure is the following:

MyApp
  - hooks
  - platforms
     - android
     - ios
  - www
    - js / css / templates..
    - lib (including all bowe         


        
4条回答
  •  野趣味
    野趣味 (楼主)
    2021-02-07 11:06

    According to Cordova workflow you can add a hook script that removes unnecessary files. A detailed example of a cleanup script can be found here: https://www.thepolyglotdeveloper.com/2015/01/hooks-apache-cordova-mobile-applications/

    But to give a quick step by step summary:

    Add to the after_prepare hook folder (/hooks/after_prepare) a script (01_junk_cleanup.js - 01 to be run first, the rest whatever you want) and in the file specify the files and folders you want to delete. For example, here is how you can delete a test folder and relevant files just change to you lib directory and to the files there. Note that this example is a bit different from the example in the link i gave earlier so you might want to take a look there as well.

    01_junk_cleanup.js:

    #!/usr/bin/env node
    
    var fs = require('fs');
    var path = require('path');
    
    var foldersToProcess = [
        "js",
        "css"
    
    ];
    
    var foldersToDelete = [
        "test"
    ];
    
    var filesToDelete = [
        "karmaOnBrowser.conf.js",
        "karmaOnEmulators.conf.js",
        "SpecRunner.html"
    ];
    
    var iosPlatformsDir = "platforms/ios/www/";
    var androidPlatformsDir = "platforms/android/assets/www/";
    
    filesToDelete.forEach(function(file) {
        var filePathIOS = iosPlatformsDir + file;
        var filePathAndroid = androidPlatformsDir + file;
        if(fs.existsSync(filePathIOS)){
            fs.unlinkSync(filePathIOS);
        };
        if(fs.existsSync(filePathAndroid)){
            fs.unlinkSync(filePathAndroid);
        };
    });
    
    foldersToProcess.forEach(function(folder) {
        processFiles(iosPlatformsDir + folder);
        processFiles(androidPlatformsDir + folder);
    });
    
    foldersToDelete.forEach(function(folder) {
        deleteFolderRecursive(iosPlatformsDir + folder);
        deleteFolderRecursive(androidPlatformsDir + folder);
    });
    
    function deleteFolderRecursive(path){
        if( fs.existsSync(path) ) {
             fs.readdirSync(path).forEach(function(file,index){
                 var curPath = path + "/" + file;
                 if(fs.lstatSync(curPath).isDirectory()) { // recurse
                    deleteFolderRecursive(curPath);
                 } else { // delete file
                    fs.unlinkSync(curPath);
                 }
             });
             fs.rmdirSync(path);
        }
    }
    
    function processFiles(dir) {
        fs.readdir(dir, function(err, list) {
            if(err) {
                console.log('processFiles err: ' + err);
                return;
            }
            list.forEach(function(file) {
                file = dir + '/' + file;
                fs.stat(file, function(err, stat) {
                    if(!stat.isDirectory()) {
                        switch(path.basename(file)) {
                            case ".DS_Store":
                                fs.unlink(file, function(error) {
                                    console.log("Removed file " + file);
                                });
                                break;
                            case "Thumbs.db":
                                fs.unlink(file, function(error) {
                                    console.log("Removed file " + file);
                                });
                                break;
                            default:
                                console.log("Skipping file " + file);
                                break;
                        }
                    }
                });
            });
        });
    }
    

    Aside to above, A bit more obvious but I feel worth mentioning anyhow, After having the www/lib bloat as well I always try to keep the folder lean and add only libraries required for deployment, the other dev. dependencies such as jasmine I either hold in the 'node_modules' folder or 'bower_components' as I only install today through them.

    Hope this helps, Good luck

提交回复
热议问题