isolate-package 1.13.1 → 1.14.0-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -38
- package/dist/index.mjs +121 -132
- package/dist/index.mjs.map +1 -1
- package/dist/isolate-bin.mjs +121 -132
- package/dist/isolate-bin.mjs.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -210,30 +210,6 @@ Because the configuration loader depends on this setting, its output is not
|
|
|
210
210
|
affected by this setting. If you want to debug the configuration set
|
|
211
211
|
`DEBUG_ISOLATE_CONFIG=true` before you run `isolate`
|
|
212
212
|
|
|
213
|
-
### forceNpm
|
|
214
|
-
|
|
215
|
-
Type: `boolean`, default: `false`
|
|
216
|
-
|
|
217
|
-
By default the isolate process will generate output based on the package manager
|
|
218
|
-
that you are using for your monorepo. But your deployment target might not be
|
|
219
|
-
compatible with that package manager, or it might not be the best choice given
|
|
220
|
-
the available tooling.
|
|
221
|
-
|
|
222
|
-
Also, it should not really matter what package manager is used in de deployment
|
|
223
|
-
as long as the versions match your original lockfile.
|
|
224
|
-
|
|
225
|
-
By setting this option to `true` you are forcing the isolate output to use NPM.
|
|
226
|
-
A package-lock file will be generated based on the contents of node_modules and
|
|
227
|
-
therefore should match the versions in your original lockfile.
|
|
228
|
-
|
|
229
|
-
This way you can enjoy using PNPM or Yarn for your monorepo, while your
|
|
230
|
-
deployment uses NPM with modules locked to the same versions.
|
|
231
|
-
|
|
232
|
-
> !! Warning: Generating an NPM lockfile currently requires moving the
|
|
233
|
-
> node_modules from the root of the monorepo temporarily into the isolate
|
|
234
|
-
> directory. This will not be compatible with setups that run multiple isolation
|
|
235
|
-
> processes in parallel.
|
|
236
|
-
|
|
237
213
|
### buildDirName
|
|
238
214
|
|
|
239
215
|
Type: `string | undefined`, default: `undefined`
|
|
@@ -341,13 +317,8 @@ When you use the `targetPackagePath` option, this setting will be ignored.
|
|
|
341
317
|
## Lockfiles
|
|
342
318
|
|
|
343
319
|
The isolate process tries to generate an isolated / pruned lockfile for the
|
|
344
|
-
package manager that you use in your monorepo.
|
|
345
|
-
|
|
346
|
-
based on the installed versions in node_modules.
|
|
347
|
-
|
|
348
|
-
In case your package manager is not supported by your deployment target you can
|
|
349
|
-
also choose NPM to be used by setting the `makeNpmLockfile` to `true` in your
|
|
350
|
-
configuration.
|
|
320
|
+
package manager that you use in your monorepo. The strategy is different for
|
|
321
|
+
each package manager, with NPM currently being the least attractive.
|
|
351
322
|
|
|
352
323
|
### NPM
|
|
353
324
|
|
|
@@ -366,13 +337,8 @@ after Arborist has finished doing its thing.
|
|
|
366
337
|
|
|
367
338
|
### PNPM
|
|
368
339
|
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
It turns out, at least up to v10, that the isolated output has to be formatted
|
|
373
|
-
as a workspace itself, otherwise dependencies of internally linked packages are
|
|
374
|
-
not installed by PNPM. Therefore, the output looks a bit different from other
|
|
375
|
-
package managers:
|
|
340
|
+
For PNPM, the isolated output will be formatted as a workspace itself, otherwise
|
|
341
|
+
dependencies of internally linked packages are not installed by PNPM.
|
|
376
342
|
|
|
377
343
|
- Links are preserved
|
|
378
344
|
- Versions specifiers like "workspace:\*" are preserved
|
package/dist/index.mjs
CHANGED
|
@@ -5,9 +5,9 @@ import path19 from "node:path";
|
|
|
5
5
|
import { unique } from "remeda";
|
|
6
6
|
|
|
7
7
|
// src/lib/config.ts
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import
|
|
8
|
+
import fs8 from "fs-extra";
|
|
9
|
+
import assert2 from "node:assert";
|
|
10
|
+
import path6 from "node:path";
|
|
11
11
|
import { isEmpty } from "remeda";
|
|
12
12
|
|
|
13
13
|
// src/lib/logger.ts
|
|
@@ -137,16 +137,109 @@ async function readTypedJson(filePath) {
|
|
|
137
137
|
|
|
138
138
|
// src/lib/utils/pack.ts
|
|
139
139
|
import { exec } from "node:child_process";
|
|
140
|
-
import
|
|
140
|
+
import fs5 from "node:fs";
|
|
141
|
+
import path5 from "node:path";
|
|
142
|
+
|
|
143
|
+
// src/lib/package-manager/index.ts
|
|
144
|
+
import path4 from "node:path";
|
|
145
|
+
|
|
146
|
+
// src/lib/package-manager/helpers/infer-from-files.ts
|
|
147
|
+
import fs3 from "fs-extra";
|
|
148
|
+
import { execSync } from "node:child_process";
|
|
141
149
|
import path2 from "node:path";
|
|
142
|
-
|
|
150
|
+
|
|
151
|
+
// src/lib/package-manager/names.ts
|
|
152
|
+
var supportedPackageManagerNames = ["pnpm", "yarn", "npm"];
|
|
153
|
+
function getLockfileFileName(name) {
|
|
154
|
+
switch (name) {
|
|
155
|
+
case "pnpm":
|
|
156
|
+
return "pnpm-lock.yaml";
|
|
157
|
+
case "yarn":
|
|
158
|
+
return "yarn.lock";
|
|
159
|
+
case "npm":
|
|
160
|
+
return "package-lock.json";
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// src/lib/package-manager/helpers/infer-from-files.ts
|
|
165
|
+
function inferFromFiles(workspaceRoot) {
|
|
166
|
+
for (const name of supportedPackageManagerNames) {
|
|
167
|
+
const lockfileName = getLockfileFileName(name);
|
|
168
|
+
if (fs3.existsSync(path2.join(workspaceRoot, lockfileName))) {
|
|
169
|
+
return { name, version: getVersion(name) };
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (fs3.existsSync(path2.join(workspaceRoot, "npm-shrinkwrap.json"))) {
|
|
173
|
+
return { name: "npm", version: getVersion("npm") };
|
|
174
|
+
}
|
|
175
|
+
throw new Error(`Failed to detect package manager`);
|
|
176
|
+
}
|
|
177
|
+
function getVersion(packageManagerName) {
|
|
178
|
+
const buffer = execSync(`${packageManagerName} --version`);
|
|
179
|
+
return buffer.toString().trim();
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// src/lib/package-manager/helpers/infer-from-manifest.ts
|
|
183
|
+
import fs4 from "fs-extra";
|
|
184
|
+
import assert from "node:assert";
|
|
185
|
+
import path3 from "node:path";
|
|
186
|
+
function inferFromManifest(workspaceRoot) {
|
|
187
|
+
const log = useLogger();
|
|
188
|
+
const rootManifest = readTypedJsonSync(
|
|
189
|
+
path3.join(workspaceRoot, "package.json")
|
|
190
|
+
);
|
|
191
|
+
if (!rootManifest.packageManager) {
|
|
192
|
+
log.debug("No packageManager field found in root manifest");
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
const [name, version = "*"] = rootManifest.packageManager.split("@");
|
|
196
|
+
assert(
|
|
197
|
+
supportedPackageManagerNames.includes(name),
|
|
198
|
+
`Package manager "${name}" is not currently supported`
|
|
199
|
+
);
|
|
200
|
+
const lockfileName = getLockfileFileName(name);
|
|
201
|
+
assert(
|
|
202
|
+
fs4.existsSync(path3.join(workspaceRoot, lockfileName)),
|
|
203
|
+
`Manifest declares ${name} to be the packageManager, but failed to find ${lockfileName} in workspace root`
|
|
204
|
+
);
|
|
205
|
+
return { name, version };
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// src/lib/package-manager/index.ts
|
|
209
|
+
var packageManager;
|
|
210
|
+
function usePackageManager() {
|
|
211
|
+
if (!packageManager) {
|
|
212
|
+
throw Error(
|
|
213
|
+
"No package manager detected. Make sure to call detectPackageManager() before usePackageManager()"
|
|
214
|
+
);
|
|
215
|
+
}
|
|
216
|
+
return packageManager;
|
|
217
|
+
}
|
|
218
|
+
function detectPackageManager(workspaceRootDir) {
|
|
219
|
+
if (isRushWorkspace(workspaceRootDir)) {
|
|
220
|
+
packageManager = inferFromFiles(
|
|
221
|
+
path4.join(workspaceRootDir, "common/config/rush")
|
|
222
|
+
);
|
|
223
|
+
} else {
|
|
224
|
+
packageManager = inferFromManifest(workspaceRootDir) ?? inferFromFiles(workspaceRootDir);
|
|
225
|
+
}
|
|
226
|
+
return packageManager;
|
|
227
|
+
}
|
|
228
|
+
function shouldUsePnpmPack() {
|
|
229
|
+
const { name, version } = usePackageManager();
|
|
230
|
+
const majorVersion = parseInt(version.split(".")[0], 10);
|
|
231
|
+
return name === "pnpm" && majorVersion >= 8;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// src/lib/utils/pack.ts
|
|
235
|
+
async function pack(srcDir, dstDir) {
|
|
236
|
+
const log = useLogger();
|
|
143
237
|
const execOptions = {
|
|
144
238
|
maxBuffer: 10 * 1024 * 1024
|
|
145
239
|
};
|
|
146
|
-
const log = useLogger();
|
|
147
240
|
const previousCwd = process.cwd();
|
|
148
241
|
process.chdir(srcDir);
|
|
149
|
-
const stdout =
|
|
242
|
+
const stdout = shouldUsePnpmPack() ? await new Promise((resolve, reject) => {
|
|
150
243
|
exec(
|
|
151
244
|
`pnpm pack --pack-destination "${dstDir}"`,
|
|
152
245
|
execOptions,
|
|
@@ -170,9 +263,9 @@ async function pack(srcDir, dstDir, usePnpmPack) {
|
|
|
170
263
|
}
|
|
171
264
|
);
|
|
172
265
|
});
|
|
173
|
-
const fileName =
|
|
174
|
-
const filePath =
|
|
175
|
-
if (!
|
|
266
|
+
const fileName = path5.basename(stdout.trim());
|
|
267
|
+
const filePath = path5.join(dstDir, fileName);
|
|
268
|
+
if (!fs5.existsSync(filePath)) {
|
|
176
269
|
log.error(
|
|
177
270
|
`The response from pack could not be resolved to an existing file: ${filePath}`
|
|
178
271
|
);
|
|
@@ -184,21 +277,21 @@ async function pack(srcDir, dstDir, usePnpmPack) {
|
|
|
184
277
|
}
|
|
185
278
|
|
|
186
279
|
// src/lib/utils/unpack.ts
|
|
187
|
-
import
|
|
280
|
+
import fs6 from "fs-extra";
|
|
188
281
|
import tar from "tar-fs";
|
|
189
282
|
import { createGunzip } from "zlib";
|
|
190
283
|
async function unpack(filePath, unpackDir) {
|
|
191
284
|
await new Promise((resolve, reject) => {
|
|
192
|
-
|
|
285
|
+
fs6.createReadStream(filePath).pipe(createGunzip()).pipe(tar.extract(unpackDir)).on("finish", () => resolve()).on("error", (err) => reject(err));
|
|
193
286
|
});
|
|
194
287
|
}
|
|
195
288
|
|
|
196
289
|
// src/lib/utils/yaml.ts
|
|
197
|
-
import
|
|
290
|
+
import fs7 from "fs-extra";
|
|
198
291
|
import yaml from "yaml";
|
|
199
292
|
function readTypedYamlSync(filePath) {
|
|
200
293
|
try {
|
|
201
|
-
const rawContent =
|
|
294
|
+
const rawContent = fs7.readFileSync(filePath, "utf-8");
|
|
202
295
|
const data = yaml.parse(rawContent);
|
|
203
296
|
return data;
|
|
204
297
|
} catch (err) {
|
|
@@ -208,7 +301,7 @@ function readTypedYamlSync(filePath) {
|
|
|
208
301
|
}
|
|
209
302
|
}
|
|
210
303
|
function writeTypedYamlSync(filePath, content) {
|
|
211
|
-
|
|
304
|
+
fs7.writeFileSync(filePath, yaml.stringify(content), "utf-8");
|
|
212
305
|
}
|
|
213
306
|
|
|
214
307
|
// src/lib/config.ts
|
|
@@ -249,12 +342,12 @@ function resolveConfig() {
|
|
|
249
342
|
}
|
|
250
343
|
setLogLevel(process.env.DEBUG_ISOLATE_CONFIG ? "debug" : "info");
|
|
251
344
|
const log = useLogger();
|
|
252
|
-
const configFilePath =
|
|
345
|
+
const configFilePath = path6.join(process.cwd(), CONFIG_FILE_NAME);
|
|
253
346
|
if (_user_defined_config) {
|
|
254
347
|
log.debug(`Using user defined config:`, inspectValue(_user_defined_config));
|
|
255
348
|
} else {
|
|
256
349
|
log.debug(`Attempting to load config from ${configFilePath}`);
|
|
257
|
-
_user_defined_config =
|
|
350
|
+
_user_defined_config = fs8.existsSync(configFilePath) ? readTypedJsonSync(configFilePath) : {};
|
|
258
351
|
}
|
|
259
352
|
const foreignKeys = Object.keys(_user_defined_config).filter(
|
|
260
353
|
(key) => !validConfigKeys.includes(key)
|
|
@@ -272,92 +365,6 @@ function resolveConfig() {
|
|
|
272
365
|
return config;
|
|
273
366
|
}
|
|
274
367
|
|
|
275
|
-
// src/lib/package-manager/index.ts
|
|
276
|
-
import path6 from "node:path";
|
|
277
|
-
|
|
278
|
-
// src/lib/package-manager/helpers/infer-from-files.ts
|
|
279
|
-
import fs7 from "fs-extra";
|
|
280
|
-
import { execSync } from "node:child_process";
|
|
281
|
-
import path4 from "node:path";
|
|
282
|
-
|
|
283
|
-
// src/lib/package-manager/names.ts
|
|
284
|
-
var supportedPackageManagerNames = ["pnpm", "yarn", "npm"];
|
|
285
|
-
function getLockfileFileName(name) {
|
|
286
|
-
switch (name) {
|
|
287
|
-
case "pnpm":
|
|
288
|
-
return "pnpm-lock.yaml";
|
|
289
|
-
case "yarn":
|
|
290
|
-
return "yarn.lock";
|
|
291
|
-
case "npm":
|
|
292
|
-
return "package-lock.json";
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
// src/lib/package-manager/helpers/infer-from-files.ts
|
|
297
|
-
function inferFromFiles(workspaceRoot) {
|
|
298
|
-
for (const name of supportedPackageManagerNames) {
|
|
299
|
-
const lockfileName = getLockfileFileName(name);
|
|
300
|
-
if (fs7.existsSync(path4.join(workspaceRoot, lockfileName))) {
|
|
301
|
-
return { name, version: getVersion(name) };
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
if (fs7.existsSync(path4.join(workspaceRoot, "npm-shrinkwrap.json"))) {
|
|
305
|
-
return { name: "npm", version: getVersion("npm") };
|
|
306
|
-
}
|
|
307
|
-
throw new Error(`Failed to detect package manager`);
|
|
308
|
-
}
|
|
309
|
-
function getVersion(packageManagerName) {
|
|
310
|
-
const buffer = execSync(`${packageManagerName} --version`);
|
|
311
|
-
return buffer.toString().trim();
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
// src/lib/package-manager/helpers/infer-from-manifest.ts
|
|
315
|
-
import fs8 from "fs-extra";
|
|
316
|
-
import assert2 from "node:assert";
|
|
317
|
-
import path5 from "node:path";
|
|
318
|
-
function inferFromManifest(workspaceRoot) {
|
|
319
|
-
const log = useLogger();
|
|
320
|
-
const rootManifest = readTypedJsonSync(
|
|
321
|
-
path5.join(workspaceRoot, "package.json")
|
|
322
|
-
);
|
|
323
|
-
if (!rootManifest.packageManager) {
|
|
324
|
-
log.debug("No packageManager field found in root manifest");
|
|
325
|
-
return;
|
|
326
|
-
}
|
|
327
|
-
const [name, version = "*"] = rootManifest.packageManager.split("@");
|
|
328
|
-
assert2(
|
|
329
|
-
supportedPackageManagerNames.includes(name),
|
|
330
|
-
`Package manager "${name}" is not currently supported`
|
|
331
|
-
);
|
|
332
|
-
const lockfileName = getLockfileFileName(name);
|
|
333
|
-
assert2(
|
|
334
|
-
fs8.existsSync(path5.join(workspaceRoot, lockfileName)),
|
|
335
|
-
`Manifest declares ${name} to be the packageManager, but failed to find ${lockfileName} in workspace root`
|
|
336
|
-
);
|
|
337
|
-
return { name, version };
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
// src/lib/package-manager/index.ts
|
|
341
|
-
var packageManager;
|
|
342
|
-
function usePackageManager() {
|
|
343
|
-
if (!packageManager) {
|
|
344
|
-
throw Error(
|
|
345
|
-
"No package manager detected. Make sure to call detectPackageManager() before usePackageManager()"
|
|
346
|
-
);
|
|
347
|
-
}
|
|
348
|
-
return packageManager;
|
|
349
|
-
}
|
|
350
|
-
function detectPackageManager(workspaceRootDir) {
|
|
351
|
-
if (isRushWorkspace(workspaceRootDir)) {
|
|
352
|
-
packageManager = inferFromFiles(
|
|
353
|
-
path6.join(workspaceRootDir, "common/config/rush")
|
|
354
|
-
);
|
|
355
|
-
} else {
|
|
356
|
-
packageManager = inferFromManifest(workspaceRootDir) ?? inferFromFiles(workspaceRootDir);
|
|
357
|
-
}
|
|
358
|
-
return packageManager;
|
|
359
|
-
}
|
|
360
|
-
|
|
361
368
|
// src/lib/lockfile/helpers/generate-npm-lockfile.ts
|
|
362
369
|
import Arborist from "@npmcli/arborist";
|
|
363
370
|
import fs9 from "fs-extra";
|
|
@@ -462,7 +469,6 @@ async function generatePnpmLockfile({
|
|
|
462
469
|
internalDepPackageNames.map((name) => {
|
|
463
470
|
const pkg = packagesRegistry[name];
|
|
464
471
|
assert3(pkg, `Package ${name} not found in packages registry`);
|
|
465
|
-
console.log("pkg.rootRelativeDir", pkg.rootRelativeDir);
|
|
466
472
|
return [name, pkg.rootRelativeDir];
|
|
467
473
|
})
|
|
468
474
|
);
|
|
@@ -563,15 +569,6 @@ async function processLockfile({
|
|
|
563
569
|
targetPackageManifest
|
|
564
570
|
}) {
|
|
565
571
|
const log = useLogger();
|
|
566
|
-
const { forceNpm } = useConfig();
|
|
567
|
-
if (forceNpm) {
|
|
568
|
-
log.info("Forcing to use NPM for isolate output");
|
|
569
|
-
await generateNpmLockfile({
|
|
570
|
-
workspaceRootDir,
|
|
571
|
-
isolateDir
|
|
572
|
-
});
|
|
573
|
-
return true;
|
|
574
|
-
}
|
|
575
572
|
const { name, version } = usePackageManager();
|
|
576
573
|
let usedFallbackToNpm = false;
|
|
577
574
|
switch (name) {
|
|
@@ -688,12 +685,11 @@ function adaptManifestInternalDeps({
|
|
|
688
685
|
// src/lib/manifest/helpers/adapt-internal-package-manifests.ts
|
|
689
686
|
async function adaptInternalPackageManifests(internalPackageNames, packagesRegistry, isolateDir) {
|
|
690
687
|
const packageManager2 = usePackageManager();
|
|
691
|
-
const { forceNpm } = useConfig();
|
|
692
688
|
await Promise.all(
|
|
693
689
|
internalPackageNames.map(async (packageName) => {
|
|
694
690
|
const { manifest, rootRelativeDir } = packagesRegistry[packageName];
|
|
695
691
|
const strippedManifest = omit(manifest, ["scripts", "devDependencies"]);
|
|
696
|
-
const outputManifest = packageManager2.name === "pnpm"
|
|
692
|
+
const outputManifest = packageManager2.name === "pnpm" ? (
|
|
697
693
|
/**
|
|
698
694
|
* For PNPM the output itself is a workspace so we can preserve the specifiers
|
|
699
695
|
* with "workspace:*" in the output manifest.
|
|
@@ -743,9 +739,9 @@ async function adaptTargetPackageManifest({
|
|
|
743
739
|
workspaceRootDir
|
|
744
740
|
}) {
|
|
745
741
|
const packageManager2 = usePackageManager();
|
|
746
|
-
const { includeDevDependencies,
|
|
742
|
+
const { includeDevDependencies, pickFromScripts, omitFromScripts } = useConfig();
|
|
747
743
|
const inputManifest = includeDevDependencies ? manifest : omit2(manifest, ["devDependencies"]);
|
|
748
|
-
const adaptedManifest = packageManager2.name === "pnpm"
|
|
744
|
+
const adaptedManifest = packageManager2.name === "pnpm" ? (
|
|
749
745
|
/**
|
|
750
746
|
* For PNPM the output itself is a workspace so we can preserve the specifiers
|
|
751
747
|
* with "workspace:*" in the output manifest, but we do want to adopt the
|
|
@@ -817,25 +813,15 @@ async function packDependencies({
|
|
|
817
813
|
}) {
|
|
818
814
|
const log = useLogger();
|
|
819
815
|
const packedFileByName = {};
|
|
820
|
-
const { name, version } = usePackageManager();
|
|
821
|
-
const versionMajor = parseInt(version.split(".")[0], 10);
|
|
822
|
-
const usePnpmPack = name === "pnpm" && versionMajor >= 8;
|
|
823
|
-
if (usePnpmPack) {
|
|
824
|
-
log.debug("Using PNPM pack instead of NPM pack");
|
|
825
|
-
}
|
|
826
816
|
for (const dependency of internalPackageNames) {
|
|
827
817
|
const def = packagesRegistry[dependency];
|
|
828
818
|
assert4(dependency, `Failed to find package definition for ${dependency}`);
|
|
829
|
-
const { name
|
|
830
|
-
if (packedFileByName[
|
|
831
|
-
log.debug(`Skipping ${
|
|
819
|
+
const { name } = def.manifest;
|
|
820
|
+
if (packedFileByName[name]) {
|
|
821
|
+
log.debug(`Skipping ${name} because it has already been packed`);
|
|
832
822
|
continue;
|
|
833
823
|
}
|
|
834
|
-
packedFileByName[
|
|
835
|
-
def.absoluteDir,
|
|
836
|
-
packDestinationDir,
|
|
837
|
-
usePnpmPack
|
|
838
|
-
);
|
|
824
|
+
packedFileByName[name] = await pack(def.absoluteDir, packDestinationDir);
|
|
839
825
|
}
|
|
840
826
|
return packedFileByName;
|
|
841
827
|
}
|
|
@@ -1062,6 +1048,9 @@ async function isolate(options = {}) {
|
|
|
1062
1048
|
packageManager2.name,
|
|
1063
1049
|
packageManager2.version
|
|
1064
1050
|
);
|
|
1051
|
+
if (shouldUsePnpmPack()) {
|
|
1052
|
+
log.debug("Use PNPM pack instead of NPM pack");
|
|
1053
|
+
}
|
|
1065
1054
|
const packagesRegistry = await createPackagesRegistry(
|
|
1066
1055
|
workspaceRootDir,
|
|
1067
1056
|
config.workspacePackages
|
|
@@ -1115,7 +1104,7 @@ async function isolate(options = {}) {
|
|
|
1115
1104
|
manifest.packageManager = `npm@${npmVersion}`;
|
|
1116
1105
|
await writeManifest(isolateDir, manifest);
|
|
1117
1106
|
}
|
|
1118
|
-
if (packageManager2.name === "pnpm"
|
|
1107
|
+
if (packageManager2.name === "pnpm") {
|
|
1119
1108
|
if (isRushWorkspace(workspaceRootDir)) {
|
|
1120
1109
|
const packagesFolderNames = unique(
|
|
1121
1110
|
internalPackageNames.map(
|