LoginSignup
7
6

More than 5 years have passed since last update.

主にビルドに使ってる node.js を v0.10系から v4系にしてみた感想

Posted at

これまで長らく、v0.10系だったところを、ember-cli が v4系に対応したので、これ幸いとバージョンアップしてみた。

変更してみて良かった・気になったのはざっくり以下の点。

  1. class つかえる
  2. let , const つかえる
  3. アロー関数もつかえる
  4. require するときのパスの指定がやや厳密になった

class つかえる

個人的にはコンストラクタと getter がうれしい。自前のモジュールはclassに書き換えてみた。

'use strict';
class Hoge {
  constructor(fuga) {
    this._fuga = fuga;
  }
  get fuga() {
    return this._fuga;
  }
}
module.exports = Hoge;

let, const つかえる

ブロックスコープになるのがうれしい。
ただ最初、勝手に const を定数だと思い込んでいてはまった。
実際には定数ではなく、読み取り専用(再代入の禁止)が正解なのでオブジェクトのプロパティは変更できる。

'use strict';
const x = 1;
x = 2; // これはできない

const o = { x: 1 };
o = { x: 2 }; // これはできない
o.x = 2; // これはできる!
o.y = 10; // これもできる!

以上を踏まえて、var, let, const の使い分けは、まだどうするのがベストか考えてないものの、
現時点では、以下のルールでお試し中。

  • require するとき: const
  • 定数的扱い: const
  • それ以外: let
  • var は使わない
'use strict';
const hoge = require('hoge');
const FUGA_VALUE = '定数';
let piyo = 'その他';

アロー関数

var self=this; とか .bind(this) がいらなくなっただけで満足。

requireのパス

プロジェクト内で require('package.json'); して、package.json内の値を参照していたのだが、その部分がコケてた。
調べてみるとrequire するときのパス指定の仕様が変わっていたせいだった。

具体的にパスを指定してファイルを読むときは、/ or ./ or ../ でパスをはじめる必要がある。package.json をよみこむなら、

'use strict';
const packageJson = require('./package.json');

としないといけない。

既存プロジェクトの利用するnodeのバージョンを変更するときは要注意。だが、一度直してしまえば、より厳密な指摘が出来ることになるので、よい気がする。

require.resolve

ちなみに、これを調べる中で知ったのが、 require.resolve()
require.resolve('hoge') とすると、 解決後のフルパスが取得できるので、参照がうまくいかない場合はこれで調べてみると早い。

おわり

ビルドのためだけに node.js を使っているような場合は、そんなに気にせずバージョンアップ可能だと思うので、余裕のあるときにためしてみるとメリットが見つかる…かもしれない。個人的にはメリットが多めだった。

その他の、v0.10系からv4系への変更についてはyosuke_furukawa さんの記事がくわしいので、こちらをどうぞ。

また、node.js における、ES6対応状況もあわせて。

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6