install-pkg.mjs 878 B

123456789101112131415161718192021222324252627282930313233
  1. import { installPackage } from '@antfu/install-pkg';
  2. import { sleep } from '@antfu/utils';
  3. import { cyan } from 'kolorist';
  4. import { warnOnce } from './warn.mjs';
  5. let pending;
  6. const tasks = {};
  7. async function tryInstallPkg(name, autoInstall) {
  8. if (pending) {
  9. await pending;
  10. }
  11. if (!tasks[name]) {
  12. console.log(cyan(`Installing ${name}...`));
  13. if (typeof autoInstall === "function") {
  14. tasks[name] = pending = autoInstall(name).then(() => sleep(300)).finally(() => {
  15. pending = void 0;
  16. });
  17. } else {
  18. tasks[name] = pending = installPackage(name, {
  19. dev: true,
  20. preferOffline: true
  21. }).then(() => sleep(300)).catch((e) => {
  22. warnOnce(`Failed to install ${name}`);
  23. console.error(e);
  24. }).finally(() => {
  25. pending = void 0;
  26. });
  27. }
  28. }
  29. return tasks[name];
  30. }
  31. export { tryInstallPkg };