64 lines
1.8 KiB
TypeScript
64 lines
1.8 KiB
TypeScript
import * as fs from "fs";
|
|
import { join as pathJoin } from "path";
|
|
import * as child_process from "child_process";
|
|
import chalk from "chalk";
|
|
|
|
export function npmInstall(params: { packageJsonDirPath: string }) {
|
|
const { packageJsonDirPath } = params;
|
|
|
|
const packageManagerBinName = (() => {
|
|
const packageMangers = [
|
|
{
|
|
binName: "yarn",
|
|
lockFileBasename: "yarn.lock"
|
|
},
|
|
{
|
|
binName: "npm",
|
|
lockFileBasename: "package-lock.json"
|
|
},
|
|
{
|
|
binName: "pnpm",
|
|
lockFileBasename: "pnpm-lock.yaml"
|
|
},
|
|
{
|
|
binName: "bun",
|
|
lockFileBasename: "bun.lockdb"
|
|
}
|
|
] as const;
|
|
|
|
for (const packageManager of packageMangers) {
|
|
if (
|
|
fs.existsSync(
|
|
pathJoin(packageJsonDirPath, packageManager.lockFileBasename)
|
|
) ||
|
|
fs.existsSync(pathJoin(process.cwd(), packageManager.lockFileBasename))
|
|
) {
|
|
return packageManager.binName;
|
|
}
|
|
}
|
|
|
|
return undefined;
|
|
})();
|
|
|
|
install_dependencies: {
|
|
if (packageManagerBinName === undefined) {
|
|
break install_dependencies;
|
|
}
|
|
|
|
console.log(`Installing the new dependencies...`);
|
|
|
|
try {
|
|
child_process.execSync(`${packageManagerBinName} install`, {
|
|
cwd: packageJsonDirPath,
|
|
stdio: "inherit"
|
|
});
|
|
} catch {
|
|
console.log(
|
|
chalk.yellow(
|
|
`\`${packageManagerBinName} install\` failed, continuing anyway...`
|
|
)
|
|
);
|
|
}
|
|
}
|
|
}
|