Phantomjs и бандлы

В процессе написания библиотеки, которая должна была упрятать в себя проверки свойств различных DOM-узлов html-дерева внутрь простенького DSL (три аббревиатуры на одно предложение, ого..), выяснил, а, вернее, вспомнил, что phantomjs принципиально не поддерживает Object.assign, например.

И код, который в броузере выполняется без вопросов, например такой:

Такой код phantom использовать отказывается — dom-check–wrong.js
1
2
3
4
5
6
7
8
9
var DomChecker = function(/* ... */) {
  // ...
};

Object.assign(DomChecker.prototype, {
  textIsEqual: function(value) {
    // ...
  }
});

не будет выполняться в phantomjs, если втянуть его, например, webpack-ом в какой-нибудь бандл. Более того, с момента, когда мы попытаемся использовать Object.assign() весь дальнейший код выполнен не будет.

Приходится возвращаться к дедовским методам:

А так вполне себе — dom-check–right.js
1
2
3
4
5
6
7
8
9
var DomChecker = function(/* ... */) {
  // ...
};

var cp = DomChecker.prototype;

cp.textIsEqual: function(value) {
  // ...
};

Минусы — чуть больше кода. Плюсы — код (ура!) работает даже в бандле, который будет скормлен phantomjs.

P.S. Или уже создать (или использовать?) phantom-shims?

Comments