purge-buildscripts
Version:
Removes buildscript sections in locally installed React Native library packages
81 lines (75 loc) • 2.16 kB
JavaScript
const fs = require('fs');
const path = require('path');
const findFiles = function (dir, name) {
let results = [];
fs.readdirSync(dir).forEach(function (file) {
file = path.join(dir, file);
let stat = fs.statSync(file);
if (stat && stat.isDirectory()) {
results = results.concat(findFiles(file, name));
} else {
if (path.basename(file) === name) {
results.push(file);
}
}
});
return results;
};
function processBuildGradle(file) {
var buildscriptDetected = false;
var inBuildscriptSection = false;
var newBuildGradle = [];
fs.readFileSync(file, 'utf-8')
.split(/\r?\n/)
.forEach(function (line) {
if (line === 'buildscript {') {
console.log(
`Removing buildscript section in ${path.relative(
process.cwd(),
file
)}`
);
buildscriptDetected = true;
inBuildscriptSection = true;
}
if (!inBuildscriptSection) {
newBuildGradle.push(line);
} else {
if (line === '}') {
inBuildscriptSection = false;
}
}
});
if (buildscriptDetected) {
fs.renameSync(file, file + '.bak');
fs.writeFileSync(file, newBuildGradle.join('\n'));
}
return buildscriptDetected;
}
const nodeModules = path.join(process.cwd(), 'node_modules');
if (fs.existsSync(nodeModules) && fs.statSync(nodeModules).isDirectory()) {
let files = findFiles(nodeModules, 'build.gradle');
if (files.length > 0) {
console.log(`Found ${files.length} build.gradle file(s).`);
let modifiedFiles = 0;
files.forEach(function (file) {
if (processBuildGradle(file)) {
modifiedFiles++;
}
});
if (modifiedFiles > 0) {
console.log(
`${modifiedFiles} file(s) modified. Original(s) renamed to build.gradle.bak`
);
} else {
console.log('No buildscript sections detected.');
}
} else {
console.log('No build.gradle files found.');
}
} else {
console.log(
'Error: node_modules not found. Please run this script in the root of your app project, after installing packages.'
);
}