private _emitPackageJson()

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");
    }
  }