You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无Next.js的Turborepo内部包导入Nest+SWC后端报错解决方案咨询

解决Nest+SWC环境下Turborepo内部包导入报错的方案

方案1:调整Webpack+SWC配置,转译指定内部包

Nest默认通过SWC转译源码时会排除node_modules目录,但你的内部包是未编译的TypeScript文件,需要让SWC处理它。修改项目根目录的webpack.config.js,调整swc-loader的排除规则,将内部包从排除列表中移除:

module.exports = function (options) {
  return {
    ...options,
    module: {
      ...options.module,
      rules: [
        {
          test: /\.(t|j)s$/,
          loader: 'swc-loader',
          exclude: /node_modules(?!\/@repo\/your-internal-package)/, // 关键:排除node_modules但保留你的内部包
          options: {
            jsc: {
              parser: {
                syntax: 'typescript',
              },
            },
          },
        },
        ...(options.module?.rules || []).filter(rule => rule.loader !== 'swc-loader'),
      ],
    },
  };
};

注意替换@repo/your-internal-package为你实际的内部包名称,比如你的包叫@repo/shared,就改成/node_modules(?!\/@repo\/shared)/。

方案2:让内部包先编译为JavaScript(推荐长期方案)

Turborepo的示例虽然直接用TS源码共享,但生产环境更稳妥的方式是让内部包先编译。给内部包添加SWC编译配置:

  1. 在内部包目录下创建.swcrc:
{
  "$schema": "https://json.schemastore.org/swcrc",
  "jsc": {
    "parser": {
      "syntax": "typescript",
      "tsx": false
    },
    "target": "es2020",
    "transform": {
      "legacyDecorator": true,
      "decoratorMetadata": true
    },
    "keepClassNames": true
  },
  "module": {
    "type": "commonjs"
  },
  "sourceMaps": true
}
  1. 修改内部包的package.json:
{
  "name": "@repo/your-internal-package",
  "main": "./dist/index.js",
  "types": "./dist/index.d.ts",
  "scripts": {
    "build": "swc src -d dist && tsc --emitDeclarationOnly"
  },
  "devDependencies": {
    "@swc/cli": "^0.1.62",
    "@swc/core": "^1.3.90",
    "typescript": "^5.2.2"
  }
}
  1. 在项目根目录的turbo.json中配置构建流水线,确保后端项目构建前先编译内部包:
{
  "pipeline": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": ["dist/**"]
    },
    "dev": {
      "cache": false,
      "persistent": true
    }
  }
}

之后运行turbo build会先编译内部包,后端项目导入的就是编译后的JS文件,不会再出现语法错误。

方案3:调整Nest CLI的SWC配置

如果你的项目用Nest CLI管理而非自定义Webpack,可以在nest-cli.json中添加SWC的include规则:

{
  "compilerOptions": {
    "type": "swc",
    "swcOptions": {
      "jsc": {
        "parser": {
          "syntax": "typescript"
        }
      },
      "include": ["node_modules/@repo/your-internal-package/**/*"]
    }
  }
}

这个配置会让Nest的SWC编译器处理指定的内部包文件。


内容的提问来源于stack exchange,提问作者Laci556

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 06:59:54