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
相关产品推荐
相关产品推荐

