This code updates dependency versions in a project's package.json
file to match the versions actually installed, using information from npm list
.
npm run import -- "Replace package.json latest with actual latest version numbers"
var fs = require('fs');
var path = require('path');
var cwd = 'C:\\Users\\brian.cullinan\\Documents\\portal\\';
var execSync = require('child_process').execSync;
var packages = execSync('npm list --dev', {cwd: cwd}).toString().split('\n');
var packageJson = JSON.parse(fs.readFileSync(path.join(cwd, 'package.json')));
var deps = Object.keys(packageJson.dependencies);
deps.forEach((d, k) => {
packages.forEach((p, i) => {
if (p.indexOf(d + '@') > -1) {
packageJson.dependencies[d] = '~' + p.split('@').pop().replace(' deduped', '');
}
});
});
console.log(packages);
var devDeps = Object.keys(packageJson.devDependencies);
devDeps.forEach((d, k) => {
packages.forEach((p, i) => {
if (p.indexOf(d + '@') > -1) {
packageJson.devDependencies[d] = '~' + p.split('@').pop().replace(' deduped', '');
}
});
});
$.mime({'text/html': '<pre>' + JSON.stringify(packageJson, null, 4) + '</pre>'});
// Requires
const fs = require('fs');
const path = require('path');
const childProcess = require('child_process');
const mime = require('mime-types'); // For mime type
// Constants
const CURRENT_WORKING_DIRECTORY = 'C:\\Users\\brian.cullinan\\Documents\\portal\\';
const NPM_LIST_COMMAND = 'npm list --dev';
// Function to get installed packages
function getInstalledPackages(cwd = CURRENT_WORKING_DIRECTORY) {
try {
const packages = childProcess.execSync(NPM_LIST_COMMAND, { cwd, encoding: 'utf8' });
return packages.split('\n').filter(Boolean);
} catch (error) {
console.error(`Error getting installed packages: ${error.message}`);
return [];
}
}
// Function to get package dependencies
function getPackageDependencies(filePath = path.join(CURRENT_WORKING_DIRECTORY, 'package.json')) {
try {
const packageJson = fs.readFileSync(filePath, 'utf8');
return JSON.parse(packageJson);
} catch (error) {
console.error(`Error getting package dependencies: ${error.message}`);
return {};
}
}
// Main function
async function main() {
// Get installed packages
const packages = getInstalledPackages();
// Get package dependencies
const packageJson = getPackageDependencies();
// Update dependencies and devDependencies
Object.keys(packageJson.dependencies).forEach((dependency) => {
packages.forEach((packageInfo) => {
if (packageInfo.includes(dependency + '@')) {
const version = packageInfo.split('@').pop().replace(' deduped', '');
packageJson.dependencies[dependency] = `~${version}`;
}
});
});
Object.keys(packageJson.devDependencies).forEach((devDependency) => {
packages.forEach((packageInfo) => {
if (packageInfo.includes(devDependency + '@')) {
const version = packageInfo.split('@').pop().replace(' deduped', '');
packageJson.devDependencies[devDependency] = `~${version}`;
}
});
});
// Log updated packageJson
console.log(packages);
console.log(JSON.stringify(packageJson, null, 4));
// Send response
const response = mime.lookup('text/html');
if (response) {
const html = `${JSON.stringify(packageJson, null, 4)}
`;
// Assuming a response function is available
$.mime({ [response]: html });
} else {
console.error('Unsupported MIME type');
}
}
// Run main function
main();
This code analyzes a project's package.json
file and updates dependency versions based on information from a list of installed packages.
Here's a breakdown:
Initialization:
npm list --dev
.package.json
file and parses it as JSON.Dependency Version Update:
package.json
file is updated to use a tilde (~
) prefix, indicating a version range.Output:
package.json
content as HTML to an external system (likely a testing environment) using $.mime
.In essence, this code automates the process of updating dependency versions in a project's package.json
file based on the actual versions installed in the project.