Skip to content

Commit

Permalink
fix: get npm version registry not work && add get npm info cache (#164)
Browse files Browse the repository at this point in the history
* fix: get npm version registry not work && add get npm info cache

* export getNpmPackageInfo function

* fix: lint error
  • Loading branch information
caohuilin authored Oct 16, 2024
1 parent b5cf846 commit 523d7ec
Show file tree
Hide file tree
Showing 6 changed files with 64 additions and 27 deletions.
7 changes: 7 additions & 0 deletions .changeset/dull-lies-sneeze.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@modern-js/codesmith": patch
---

fix: get npm version registry not work && add get npm info cache

fix: 修复获取 npm 版本 registry 不生效 && 新增获取 npm 信息缓存
42 changes: 42 additions & 0 deletions packages/core/src/utils/getNpmPackageInfo.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import { NPM_API_TIMEOUT } from '@/constants';
import axios from 'axios';
import { getNpmRegistry } from './getNpmRegistry';
import { timeoutPromise } from './timeoutPromise';

interface Options {
registryUrl?: string;
}

interface PackageInfo {
version: string;
dist: {
tarball: string;
};
}

const NpmPackageInfoCache = new Map<string, PackageInfo>();

export async function getNpmPackageInfo(
pkgName: string,
pkgVersion: string,
options?: Options,
): Promise<PackageInfo> {
const packageName = `${pkgName}/${pkgVersion}`;
const packageInfo = NpmPackageInfoCache.get(packageName);
if (packageInfo) {
return packageInfo;
}
const { registryUrl = await getNpmRegistry() } = options || {};

const url = `${registryUrl}/${pkgName}/${pkgVersion}`;

const response = await timeoutPromise(
axios.get(url),
NPM_API_TIMEOUT,
`Get npm package info of '${pkgName}'`,
);

NpmPackageInfoCache.set(packageName, response.data);

return response.data;
}
6 changes: 6 additions & 0 deletions packages/core/src/utils/getNpmRegistry.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { execa } from '@modern-js/codesmith-utils/execa';

export async function getNpmRegistry() {
const { stdout } = await execa('npm', ['config', 'get', 'registry']);
return stdout.replace(/\/$/, '') || 'https://registry.npmjs.org';
}
16 changes: 3 additions & 13 deletions packages/core/src/utils/getNpmTarballUrl.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
import { NPM_API_TIMEOUT } from '@/constants';
import axios from 'axios';
import { timeoutPromise } from './timeoutPromise';
import { getNpmPackageInfo } from './getNpmPackageInfo';

interface Options {
registryUrl?: string;
Expand All @@ -11,15 +9,7 @@ export async function getNpmTarballUrl(
pkgVersion: string,
options?: Options,
): Promise<string> {
const { registryUrl = 'https://registry.npmjs.org' } = options || {};
const packageInfo = await getNpmPackageInfo(pkgName, pkgVersion, options);

const url = `${registryUrl}/${pkgName}/${pkgVersion}`;

const response = await timeoutPromise(
axios.get(url),
NPM_API_TIMEOUT,
`Get npm tarball of '${pkgName}'`,
);

return response.data.dist.tarball;
return packageInfo.dist.tarball;
}
18 changes: 4 additions & 14 deletions packages/core/src/utils/getNpmVersion.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
import { NPM_API_TIMEOUT } from '@/constants';
import axios from 'axios';
import { timeoutPromise } from './timeoutPromise';
import { getNpmPackageInfo } from './getNpmPackageInfo';

/**
* get package version
Expand All @@ -18,16 +16,8 @@ export async function getNpmVersion(
packageName: string,
options?: Options,
): Promise<string> {
const { version = 'latest', registryUrl = 'https://registry.npmjs.org' } =
options || {};
const { version = 'latest' } = options || {};
const packageInfo = await getNpmPackageInfo(packageName, version, options);

const url = `${registryUrl}/${packageName}/${version}`;

const response = await timeoutPromise(
axios.get(url),
NPM_API_TIMEOUT,
`Get npm version of '${packageName}'`,
);

return response.data.version;
return packageInfo.version;
}
2 changes: 2 additions & 0 deletions packages/core/src/utils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,5 @@ export { timeoutPromise } from './timeoutPromise';
export { downloadPackage, getGeneratorVersion } from './downloadPackage';
export { getNpmVersion } from './getNpmVersion';
export { getPackageInfo } from './getPackageInfo';
export { getNpmRegistry } from './getNpmRegistry';
export { getNpmPackageInfo } from './getNpmPackageInfo';

0 comments on commit 523d7ec

Please sign in to comment.