読み書きプログラミング

日常のプログラミングで気づいたことを綴っています

meteor.comにデプロイした古いMeteorアプリでのsiperableの注意点

追記
去年の10月にAJAX Crawling (Deprecated)はご覧の通りdeprecatedになっており、meteorのspiderableパッケージは今となっては特に有効ではないということのようです。

Meteorアプリを検索エンジンのボットに読み取ってもらうにはspiderableパッケージを使います。
spiderableパッケージはPhantomJSを起動してボットが読み取れる様アプリがレンダリングした結果のHTMLをボットに提供します。
ところが、いつ頃からかmeteor.comにデプロイしたアプリでspiderableのレンダリングがうまくいかなくなりました。

不思議に思いながら放置していたのですが、今回調査したところ、

  1. どうやらmeteor.comのPhantomJSはバージョン1の模様
  2. PhantomJS v1はFunction.prototype.bindをサポートしてない
  3. Meteorはproduction build(minificationなど)する時に.bindを使っている部分がある
  4. なのでlocalや--debugの時は動いてもproductionで動かなくなる

ということが起こっていました。
問題ないアプリもあるので、使っているパッケージに依存しているようです。

.bindのpolyfillを入れれば直るはずということで、es5-shimパッケージを追加したところ、直りました。

es5-shimは今ではmeteor createでデフォルトで追加されるパッケージのようです。
ずいぶん前から作り続けているアプリだったので今回のような問題が起こりました。

それにしても、meteor.comのPhantomJS、バージョンアップした方がいいんじゃないかな?