未定义Javascript(导入)类,ReferenceError

未定义Javascript(导入)类,ReferenceError,javascript,node.js,oop,webpack,babeljs,Javascript,Node.js,Oop,Webpack,Babeljs,我需要再一次的建议,在我的项目中,我正在使用NodeJS,一个带有babel loader的网页包,我已经将它分割成不同的文件 我不断得到错误: ReferenceError: PlayerManager is not defined PlayerManager是我在主文件中导入的类: import PlayerManager from './game/modules/PlayerManager'; import Player from './game/modules/Player'; imp

我需要再一次的建议,在我的项目中,我正在使用NodeJS,一个带有babel loader的网页包,我已经将它分割成不同的文件

我不断得到错误:

ReferenceError: PlayerManager is not defined
PlayerManager是我在主文件中导入的类:

import PlayerManager from './game/modules/PlayerManager';
import Player from './game/modules/Player';
import Game from './game/modules/Game';
这很奇怪,因为如果我在firefox的调试器中检查编译后的代码,这些类都在我的包文件中

这是触发此错误的代码行:

this.playerManager = new PlayerManager(this.ctx);
它位于我的类文件的构造函数中,在之前导入(参见上文)

现在我调用
newgame()
并触发错误

什么会导致错误


在另一个构造函数中使用新类是否错误?

导入仅在该特定文件中可用


您需要将
playermanger
导入到定义
Game
类的文件中。

PlayManager
导入到定义
Game
类的文件中吗?@JaromandaX否,在我的主js文件中的Game类之前导入它需要导入到“文件”中Game类试图使用的位置it@JaromandaX在这里添加:为什么必须在单个类文件中导入它?考虑到我正在导入主文件中的所有3个类,这种做法会不会使类在编译时声明两次?我不知道“编译器”,也许“编译器”坏了-我知道如果你想访问导出的资源,你需要
导入
它在你使用它的模块中,因为我把事情搞混了。。。现在,我的浏览器控制台显示
TypeError:_Player2.default在我从“/playermanger”导入
import playermanger”后不是构造函数
Game
类中,与我在主文件中的导入相同,但它在那里工作,这里没有(?)…您没有向我们展示PlayerManager的外观。听起来好像您忘记将其导出为默认值。@tremby这似乎解决了
类型错误问题。我有点困惑,为什么有必要将类(我想现在所有类)导出为
default
?而且,考虑到我要在主文件中导入所有类(首先是playermanger,然后是player,然后是game),我脑海中突然出现了一个问题,为什么我必须在game类文件中导入playermanger才能不收到类型错误?(见我作品中的coments),我的意思是,我不是这样叫了两次吗?我认为它应该可以正确地导入主文件中的所有类…您没有将其导出为
default
,而是将其作为默认导出<代码>导出默认PlayerManager。这是从“/game/modules/playermanger”导入LocalName时将导入的内容:默认导出现在将是
LocalName
(但显然,仍然将其命名为
PlayerManager
。至于为什么必须导入两次,您需要阅读有关ES6模块的内容。这是基本内容。您只需将其导入当前文件的范围。如果不在主文件中引用,则无需将其导入主文件。
export default class Game {
    constructor() {
        this.canvas = document.getElementById("gameCanvas");
        this.ctx = this.canvas.getContext("2d");
        this.w = window.innerWidth;
        this.h = window.innerHeight;
        this.frames = 60; 
        this.resize();
        this.players = {};
        this.playerManager = new PlayerManager(this.ctx);
        ....
        ....