未定义Javascript(导入)类,ReferenceError
我需要再一次的建议,在我的项目中,我正在使用NodeJS,一个带有babel loader的网页包,我已经将它分割成不同的文件 我不断得到错误:未定义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
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);
....
....