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

NodeJS私有类字段'#'编译报错:如何让Babel正常编译该代码?

问题:Babel无法编译私有类字段语法

我写了一个带私有类字段的类:

class BaseModel {
    #database = null
}
export default BaseModel

用npm start通过Babel编译时,报错:

SyntaxError: src/helpers/BaseModel.js: Unexpected character '#' (5:1)

但直接用node app.js运行完全正常,我的Node版本是v18.17.1。怎么让Babel正常编译这段代码?

我的package.json配置:

{
  "name": "server",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "type": "module",
  "scripts": {
    "dev": "npx nodemon src/app.js",
    "build": "npm run clean && npm run build-babel",
    "start": "npm run build && node ./build/app.js",
    "clean": "rm -rf build && mkdir build",
    "build-babel": "babel -d ./build ./src -s",
    "heroku-postbuild": "npm install && npm run build"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@babel/core": "^7.23.2",
    "@babel/register": "^7.22.15",
    "axios": "^1.5.0",
    "babel-preset-env": "^1.7.0",
    "cookie-parser": "^1.4.6",
    "cors": "^2.8.5",
    "dotenv": "^16.3.1",
    "express": "^4.18.2",
    "firebase-admin": "^11.10.1",
    "jsonwebtoken": "^9.0.2",
    "lodash": "^4.17.21",
    "mysql2": "^3.6.1",
    "winston": "^3.10.0",
    "winston-daily-rotate-file": "^4.7.1"
  }
}

.babelrc配置:

{
  "presets": ["env"]
}

解决方案

1. 替换过时的Babel preset包

你当前使用的babel-preset-env是Babel 6时代的旧包,和现有@babel/core(Babel 7版本)不兼容,也不支持私有类字段语法。先卸载旧包,安装Babel 7官方的@babel/preset-env:

npm uninstall babel-preset-env
npm install --save-dev @babel/preset-env

2. 更新.babelrc配置

将presets替换为@babel/preset-env,并指定目标Node版本,让Babel根据你的运行环境做适配(Node 18已原生支持私有类字段,Babel会正确识别并处理):

{
  "presets": [
    ["@babel/preset-env", {
      "targets": {
        "node": "18.17.1"
      }
    }]
  ]
}

3. 验证编译

重新运行npm start,此时Babel应该能正常编译带私有类字段的代码了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 02:34:52