diff --git a/.changeset/nasty-bikes-double.md b/.changeset/nasty-bikes-double.md new file mode 100644 index 000000000..ed46116c1 --- /dev/null +++ b/.changeset/nasty-bikes-double.md @@ -0,0 +1,7 @@ +--- +'astro': patch +--- + +Prevent astro check cache issues + +`astro check` hits cache issues in 3.0 causing it never to work on the first try. diff --git a/packages/astro/package.json b/packages/astro/package.json index de7ae6b59..1ef453ab3 100644 --- a/packages/astro/package.json +++ b/packages/astro/package.json @@ -159,6 +159,7 @@ "preferred-pm": "^3.0.3", "prompts": "^2.4.2", "rehype": "^12.0.1", + "resolve": "^1.22.4", "semver": "^7.5.4", "server-destroy": "^1.0.1", "sharp": "^0.32.5", @@ -195,6 +196,7 @@ "@types/mime": "^3.0.1", "@types/mocha": "^10.0.1", "@types/prompts": "^2.4.4", + "@types/resolve": "^1.20.2", "@types/send": "^0.17.1", "@types/server-destroy": "^1.0.1", "@types/unist": "^2.0.7", diff --git a/packages/astro/src/cli/install-package.ts b/packages/astro/src/cli/install-package.ts index bc3f2df1f..e51c46f20 100644 --- a/packages/astro/src/cli/install-package.ts +++ b/packages/astro/src/cli/install-package.ts @@ -1,9 +1,9 @@ import boxen from 'boxen'; import { execa } from 'execa'; import { bold, cyan, dim, magenta } from 'kleur/colors'; -import { createRequire } from 'node:module'; import ora from 'ora'; import prompts from 'prompts'; +import resolvePackage from 'resolve'; import whichPm from 'which-pm'; import { type Logger } from '../core/logger/core.js'; @@ -18,11 +18,9 @@ export async function getPackage( options: GetPackageOptions, otherDeps: string[] = [] ): Promise { - const require = createRequire(options.cwd ?? process.cwd()); - let packageImport; try { - require.resolve(packageName, { paths: [options.cwd ?? process.cwd()] }); + await tryResolve(packageName, options.cwd ?? process.cwd()); // The `require.resolve` is required as to avoid Node caching the failed `import` packageImport = await import(packageName); @@ -43,6 +41,20 @@ export async function getPackage( return packageImport as T; } +function tryResolve(packageName: string, cwd: string) { + return new Promise((resolve, reject) => { + resolvePackage(packageName, { + basedir: cwd, + }, (err) => { + if(err) { + reject(err); + } else { + resolve(0); + } + }); + }); +} + function getInstallCommand(packages: string[], packageManager: string) { switch (packageManager) { case 'npm': diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 10e4098b6..c256b06fd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -602,6 +602,9 @@ importers: rehype: specifier: ^12.0.1 version: 12.0.1 + resolve: + specifier: ^1.22.4 + version: 1.22.4 semver: specifier: ^7.5.4 version: 7.5.4 @@ -705,6 +708,9 @@ importers: '@types/prompts': specifier: ^2.4.4 version: 2.4.4 + '@types/resolve': + specifier: ^1.20.2 + version: 1.20.2 '@types/send': specifier: ^0.17.1 version: 0.17.1 @@ -8364,7 +8370,7 @@ packages: babel-plugin-transform-hook-names: 1.0.2 debug: 4.3.4(supports-color@8.1.1) kolorist: 1.8.0 - resolve: 1.22.2 + resolve: 1.22.4 transitivePeerDependencies: - preact - supports-color @@ -12470,16 +12476,10 @@ packages: ci-info: 3.8.0 dev: true - /is-core-module@2.12.0: - resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==} - dependencies: - has: 1.0.3 - /is-core-module@2.13.0: resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} dependencies: has: 1.0.3 - dev: false /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} @@ -14286,7 +14286,7 @@ packages: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.2 + resolve: 1.22.4 semver: 5.7.2 validate-npm-package-license: 3.0.4 dev: true @@ -14888,7 +14888,7 @@ packages: postcss: 8.4.28 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.2 + resolve: 1.22.4 /postcss-initial@4.0.1(postcss@8.4.28): resolution: {integrity: sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==} @@ -15705,14 +15705,6 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - /resolve@1.22.2: - resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} - hasBin: true - dependencies: - is-core-module: 2.12.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - /resolve@1.22.4: resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} hasBin: true @@ -15720,7 +15712,6 @@ packages: is-core-module: 2.13.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: false /restore-cursor@4.0.0: resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} @@ -16603,7 +16594,7 @@ packages: postcss-load-config: 4.0.1(postcss@8.4.28) postcss-nested: 6.0.1(postcss@8.4.28) postcss-selector-parser: 6.0.13 - resolve: 1.22.2 + resolve: 1.22.4 sucrase: 3.32.0 transitivePeerDependencies: - ts-node @@ -16830,7 +16821,7 @@ packages: '@types/json5': 0.0.30 '@types/resolve': 1.20.2 json5: 2.2.3 - resolve: 1.22.2 + resolve: 1.22.4 strip-bom: 4.0.0 type-fest: 3.0.0