Javascript ES6で書かれたクラスがあります。 nodemon
コマンドを実行しようとすると、常にこのエラーが表示されますTypeError: Class constructor Client cannot be invoked without 'new'
完全なエラーを以下に示します。
/Users/akshaysood/Blockchain/fabricSDK/dist/application/Transaction.js:45
return (0, _possibleConstructorReturn3.default)(this, (FBClient.__proto__ || (0, _getPrototypeOf2.default)(FBClient)).call(this, props));
^
TypeError: Class constructor Client cannot be invoked without 'new'
at new FBClient (/Users/akshaysood/Blockchain/fabricSDK/dist/application/Transaction.js:45:127)
at Object.<anonymous> (/Users/akshaysood/Blockchain/fabricSDK/dist/application/Transaction.js:195:14)
at Module._compile (module.js:641:30)
at Object.Module._extensions..js (module.js:652:10)
at Module.load (module.js:560:32)
at tryModuleLoad (module.js:503:12)
at Function.Module._load (module.js:495:3)
at Module.require (module.js:585:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (/Users/akshaysood/Blockchain/fabricSDK/dist/routes/users.js:11:20)
私がやろうとしているのは、クラスを作成してから、そのクラスのインスタンスを作成したことです。次に、その変数をエクスポートしようとしています。
クラス構造は以下に定義されています:
class FBClient extends FabricClient{
constructor(props){
super(props);
}
<<< FUNCTIONS >>>
}
変数をエクスポートする方法->
var client = new FBClient();
client.loadFromConfig(config);
export default client = client;
完全なコードはここにあります> https://hastebin.com/kecacenita.js Babelによって生成されたコード> https://hastebin.com/fabewecumo.js
問題は、クラスがネイティブES6クラスを拡張し、BabelでES5にトランスパイルされることです。変換されたクラスは、少なくとも追加の対策なしでは、ネイティブクラスを拡張できません。
class TranspiledFoo extends NativeBar {
constructor() {
super();
}
}
結果のようなもの
function TranspiledFoo() {
var _this = NativeBar.call(this);
return _this;
}
// prototypically inherit from NativeBar
ES6クラスはnew
でのみ呼び出す必要があるため、NativeBar.call
はエラーになります。
ES6クラスは、最近のバージョンNode=でサポートされているため、トランスパイルしないでください。es2015
はBabel設定から除外する必要があります。 env
プリセットをnode
targetに設定 を使用することをお勧めします。
package.json
では、@babel/preset-env
でターゲット設定を使用できます。 esmodules
を「true」に設定します。
以下は、ファイルでの使用例です。
"babel": {
"presets": [
[
"@babel/preset-env",
{
"targets": {
"esmodules": true
}
}
],
"@babel/preset-react",
"@babel/preset-flow"
],
"plugins": [
"@babel/plugin-proposal-class-properties"
]
},
私はJavascriptではなくTypeScriptを変換していて、同じ問題に遭遇しました。
TypeScriptコンパイラー構成ファイルtsconfig.json
を編集して、ES2017 Javascriptコードを生成しました。
{
"compilerOptions": {
"target": "ES2017",
デフォルトではなく、ES2015? —その後はすべて正常に機能しました。
(たぶん、この回答は、TypeScriptを使用していて、私と同じように同じエラーメッセージを検索するときにこの質問を見つける人にとって役立つ場合があります。)