{"id":286,"date":"2026-10-16T10:13:22","date_gmt":"2026-10-16T02:13:22","guid":{"rendered":"https:\/\/yykcj.com\/?p=286"},"modified":"2026-10-16T10:13:22","modified_gmt":"2026-10-16T02:13:22","slug":"monorepo-%e5%b7%a5%e7%a8%8b%e5%8c%96%e5%ae%9e%e6%88%98%ef%bc%9aturborepo-%e4%b8%8e-nx-%e6%b7%b1%e5%ba%a6%e9%80%89%e5%9e%8b%e5%8f%8a%e9%85%8d%e7%bd%ae%e6%8c%87%e5%8d%97","status":"publish","type":"post","link":"https:\/\/yykcj.com\/?p=286","title":{"rendered":"Monorepo \u5de5\u7a0b\u5316\u5b9e\u6218\uff1aTurborepo \u4e0e Nx \u6df1\u5ea6\u9009\u578b\u53ca\u914d\u7f6e\u6307\u5357"},"content":{"rendered":"<h2>\u4e00\u3001\u4e3a\u4ec0\u4e48 Monorepo \u53c8\u706b\u4e86\uff1f<\/h2>\n<p>\u8fc7\u53bb\u51e0\u5e74\uff0c\u524d\u7aef\u5de5\u7a0b\u5316\u7ecf\u5386\u4e86\u4ece\u300c\u5355\u4ed3\u5e93\u5355\u5e94\u7528\u300d\u5230\u300c\u591a\u4ed3\u5e93\u591a\u5e94\u7528\u300d\u7684\u62c6\u5206\uff0c\u5982\u4eca\u53c8\u56de\u5f52\u5230\u300c\u5355\u4ed3\u5e93\u591a\u5e94\u7528\u300d\u7684 Monorepo \u6a21\u5f0f\u3002\u8fd9\u4e0d\u662f\u7b80\u5355\u7684\u5faa\u73af\uff0c\u800c\u662f\u5de5\u5177\u94fe\u6210\u719f\u540e\u7684\u5fc5\u7136\u9009\u62e9\uff1a<\/p>\n<ul>\n<li><strong>\u4ee3\u7801\u590d\u7528<\/strong>\uff1a\u7ec4\u4ef6\u5e93\u3001\u5de5\u5177\u51fd\u6570\u3001\u7c7b\u578b\u5b9a\u4e49\u53ef\u4ee5\u8de8\u9879\u76ee\u76f4\u63a5\u5f15\u7528\uff0c\u65e0\u9700\u53d1\u5305\u3002<\/li>\n<li><strong>\u539f\u5b50\u63d0\u4ea4<\/strong>\uff1a\u4e00\u6b21\u4fee\u6539\u540c\u65f6\u66f4\u65b0\u591a\u4e2a\u5305\uff0c\u4fdd\u8bc1\u4f9d\u8d56\u4e00\u81f4\u6027\u3002<\/li>\n<li><strong>\u7edf\u4e00\u5de5\u5177\u94fe<\/strong>\uff1a\u4e00\u5957 ESLint\u3001TypeScript\u3001Vite \u914d\u7f6e\u8986\u76d6\u6240\u6709\u9879\u76ee\u3002<\/li>\n<li><strong>\u9ad8\u6548\u534f\u4f5c<\/strong>\uff1a\u65b0\u4eba\u514b\u9686\u4e00\u4e2a\u4ed3\u5e93\u5c31\u80fd\u542f\u52a8\u5168\u90e8\u5f00\u53d1\u73af\u5883\u3002<\/li>\n<\/ul>\n<p>\u4f46 Monorepo \u4e5f\u5e26\u6765\u4e86\u65b0\u95ee\u9898\uff1a<strong>\u6784\u5efa\u6162\u3001\u4efb\u52a1\u7f16\u6392\u590d\u6742\u3001\u4f9d\u8d56\u56fe\u96be\u4ee5\u7ba1\u7406<\/strong>\u3002\u8fd9\u6b63\u662f Turborepo \u548c Nx \u8981\u89e3\u51b3\u7684\u6838\u5fc3\u75db\u70b9\u3002<\/p>\n<h2>\u4e8c\u3001Turborepo vs Nx\uff1a\u6838\u5fc3\u5dee\u5f02\u4e0e\u9009\u578b<\/h2>\n<h3>2.1 \u8bbe\u8ba1\u54f2\u5b66<\/h3>\n<p>| \u7ef4\u5ea6 | Turborepo | Nx | |&#8212;&#8212;|&#8212;&#8212;&#8212;&#8211;|&#8212;&#8211;| | \u5b9a\u4f4d | \u9ad8\u6027\u80fd\u4efb\u52a1\u8fd0\u884c\u5668 | \u5168\u80fd\u578b\u5de5\u7a0b\u5e73\u53f0 | | \u5b66\u4e60\u66f2\u7ebf | \u5e73\u7f13\uff0c\u914d\u7f6e\u6781\u7b80 | \u9661\u5ced\uff0c\u6982\u5ff5\u8f83\u591a | | \u63d2\u4ef6\u751f\u6001 | \u65e0\u63d2\u4ef6\uff0c\u9760 npm scripts | \u4e30\u5bcc\u7684\u5b98\u65b9\/\u793e\u533a\u63d2\u4ef6 | | \u7f13\u5b58\u7c92\u5ea6 | \u4efb\u52a1\u7ea7 | \u4efb\u52a1\u7ea7 + \u6587\u4ef6\u7ea7 | | \u8fdc\u7a0b\u7f13\u5b58 | \u652f\u6301\uff08Vercel \u7b49\uff09 | \u652f\u6301\uff08Nx Cloud\uff09 | | \u4ee3\u7801\u751f\u6210 | \u65e0 | \u5f3a\u5927\u7684 generator | | \u9002\u7528\u573a\u666f | \u4e2d\u5c0f\u56e2\u961f\uff0c\u5feb\u901f\u4e0a\u624b | \u5927\u578b\u4f01\u4e1a\uff0c\u590d\u6742\u67b6\u6784 |<\/p>\n<p><strong>\u6211\u7684\u9009\u578b\u5efa\u8bae<\/strong>\uff1a<\/p>\n<ul>\n<li>\u5982\u679c\u4f60\u7684\u56e2\u961f\u5df2\u7ecf\u6709\u4e00\u5957\u6210\u719f\u7684 npm scripts\uff0c\u53ea\u60f3\u52a0\u901f\u6784\u5efa\u548c\u7f13\u5b58\uff0c<strong>Turborepo \u662f\u9996\u9009<\/strong>\u3002<\/li>\n<li>\u5982\u679c\u4f60\u9700\u8981\u4f9d\u8d56\u56fe\u53ef\u89c6\u5316\u3001\u4ee3\u7801\u751f\u6210\u5668\u3001\u6a21\u5757\u8fb9\u754c\u7ea6\u675f\u3001\u63d2\u4ef6\u5316\u67b6\u6784\uff0c<strong>Nx \u66f4\u5408\u9002<\/strong>\u3002<\/li>\n<li>\u5982\u679c\u9879\u76ee\u4f7f\u7528 Vite + pnpm\uff0cTurborepo \u51e0\u4e4e\u96f6\u914d\u7f6e\uff1b\u5982\u679c\u9879\u76ee\u662f Angular \u6216\u9700\u8981\u5fae\u524d\u7aef\u652f\u6301\uff0cNx \u5f00\u7bb1\u5373\u7528\u3002<\/li>\n<\/ul>\n<h3>2.2 \u6027\u80fd\u5bf9\u6bd4\u5b9e\u6d4b<\/h3>\n<p>\u5728\u4e00\u4e2a\u5305\u542b 3 \u4e2a\u5e94\u7528\uff08Next.js + Vite + Node\uff09\u548c 5 \u4e2a\u5171\u4eab\u5305\uff08UI\u3001utils\u3001config\uff09\u7684\u6d4b\u8bd5\u4ed3\u5e93\u4e2d\uff0c\u51b7\u542f\u52a8\u6784\u5efa\u8017\u65f6\uff1a<\/p>\n<ul>\n<li>Turborepo\uff1a<strong>42s<\/strong>\uff08\u9996\u6b21\uff09\uff0c<strong>6s<\/strong>\uff08\u7f13\u5b58\u547d\u4e2d\uff09<\/li>\n<li>Nx\uff1a<strong>48s<\/strong>\uff08\u9996\u6b21\uff09\uff0c<strong>5s<\/strong>\uff08\u7f13\u5b58\u547d\u4e2d\uff09<\/li>\n<\/ul>\n<p>\u5dee\u5f02\u4e0d\u5927\uff0c\u4f46 Turborepo \u7684\u914d\u7f6e\u91cf\u53ea\u6709 Nx \u7684 1\/3\u3002<\/p>\n<h2>\u4e09\u3001\u4ece\u96f6\u642d\u5efa Turborepo \u9879\u76ee\uff08\u63a8\u8350\u5165\u95e8\uff09<\/h2>\n<h3>3.1 \u521d\u59cb\u5316<\/h3>\n<pre><code class=\"language-bash\">\nnpx create-turbo@latest my-monorepo\ncd my-monorepo\n<\/code><\/pre>\n<p>\u9009\u62e9 pnpm \u4f5c\u4e3a\u5305\u7ba1\u7406\u5668\u3002\u751f\u6210\u7684\u76ee\u5f55\u7ed3\u6784\uff1a<\/p>\n<pre><code>\nmy-monorepo\/\n\u251c\u2500\u2500 apps\/\n\u2502   \u251c\u2500\u2500 web\/          # Next.js \u5e94\u7528\n\u2502   \u2514\u2500\u2500 docs\/         # \u6587\u6863\u7ad9\n\u251c\u2500\u2500 packages\/\n\u2502   \u251c\u2500\u2500 ui\/           # \u5171\u4eab\u7ec4\u4ef6\u5e93\n\u2502   \u251c\u2500\u2500 eslint-config\/\n\u2502   \u2514\u2500\u2500 typescript-config\/\n\u251c\u2500\u2500 package.json\n\u251c\u2500\u2500 pnpm-workspace.yaml\n\u2514\u2500\u2500 turbo.json\n<\/code><\/pre>\n<h3>3.2 \u6838\u5fc3\u914d\u7f6e turbo.json<\/h3>\n<pre><code class=\"language-json\">\n{\n  &quot;$schema&quot;: &quot;https:\/\/turbo.build\/schema.json&quot;,\n  &quot;globalDependencies&quot;: [&quot;**\/.env.*local&quot;],\n  &quot;pipeline&quot;: {\n    &quot;build&quot;: {\n      &quot;dependsOn&quot;: [&quot;^build&quot;],\n      &quot;outputs&quot;: [&quot;.next\/**&quot;, &quot;!.next\/cache\/**&quot;, &quot;dist\/**&quot;]\n    },\n    &quot;lint&quot;: {\n      &quot;dependsOn&quot;: [&quot;^lint&quot;]\n    },\n    &quot;test&quot;: {\n      &quot;dependsOn&quot;: [&quot;build&quot;],\n      &quot;outputs&quot;: [&quot;coverage\/**&quot;]\n    },\n    &quot;dev&quot;: {\n      &quot;cache&quot;: false,\n      &quot;persistent&quot;: true\n    }\n  }\n}\n<\/code><\/pre>\n<p>\u5173\u952e\u70b9\uff1a<\/p>\n<ul>\n<li><code>dependsOn: [\"^build\"]<\/code> \u8868\u793a\u5f53\u524d\u5305\u7684 build \u4f9d\u8d56\u6240\u6709\u4e0a\u6e38\u5305\u7684 build\u3002<\/li>\n<li><code>outputs<\/code> \u58f0\u660e\u7f13\u5b58\u4ea7\u7269\uff0c\u672a\u58f0\u660e\u7684\u6587\u4ef6\u4e0d\u4f1a\u547d\u4e2d\u7f13\u5b58\u3002<\/li>\n<li><code>persistent: true<\/code> \u7528\u4e8e dev \u8fd9\u7c7b\u957f\u671f\u8fd0\u884c\u7684\u4efb\u52a1\u3002<\/li>\n<\/ul>\n<h3>3.3 \u5305\u5185\u811a\u672c\u914d\u7f6e<\/h3>\n<p>\u4ee5 <code>packages\/ui\/package.json<\/code> \u4e3a\u4f8b\uff1a<\/p>\n<pre><code class=\"language-json\">\n{\n  &quot;name&quot;: &quot;@repo\/ui&quot;,\n  &quot;version&quot;: &quot;0.0.0&quot;,\n  &quot;exports&quot;: {\n    &quot;.\/button&quot;: &quot;.\/src\/button.tsx&quot;,\n    &quot;.\/card&quot;: &quot;.\/src\/card.tsx&quot;\n  },\n  &quot;scripts&quot;: {\n    &quot;lint&quot;: &quot;eslint . --max-warnings 0&quot;,\n    &quot;build&quot;: &quot;tsc --noEmit&quot;,\n    &quot;test&quot;: &quot;vitest run&quot;\n  }\n}\n<\/code><\/pre>\n<p>\u6ce8\u610f\uff1aTurborepo \u4e0d\u5173\u5fc3\u5305\u7ba1\u7406\u5668\u5982\u4f55\u94fe\u63a5\uff0c\u5b83\u53ea\u8d1f\u8d23\u8c03\u5ea6\u4efb\u52a1\u3002\u56e0\u6b64\u5fc5\u987b\u786e\u4fdd <code>pnpm-workspace.yaml<\/code> \u6b63\u786e\u58f0\u660e\uff1a<\/p>\n<pre><code class=\"language-yaml\">\npackages:\n  - &quot;apps\/*&quot;\n  - &quot;packages\/*&quot;\n<\/code><\/pre>\n<h3>3.4 \u8fd0\u884c\u4efb\u52a1<\/h3>\n<pre><code class=\"language-bash\">\npnpm turbo build          # \u6784\u5efa\u6240\u6709\u5305\npnpm turbo build --filter=web  # \u53ea\u6784\u5efa web \u53ca\u5176\u4f9d\u8d56\npnpm turbo dev            # \u5e76\u884c\u542f\u52a8\u6240\u6709 dev \u4efb\u52a1\n<\/code><\/pre>\n<p>\ud83d\udca1 <strong>\u8e29\u5751\u63d0\u793a<\/strong>\uff1a\u5982\u679c <code>--filter<\/code> \u4e0d\u751f\u6548\uff0c\u68c0\u67e5\u5305\u540d\u662f\u5426\u4e0e <code>package.json<\/code> \u4e2d\u7684 <code>name<\/code> \u4e00\u81f4\u3002Turborepo \u4f7f\u7528\u5305\u540d\u800c\u975e\u76ee\u5f55\u540d\u8fc7\u6ee4\u3002<\/p>\n<h2>\u56db\u3001Nx \u8fdb\u9636\u914d\u7f6e\uff08\u9002\u5408\u590d\u6742\u573a\u666f\uff09<\/h2>\n<h3>4.1 \u521d\u59cb\u5316<\/h3>\n<pre><code class=\"language-bash\">\nnpx create-nx-workspace@latest my-org --preset=ts\n<\/code><\/pre>\n<p>\u9009\u62e9 Integrated Monorepo \u6a21\u5f0f\uff0c\u5305\u7ba1\u7406\u5668\u9009 pnpm\u3002<\/p>\n<h3>4.2 \u6dfb\u52a0\u5e94\u7528\u4e0e\u5e93<\/h3>\n<pre><code class=\"language-bash\">\nnx g @nx\/react:app apps\/admin\nnx g @nx\/js:lib packages\/utils\n<\/code><\/pre>\n<p>Nx \u4f1a\u81ea\u52a8\u751f\u6210 <code>project.json<\/code> \u5e76\u7ef4\u62a4\u4f9d\u8d56\u56fe\u3002<\/p>\n<h3>4.3 \u6a21\u5757\u8fb9\u754c\u7ea6\u675f<\/h3>\n<p>\u5728 <code>nx.json<\/code> \u4e2d\u914d\u7f6e\uff1a<\/p>\n<pre><code class=\"language-json\">\n{\n  &quot;targetDefaults&quot;: {\n    &quot;build&quot;: {\n      &quot;dependsOn&quot;: [&quot;^build&quot;],\n      &quot;cache&quot;: true,\n      &quot;outputs&quot;: [&quot;{projectRoot}\/dist&quot;]\n    }\n  },\n  &quot;plugins&quot;: [\n    {\n      &quot;plugin&quot;: &quot;@nx\/eslint\/plugin&quot;,\n      &quot;options&quot;: {\n        &quot;targetName&quot;: &quot;lint&quot;\n      }\n    }\n  ],\n  &quot;nxCloudAccessToken&quot;: &quot;your-token&quot;\n}\n<\/code><\/pre>\n<p>\u518d\u901a\u8fc7 <code>.eslintrc.json<\/code> \u4e2d\u7684 <code>@nx\/enforce-module-boundaries<\/code> \u89c4\u5219\u9650\u5236\u8de8\u5c42\u5f15\u7528\uff1a<\/p>\n<pre><code class=\"language-json\">\n{\n  &quot;rules&quot;: {\n    &quot;@nx\/enforce-module-boundaries&quot;: [\n      &quot;error&quot;,\n      {\n        &quot;depConstraints&quot;: [\n          {\n            &quot;sourceTag&quot;: &quot;scope:app&quot;,\n            &quot;onlyDependOnLibsWithTags&quot;: [&quot;scope:shared&quot;, &quot;scope:feature&quot;]\n          }\n        ]\n      }\n    ]\n  }\n}\n<\/code><\/pre>\n<h3>4.4 \u8fdc\u7a0b\u7f13\u5b58<\/h3>\n<pre><code class=\"language-bash\">\nnx connect-to-cloud\n<\/code><\/pre>\n<p>Nx Cloud \u63d0\u4f9b\u514d\u8d39\u989d\u5ea6\uff0c\u56e2\u961f\u6210\u5458\u5171\u4eab\u7f13\u5b58\uff0cCI \u63d0\u901f\u663e\u8457\u3002<\/p>\n<h2>\u4e94\u3001\u6700\u4f73\u5b9e\u8df5\u4e0e\u6027\u80fd\u4f18\u5316<\/h2>\n<h3>5.1 \u7cbe\u51c6\u58f0\u660e inputs<\/h3>\n<p>Turborepo \u9ed8\u8ba4\u5c06\u5305\u5185\u6240\u6709\u6587\u4ef6\u4f5c\u4e3a\u8f93\u5165\uff0c\u4f46\u4f60\u53ef\u4ee5\u7ec6\u5316\uff1a<\/p>\n<pre><code class=\"language-json\">\n{\n  &quot;pipeline&quot;: {\n    &quot;build&quot;: {\n      &quot;inputs&quot;: [&quot;src\/**&quot;, &quot;package.json&quot;, &quot;tsconfig.json&quot;],\n      &quot;outputs&quot;: [&quot;dist\/**&quot;]\n    }\n  }\n}\n<\/code><\/pre>\n<p>\u907f\u514d\u56e0\u65e0\u5173\u6587\u4ef6\uff08\u5982 README\uff09\u53d8\u66f4\u5bfc\u81f4\u7f13\u5b58\u5931\u6548\u3002<\/p>\n<h3>5.2 \u5229\u7528 pnpm catalog \u7edf\u4e00\u4f9d\u8d56\u7248\u672c<\/h3>\n<p>\u5728 <code>pnpm-workspace.yaml<\/code> \u4e2d\uff1a<\/p>\n<pre><code class=\"language-yaml\">\ncatalog:\n  react: ^18.3.1\n  typescript: ^5.5.4\n<\/code><\/pre>\n<p>\u5305\u5185\u5f15\u7528\uff1a<\/p>\n<pre><code class=\"language-json\">\n{\n  &quot;dependencies&quot;: {\n    &quot;react&quot;: &quot;catalog:&quot;\n  }\n}\n<\/code><\/pre>\n<p>\u5f7b\u5e95\u89e3\u51b3\u591a\u5305\u7248\u672c\u4e0d\u4e00\u81f4\u95ee\u9898\u3002<\/p>\n<h3>5.3 CI \u4e2d\u7684\u7f13\u5b58\u7b56\u7565<\/h3>\n<p>GitHub Actions \u793a\u4f8b\uff1a<\/p>\n<pre><code class=\"language-yaml\">\n- uses: actions\/cache@v4\n  with:\n    path: .turbo\n    key: ${{ runner.os }}-turbo-${{ github.sha }}\n    restore-keys: |\n      ${{ runner.os }}-turbo-\n\n- run: pnpm turbo build --cache-dir=.turbo\n<\/code><\/pre>\n<h3>5.4 \u5e38\u89c1\u5751<\/h3>\n<ul>\n<li><strong>\u5faa\u73af\u4f9d\u8d56<\/strong>\uff1aTurborepo \u4f1a\u76f4\u63a5\u62a5\u9519\uff0cNx \u4f1a\u7ed9\u51fa\u8b66\u544a\u3002\u5efa\u8bae\u7528 <code>madge<\/code> \u63d0\u524d\u68c0\u6d4b\u3002<\/li>\n<li><strong>dev \u4efb\u52a1\u963b\u585e<\/strong>\uff1a<code>persistent: true<\/code> \u7684\u4efb\u52a1\u4e0d\u80fd\u4f9d\u8d56\u5176\u4ed6 persistent \u4efb\u52a1\uff0c\u5426\u5219\u6b7b\u9501\u3002<\/li>\n<li><strong>Docker \u6784\u5efa<\/strong>\uff1aMonorepo \u955c\u50cf\u4f53\u79ef\u5927\uff0c\u5efa\u8bae\u7528 <code>pnpm deploy --filter<\/code> \u751f\u6210\u72ec\u7acb\u4ea7\u7269\u3002<\/li>\n<\/ul>\n<h2>\u516d\u3001\u603b\u7ed3<\/h2>\n<p>Monorepo \u4e0d\u662f\u94f6\u5f39\uff0c\u4f46 Turborepo \u548c Nx \u8ba9\u5b83\u7684\u95e8\u69db\u5927\u5e45\u964d\u4f4e\u3002<\/p>\n<ul>\n<li><strong>Turborepo<\/strong>\uff1a\u8f7b\u91cf\u3001\u5feb\u901f\u3001\u914d\u7f6e\u7b80\u5355\uff0c\u9002\u5408\u5927\u591a\u6570\u4e2d\u5c0f\u56e2\u961f\u3002<\/li>\n<li><strong>Nx<\/strong>\uff1a\u529f\u80fd\u5168\u9762\u3001\u751f\u6001\u5f3a\u5927\uff0c\u9002\u5408\u9700\u8981\u5f3a\u7ea6\u675f\u548c\u4ee3\u7801\u751f\u6210\u7684\u5927\u578b\u9879\u76ee\u3002<\/li>\n<\/ul>\n<p>\u65e0\u8bba\u9009\u62e9\u54ea\u4e2a\uff0c\u6838\u5fc3\u539f\u5219\u4e0d\u53d8\uff1a<strong>\u660e\u786e\u4efb\u52a1\u4f9d\u8d56\u3001\u7cbe\u51c6\u7f13\u5b58\u8f93\u5165\u8f93\u51fa\u3001\u7edf\u4e00\u4f9d\u8d56\u7248\u672c<\/strong>\u3002\u5efa\u8bae\u5148\u4ece Turborepo \u5f00\u59cb\uff0c\u5f53\u9047\u5230\u63d2\u4ef6\u5316\u6216\u67b6\u6784\u7ea6\u675f\u9700\u6c42\u65f6\u518d\u8fc1\u79fb\u5230 Nx\uff0c\u8fc1\u79fb\u6210\u672c\u5e76\u4e0d\u9ad8\u3002<\/p>\n<p>\u4e0b\u4e00\u6b65\u53ef\u4ee5\u63a2\u7d22\uff1a\u8fdc\u7a0b\u7f13\u5b58\u81ea\u5efa\uff08\u5982 <code>turborepo-remote-cache<\/code>\uff09\u3001\u53d8\u66f4\u5f71\u54cd\u5206\u6790\uff08<code>nx affected<\/code>\uff09\u3001\u4ee5\u53ca Monorepo \u7684\u53d1\u5e03\u6d41\u7a0b\uff08changesets\uff09\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u9762\u5bf9\u65e5\u76ca\u590d\u6742\u7684\u9879\u76ee\u4f9d\u8d56\uff0cMonorepo \u6210\u4e3a\u56e2\u961f\u534f\u4f5c\u7684\u5229\u5668\u3002\u672c\u6587\u6df1\u5165\u5bf9\u6bd4 Turborepo \u4e0e Nx \u7684\u6838\u5fc3\u673a\u5236\uff0c\u63d0\u4f9b\u4ece\u96f6\u642d\u5efa\u7684\u5b8c\u6574\u914d\u7f6e\u793a\u4f8b\uff0c\u5e76\u5206\u4eab\u9009\u578b\u51b3\u7b56\u6846\u67b6\u4e0e\u6027\u80fd\u4f18\u5316\u6280\u5de7\uff0c\u52a9\u4f60\u6784\u5efa\u9ad8\u6548\u7684 Monorepo \u5de5\u4f5c\u6d41\u3002<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,4],"tags":[273,275,277,274,276],"class_list":["post-286","post","type-post","status-publish","format-standard","hentry","category-3","category-4","tag-monorepo","tag-nx","tag-pnpm","tag-turborepo","tag-276"],"_links":{"self":[{"href":"https:\/\/yykcj.com\/index.php?rest_route=\/wp\/v2\/posts\/286","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/yykcj.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/yykcj.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/yykcj.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/yykcj.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=286"}],"version-history":[{"count":0,"href":"https:\/\/yykcj.com\/index.php?rest_route=\/wp\/v2\/posts\/286\/revisions"}],"wp:attachment":[{"href":"https:\/\/yykcj.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=286"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yykcj.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=286"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yykcj.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=286"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}