installMissingCloudflarePackages function
Installs only Node packages that are not already declared.
Reinstalling a declared package without a version can rewrite an exact dependency to npm's configured save prefix, even when nothing changed.
Implementation
Future<void> installMissingCloudflarePackages({
required String npm,
required Iterable<String> packages,
}) async {
final packageJson = File("cloudflare/package.json");
final declared = <String>{};
if (packageJson.existsSync()) {
final decoded = jsonDecode(await packageJson.readAsString());
if (decoded is Map) {
for (final section in ["dependencies", "devDependencies"]) {
final values = decoded[section];
if (values is Map) {
declared.addAll(values.keys.map((key) => key.toString()));
}
}
}
}
final missing = packages.where((package) => !declared.contains(package));
if (missing.isEmpty) {
return;
}
await command(
"Package installation.",
[npm, "install", ...missing],
workingDirectory: "cloudflare",
runInShell: true,
);
}