react.js + browserifyの出力ファイルを小さくしてみた

react.js + browserifyを使っていて一つのjsファイルが巨大化したので小さくするため
ライブラリ郡を外に出してみました

package.jsonを見ると

{
  "devDependencies": {
    "jquery": "^2.1.4",
    "react": "^0.13.3",
    "react-datepicker": "^0.12.0",
    "babelify": "^6.3.0",
    "browserify": "^11.1.0",
    "gulp": "^3.9.0",
    "vinyl-source-stream": "^1.1.0"
  }
}

な感じのものをつかっていて gulpfile.js がこんな感じ

var gulp = require('gulp');
var browserify = require('browserify');
var babelify = require('babelify');
var source = require('vinyl-source-stream');

var option = { debug: false };
gulp.task('debug', function() {
  option = { debug: true };
});

gulp.task('watch', function() {
  gulp.watch('./*.jsx', ['debug', 'browserify'])
});

gulp.task('browserify', function() {
  browserify('./index.jsx', option)
    .transform(babelify)
    .bundle()
    .on("error", function (err) { console.log("Error : " + err.message); })
    .pipe(source('bundle.js'))
    .pipe(gulp.dest('./'))
});

gulp.task('build', ['browserify']);
gulp.task('default', ['debug', 'browserify', 'watch']);

この gulp build で bundle.js が出力されますが、 1.6 MB で大きかったので
react.jsとjqueryを bundle.js にまとめず直リンクするようにしました

直リンクは

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.13.3/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>

とかCDNから読み込むようにして
thlorenz/browserify-shim
を使って、動作するようにします

$ npm install -D browserify-shim

$ vim package.json

{
  "devDependencies": {
    "babelify": "^6.3.0",
    "browserify": "^11.1.0",
    "browserify-shim": "^3.8.10",
    "gulp": "^3.9.0",
    "jquery": "^2.1.4",
    "react": "^0.13.3",
    "react-datepicker": "^0.12.0",
    "vinyl-source-stream": "^1.1.0"
  },
  "browserify-shim": {
    "react": "global:React",
    "jquery": "global:$"
  }
}

と記載してあげて

$ vim gulpfile

var gulp = require('gulp');
var browserify = require('browserify');
var babelify = require('babelify');
var source = require('vinyl-source-stream');

var option = { debug: false };
gulp.task('debug', function() {
  option = { debug: true };
});

gulp.task('watch', function() {
  gulp.watch('./*.jsx', ['debug', 'browserify'])
});

gulp.task('browserify', function() {
  browserify('./index.jsx', option)
    .transform(babelify)
    .transform('browserify-shim', { global: true })
    .bundle()
    .on("error", function (err) { console.log("Error : " + err.message); })
    .pipe(source('bundle.js'))
    .pipe(gulp.dest('./'))
});

gulp.task('build', ['browserify']);
gulp.task('default', ['debug', 'browserify', 'watch']);

で transform(‘browserify-shim’, { global: true }) で、package.jsonで指定したライブラリを
bundle.jsでも使えるようになりました

これで

$ gulp build

で 1.6MB -> 0.38MB になりました

CakephpでPaginator->numbersのリンク先を変える

cakephp 2.6でPaginator->numbersのリンク先を変えるのに調べてみました

参考) Paginator — CakePHP Cookbook 2.x ドキュメント

Config\routes.php
でurlをセットした時に調べました

routes.phpを

    $defaults = array('controller' => 'sample');
    Router::connect('/sample', $defaults);
    Router::connect('/sample/:type/:mode', $defaults);

なんてしたときに

Viewでpaginator->numbersを表示させると

    <?php echo $this->Paginator->numbers(); ?>

sample/type/mode にアクセスした時
ページャーのリンク先が sample?page=2 とかになってほんとは sample/type/mode?page=2
にしたいってときは

    <?php echo $this->Paginator->numbers(array('type'=>$type, 'mode'=>$mode)); ?>

sample/type/mode?param=100 にアクセスした時
ページャーのリンク先が sample/type/mode?page=2 になるので
クエリパラメータ残して sample/type/mode?param=100&page=2 にしたいときは

    <?php echo $this->Paginator->numbers(
            array(
                'type'=>$type, 'mode'=>$mode,
                array('?'=>array('param'=>'100'))
            )
    ); ?>

と ? の配列を追加してやるとできました

コアのソースコードを読んでみつけました

Ubuntuでjavaを切り替える

UbuntuでAndroid Studioをいれてみると、OpenJDKでなくてOracleJDKを使えってことで調べました

切り替えるコマンドを打ってみたら

$ sudo update-alternatives –config java

alternative java (/usr/bin/java を提供) には 2 個の選択肢があります。

  選択肢    パス                                          優先度  状態
------------------------------------------------------------
* 0            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      自動モード
  1            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      手動モード
  2            /usr/lib/jvm/java-7-oracle/jre/bin/java          4         手動モード

とでてきたので、いれてましたねー、で切り替えたらできあがりました

必要に応じて

$ sudo update-alternatives –config javac
$ sudo update-alternatives –config javaws

とかするといいそうです

vagrantでVirtualboxとGuestAdditionsのバージョンを合わせたい

$ vagrant up
したらいつからかこんなメッセージが出てました

Got different reports about installed GuestAdditions version:
Virtualbox on your host claims:   4.1.12
VBoxService inside the vm claims: 4.3.30
Going on, assuming VBoxService is correct...
GuestAdditions seems to be installed (4.3.30) correctly, but not running.
Got different reports about installed GuestAdditions version:
Virtualbox on your host claims:   4.1.12
VBoxService inside the vm claims: 4.3.30
Going on, assuming VBoxService is correct...

Virtualboxをアップデートしてから、GuestAdditionとバージョンがあってないとか
GuestAdditionのバージョンをあげればよさそうでしたが

$ vagrant plugin list

vagrant-cachier (1.2.1)
vagrant-login (1.0.1, system)
vagrant-omnibus (1.4.1)
vagrant-share (1.1.4, system)
vagrant-vbguest (0.10.0)

dotless-de/vagrant-vbguest が入っててこれが自動でアップデートしてくれるはずだった気が..
これもアップデートされるかなと

$ vagrant plugin install vagrant-vbguest

で確認

$ vagrant plugin list

vagrant-vbguest (0.10.1)

バージョン上がった

$ vagrant reload

GuestAdditions 4.3.30 running --- OK.

したらエラーでなくなりました!
よかった、よかった