UNPKG

nativescript-hook-filter-modules

Version:

Shrinking size of built application by deleting defined set of node_modules inside tns_modules

140 lines (119 loc) 3.49 kB
var path = require("path"); var shelljs = require("shelljs"); var fs = require('fs'); var findRemoveSync = require('find-remove') module.exports = function (logger, platformsData, projectData, hookArgs) { var deletedFileCounter=0; var projectDir = projectData.projectDir; var platform = hookArgs.platform.toLowerCase(); process.env.PLATFORM = platform; var platformData = platformsData.getPlatformData(platform); var platformOutDir = platformData.appDestinationDirectoryPath; var platformAppDir = path.join(platformOutDir, "app"); platformAppDir = path.join(platformAppDir, "tns_modules"); process.env.PLATFORM_DIR = platformOutDir; var SubDirs_to_be_kept=[]; var SubDirs_to_be_deleted=[]; var Dirs_to_be_kept=[ "application", "application-settings", "camera", "color", "connectivity", "console", "css", "css-value", "data", "debugger", "fetch", "file-system", "fps-meter", "globals", "http", "image-source", "ios", "js-libs", "location", "platform", "text", "timer", "trace", "ui", "utils", "xhr", "xml", "tns-core-modules-widgets", "@angular", "nativescript-angular", "nativescript-intl", "reflect-metadata", "zone.js", "rxjs", "parse5" ]; var Dirs_to_be_deleted=[ "nativescript-hook-filter-modules" ]; try{ var dirs=getDirectories(platformAppDir); var JSONFilterFiles=readPackageJson(projectDir); Dirs_to_be_kept=Dirs_to_be_kept.concat(JSONFilterFiles.to_be_kept); Dirs_to_be_deleted=Dirs_to_be_deleted.concat(JSONFilterFiles.to_be_deleted); Dirs_to_be_deleted.forEach(function(item){ if(item.indexOf("/")>-1){ SubDirs_to_be_deleted.push(item); } }); dirs.forEach(function(item,index){ if(item=="trace")return; var delFolder = Dirs_to_be_kept.indexOf(item)==-1; if(item.indexOf("nativescript-")>-1 && item.indexOf("nativescript-dev-")==-1 && item.indexOf(Dirs_to_be_deleted)==-1){ delFolder=false; } if(Dirs_to_be_deleted.indexOf(item)>-1){ delFolder=true; } if(delFolder){ var delPath=path.join(platformAppDir, item); if(fs.existsSync(delPath)){ var result = findRemoveSync(delPath, {dir: "*", files: "*.*"}); console.log(result); if(fs.existsSync(delPath)){ fs.rmdirSync(delPath); } } } }); SubDirs_to_be_deleted.forEach(function(item){ if(item=="trace")return; var delPath=path.join(platformAppDir, item); if(fs.existsSync(delPath)){ var result = findRemoveSync(delPath, {dir: "*", files: "*.*"}); console.log(result); if(fs.existsSync(delPath)){ fs.rmdirSync(delPath); } } }); result = findRemoveSync(path.join(platformOutDir, "app"), {extensions: ['.ts','.md','.MD','.map']}); if(result!={})console.log(result); result = findRemoveSync(path.join(platformOutDir, "app"), {files: ['LICENSE','.gitignore','.npmignore']}); if(result!={})console.log(result); }catch(e){ console.log(e); console.log('Shrinking failed.'); } }; function getDirectories(srcpath) { return fs.readdirSync(srcpath).filter(function(file) { return fs.statSync(path.join(srcpath, file)).isDirectory(); }); } function readPackageJson(dir) { var packageJson = path.join(dir, "filter-modules.json"); if (shelljs.test("-f", packageJson)) { return JSON.parse(shelljs.cat(packageJson)); } else { return {}; } };