如何让webpack和babel处理私有typescript关键字?

如何让webpack和babel处理私有typescript关键字?,typescript,webpack,babeljs,Typescript,Webpack,Babeljs,我有webpack和babel在编译typescript,但他们似乎不知道如何处理typescript中的私有关键字。他们似乎对Typescript没有问题,一般来说,我能够编译文件。所以我想知道我是否需要做一些配置更改,但谷歌搜索没有帮助 如何让webpack和babel更好地使用Typescript的私有关键字 .LRC: webpack.config.js: 编辑:有一个复制细节的要求,我认为这是一个很容易复制与我所提供的。我以前见过它,它与babel loader对typescript

我有webpack和babel在编译typescript,但他们似乎不知道如何处理typescript中的私有关键字。他们似乎对Typescript没有问题,一般来说,我能够编译文件。所以我想知道我是否需要做一些配置更改,但谷歌搜索没有帮助

如何让webpack和babel更好地使用Typescript的私有关键字

.LRC:

webpack.config.js:

编辑:有一个复制细节的要求,我认为这是一个很容易复制与我所提供的。我以前见过它,它与babel loader对typescript的准支持有关。创建一个类并向其添加一个私有字段。私人:字符串。这应该足以使我提供的配置中出现无法识别的令牌错误

按要求编辑2:package.json:

{
  "name": "blah",
  "version": "1.0.0",
  "description": "blah config",
  "main": "index.js",
  "scripts": {
    "bundle": "webpack",
    "start": "webpack-dev-server --config ./webpack.config.js --mode development",
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack --mode production",
    "check-types": "tsc"
  },
  "devDependencies": {
    "@babel/core": "^7.11.1",
    "@babel/plugin-proposal-class-properties": "^7.10.4",
    "@babel/plugin-proposal-object-rest-spread": "^7.11.0",
    "@babel/preset-env": "^7.11.0",
    "@babel/preset-react": "^7.10.4",
    "@babel/preset-typescript": "^7.10.4",
    "babel-loader": "^8.1.0",
    "css-loader": "^4.2.1",
    "html-webpack-plugin": "^4.3.0",
    "style-loader": "^1.2.1",
    "tslint": "^6.1.3",
    "tslint-immutable": "^6.0.1",
    "typescript": "^3.9.7",
    "webpack": "^4.44.1",
    "webpack-cli": "^3.3.12",
    "webpack-dev-server": "^3.11.0"
  },
  "dependencies": {
    "@types/react": "^16.9.46",
    "@types/react-dom": "^16.9.8",
    "react": "^16.13.1",
    "react-dom": "^16.13.1"
  }
}
失败的例子:

class Example {
 private anyField = 'danger';
}
错误消息的示例:

SyntaxError [path] Unexpected token (2:12)
  1 | class Example {
> 2 |     private anyField = 'danger';
    |             ^

更改文件所在的目录会对其编译方式产生一些影响。我不完全确定这是如何或为什么产生影响的。遇到问题的文件位于目录分支上,比指向它的基本Web包配置低两级。虽然webpack.config上的文件允许使用私有typescript关键字,但该目录级别下的文件不允许使用私有关键字

也许出于某种原因,较低的目录级别被读取为经典的javascript,而不考虑文件扩展名


默认情况下,babel/webpack设置的最新版本应允许使用私有关键字和只读关键字编译Typescript。虽然有一段时间巴贝尔在这些关键词上遇到了麻烦。如果遇到麻烦,可以考虑使用目录结构。我猜,如果有更专业的人能够告诉我,为什么即使编译从配置文件所在的位置开始,目录级别也很重要。

这会有帮助吗?为什么要避免使用typescript加载程序来加载.ts文件?@RazRonen-我以前使用过babel加载程序,我遵循了使用typescript的安装教程。我只是不想让私人领域发挥作用。我希望它在typescript和javascript之间有更好的互操作性。但是是的,如果ts加载器能够处理私有字段,它可能会更好。在我看来,这是一个简单的解决方案。顺便说一句,这似乎是一个真正合法的问题。。。我不知道为什么有人会投反对票。不管有多少,你能不能把这个问题提出来?有了实际的错误,其他有类似问题的人会更容易发现这一点。React在这里是如何相关的,哪个脚本实际上失败了?为什么你要描述一个类而不是仅仅提供它?这是101个东西,请举一个更好的例子。换句话说,问题不能从问题中的信息重现?“要是有一个有专业知识的人在这里就好了。”@jonrsharpe-我还是不知道为什么它坏了。没有人要求提供目录结构,通常也不会提供。有必要到这里来幸灾乐祸吗?我反复要求一个,我可以在本地运行的东西。这是一个基本的调试步骤,是例如所要求的,所以在我看来并不是不合理的。但你不仅拒绝提供,而且还居高临下。下次请更亲切地接受任何反馈;询问更多信息的人可能想尝试提供帮助。见鬼,我认为在这个问题和回答之间,你实际上有一个有趣的问题或bug报告:为什么它会根据源文件相对于配置的位置而中断?制作一个MRE会帮助你发现并提出这个问题,我建议你编辑这个问题。@jonrsharpe-拜托,我不同意你的观点,但我不想争论。你的热情应该花在帮助别人上,而不是用你的观点来责骂我。
class Example {
 private anyField = 'danger';
}
SyntaxError [path] Unexpected token (2:12)
  1 | class Example {
> 2 |     private anyField = 'danger';
    |             ^