in packages/monorepo/src/components/nx-configurator.ts [452:519]
private _emitPackageJson() {
if (
!ProjectUtils.isNamedInstanceOf(this.project, NodeProject) &&
!this.project.tryFindFile("package.json")
) {
new JsonFile(this.project, "package.json", {
obj: {
devDependencies: {
...this.nxPlugins,
nx: "^19",
"@nx/devkit": "^19",
},
private: true,
engines: {
node: ">=16",
pnpm: ">=8 <9",
},
scripts: Object.fromEntries(
this.project.tasks.all
.filter((t) => t.name !== "install")
.map((c) => [
c.name,
!this.project.ejected
? NodePackageUtils.command.projen(
NodePackageManager.PNPM,
c.name
)
: `scripts/run-task ${c.name}`,
])
),
},
}).synthesize();
}
if (
!ProjectUtils.isNamedInstanceOf(this.project, NodeProject) &&
!this.project.tryFindFile("pnpm-workspace.yaml")
) {
new YamlFile(this.project, "pnpm-workspace.yaml", {
obj: {
packages: this.project.subprojects
.filter((p) => ProjectUtils.isNamedInstanceOf(p, NodeProject))
.map((p) => path.relative(this.project.outdir, p.outdir)),
},
}).synthesize();
}
if (
!ProjectUtils.isNamedInstanceOf(this.project, NodeProject) &&
!this.project.tryFindFile(".npmrc")
) {
new IniFile(this.project, ".npmrc", {
obj: {
"resolution-mode": "highest",
yes: "true",
"prefer-workspace-packages": "true",
"link-workspace-packages": "true",
},
}).synthesize();
} else if (
ProjectUtils.isNamedInstanceOf(this.project, NodeProject) &&
this.project.package.packageManager === NodePackageManager.PNPM
) {
this.project.npmrc.addConfig("prefer-workspace-packages", "true");
this.project.npmrc.addConfig("link-workspace-packages", "true");
this.project.npmrc.addConfig("yes", "true");
}
}