fix(devkit): return null for ESM dependencies instead of throwing error in ensurePackage (#17195)
This commit is contained in:
parent
fe4682a0e7
commit
6d586dd78f
@ -1161,6 +1161,7 @@ ensurePackage(tree, '@nx/jest', nxVersion);
|
|||||||
|
|
||||||
This install the @nx/jest@<nxVersion> and return the module
|
This install the @nx/jest@<nxVersion> and return the module
|
||||||
When running with --dryRun, the function will throw when dependencies are missing.
|
When running with --dryRun, the function will throw when dependencies are missing.
|
||||||
|
Returns null for ESM dependencies. Import them with a dynamic import instead.
|
||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
@ -1180,11 +1181,12 @@ When running with --dryRun, the function will throw when dependencies are missin
|
|||||||
▸ **ensurePackage**<`T`\>(`pkg`, `version`): `T`
|
▸ **ensurePackage**<`T`\>(`pkg`, `version`): `T`
|
||||||
|
|
||||||
Ensure that dependencies and devDependencies from package.json are installed at the required versions.
|
Ensure that dependencies and devDependencies from package.json are installed at the required versions.
|
||||||
|
Returns null for ESM dependencies. Import them with a dynamic import instead.
|
||||||
|
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
ensurePackage(tree, '@nx/jest', nxVersion);
|
ensurePackage('@nx/jest', nxVersion);
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Type parameters
|
#### Type parameters
|
||||||
|
|||||||
@ -1161,6 +1161,7 @@ ensurePackage(tree, '@nx/jest', nxVersion);
|
|||||||
|
|
||||||
This install the @nx/jest@<nxVersion> and return the module
|
This install the @nx/jest@<nxVersion> and return the module
|
||||||
When running with --dryRun, the function will throw when dependencies are missing.
|
When running with --dryRun, the function will throw when dependencies are missing.
|
||||||
|
Returns null for ESM dependencies. Import them with a dynamic import instead.
|
||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
@ -1180,11 +1181,12 @@ When running with --dryRun, the function will throw when dependencies are missin
|
|||||||
▸ **ensurePackage**<`T`\>(`pkg`, `version`): `T`
|
▸ **ensurePackage**<`T`\>(`pkg`, `version`): `T`
|
||||||
|
|
||||||
Ensure that dependencies and devDependencies from package.json are installed at the required versions.
|
Ensure that dependencies and devDependencies from package.json are installed at the required versions.
|
||||||
|
Returns null for ESM dependencies. Import them with a dynamic import instead.
|
||||||
|
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
ensurePackage(tree, '@nx/jest', nxVersion);
|
ensurePackage('@nx/jest', nxVersion);
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Type parameters
|
#### Type parameters
|
||||||
|
|||||||
@ -389,6 +389,7 @@ const packageMapCache = new Map<string, any>();
|
|||||||
* ```
|
* ```
|
||||||
* This install the @nx/jest@<nxVersion> and return the module
|
* This install the @nx/jest@<nxVersion> and return the module
|
||||||
* When running with --dryRun, the function will throw when dependencies are missing.
|
* When running with --dryRun, the function will throw when dependencies are missing.
|
||||||
|
* Returns null for ESM dependencies. Import them with a dynamic import instead.
|
||||||
*
|
*
|
||||||
* @param tree the file system tree
|
* @param tree the file system tree
|
||||||
* @param pkg the package to check (e.g. @nx/jest)
|
* @param pkg the package to check (e.g. @nx/jest)
|
||||||
@ -404,11 +405,13 @@ export function ensurePackage(
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Ensure that dependencies and devDependencies from package.json are installed at the required versions.
|
* Ensure that dependencies and devDependencies from package.json are installed at the required versions.
|
||||||
|
* Returns null for ESM dependencies. Import them with a dynamic import instead.
|
||||||
*
|
*
|
||||||
* For example:
|
* For example:
|
||||||
* ```typescript
|
* ```typescript
|
||||||
* ensurePackage(tree, '@nx/jest', nxVersion)
|
* ensurePackage('@nx/jest', nxVersion)
|
||||||
* ```
|
* ```
|
||||||
|
*
|
||||||
* @param pkg the package to install and require
|
* @param pkg the package to install and require
|
||||||
* @param version the version to install if the package doesn't exist already
|
* @param version the version to install if the package doesn't exist already
|
||||||
*/
|
*/
|
||||||
@ -440,7 +443,11 @@ export function ensurePackage<T extends any = any>(
|
|||||||
try {
|
try {
|
||||||
return require(pkg);
|
return require(pkg);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (e.code !== 'MODULE_NOT_FOUND') {
|
if (e.code === 'ERR_REQUIRE_ESM') {
|
||||||
|
// The package is installed, but is an ESM package.
|
||||||
|
// The consumer of this function can import it as needed.
|
||||||
|
return null;
|
||||||
|
} else if (e.code !== 'MODULE_NOT_FOUND') {
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -474,13 +481,23 @@ export function ensurePackage<T extends any = any>(
|
|||||||
// Re-initialize the added paths into require
|
// Re-initialize the added paths into require
|
||||||
(Module as any)._initPaths();
|
(Module as any)._initPaths();
|
||||||
|
|
||||||
const result = require(require.resolve(pkg, {
|
try {
|
||||||
paths: [tempDir],
|
const result = require(require.resolve(pkg, {
|
||||||
}));
|
paths: [tempDir],
|
||||||
|
}));
|
||||||
|
|
||||||
packageMapCache.set(pkg, result);
|
packageMapCache.set(pkg, result);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
} catch (e) {
|
||||||
|
if (e.code === 'ERR_REQUIRE_ESM') {
|
||||||
|
// The package is installed, but is an ESM package.
|
||||||
|
// The consumer of this function can import it as needed.
|
||||||
|
packageMapCache.set(pkg, null);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function addToNodePath(dir: string) {
|
function addToNodePath(dir: string) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user