我在我的项目& webpack中使用库PIXI.js进行捆绑。我想替换PIXI中某个类(Sprite)的方法。在PIXI中,该类定义如下:
var extendStatics$6 = function(d, b) {
extendStatics$6 = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) { if (b.hasOwnProperty(p)) { d[p] = b[p]; } } };
return extendStatics$6(d, b);
};
function __extends$6(d, b) {
extendStatics$6(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
}
var Sprite = (function (_super) {
__extends$6(Sprite, _super);
function Sprite(texture) {
var _this = _super.call(this) || this;
// some extra initialization logic
}
Sprite.prototype.destroy = function (options) {
// some logic
};
return Sprite;
}(Container));
我试着这样破解:
import { Sprite } from 'pixi.js';
console.log(Sprite.prototype, Sprite);
const destroySprite = Sprite.prototype.destroy;
Sprite.prototype.destroy = function (options: any) {
console.log(this);
// some extra logic goes here
destroySprite.call(this, options);
};
但没有为Sprite对象调用“patched”方法。
调试时,我注意到当PIXI循环通过一些必须销毁的对象时(销毁有孩子的container,其中也有Sprites等类),调用他们的destroy方法,遇到Sprite对象时,调用PIXI原来的destroy方法,但遇到某个类时,它派生自Sprite -它工作正常,并且正在调用spy方法。
另外,如果它有用的话,当我console.log的Sprite.prototype -我得到了容器类在控制台,但当我只打印Sprite -我看到它的构造函数。我认为这可能是一些问题连接到Webpack,但我不确定。
我试着在PIXI的论坛里问,但是好像卡住了。有人能帮帮我吗?
1条答案
按热度按时间0sgqnhkj1#
我自己在12月份的时候也遇到过以前的webpack构建的问题。看起来webpack构建是从2个不匹配的PIXI版本中同时提取的,这取决于我调用的是什么。你的问题看起来很相似。我通过将我的解决方案迁移到不同的bundler / boilerplate来解决它,但我不确定它是否适合你。
我不是100%理解Webpack,但我认为当您构建时,它必须使用CDN或通过查看package.json中的依赖项添加的PIXI的某个最小化版本。
你可以试着问The Pixi.JS Discord server,那里有非常有用的人。