6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

babel-nodeでbabel pulginsを使うには.babelrcを設定する

Last updated at Posted at 2015-08-28

目的

ES2015で書いて、かつpower-assertを使ったソースコードをbabel-nodeで動かす。
そのために、babel-nodeにbabel-plugin-espowerをプラグインとして指定したい。

結論

.babelrcにpluginsを設定します。

.babelrc
{
  "plugins": [
    "babel-plugin-espower"
  ]
}

背景

テストコードはmochaのcompilersオプションでespower-babelを指定すれば動かせます。

mocha --compilers js:espower-babel/guess test"

プロダクトコードはbabelのplugisオプションを使うと動くソースコードを作成できます。

babel --plugins babel-plugin-espower test.js

しかし、babel-nodeにはpluginsオプションがありません。

babel-node --plugins babel-plugin-espower

は動きません。

error: unknown option `--plugins'

が出力されます。

babel-nodeが使えれば、babelで毎回トランスパイルしなくてもよくなります。試しに動かすのが楽になります。
nodemonと組み合わせた、ソースコードの変更監視もできます。

babel-nodeの挙動の確認

試しにbabel-nodeの引数を増やして

babel-node --plugins babel-plugin-espower hoge.js

を実行すると

module.js:338
    throw err;
          ^
Error: Cannot find module '/Users/shigerunakajima/syamo/babel-plugin-espower'
    at Function.Module._resolveFilename (module.js:336:15)
    at Function.Module._load (module.js:278:25)
    at Function.Module.runMain (module.js:501:10)
    at Object.<anonymous> (/usr/local/lib/node_modules/babel/lib/_babel-node.js:144:25)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)
    at startup (node.js:129:16)

node_modules配下を探してくれません。これは

babel-node babel-plugin-espower

と同じ挙動です。エラーメッセージ通りに、pluginsオプションは無視されます。

.babelrcの検証

次のソースコードで検証します。

sample.js
import assert from 'power-assert'

let a = false

assert(a, 'a is not true.')

.babelrcなし

npm install power-assert
babel-node sapmle.js

出力結果

assert.js:86
  throw new assert.AssertionError({
        ^
AssertionError: a is not true.
    at decoratedAssert (/Users/shigerunakajima/syamo/node_modules/power-assert/node_modules/empower/lib/decorate.js:44:25)
    at powerAssert (/Users/shigerunakajima/syamo/node_modules/power-assert/node_modules/empower/index.js:58:32)
    at Object.<anonymous> (/Users/shigerunakajima/syamo/test.js:5:1)
    at Module._compile (module.js:460:26)
    at normalLoader (/usr/local/lib/node_modules/babel/node_modules/babel-core/lib/api/register/node.js:199:5)
    at Object.require.extensions.(anonymous function) [as .js] (/usr/local/lib/node_modules/babel/node_modules/babel-core/lib/api/register/node.js:216:7)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)
    at Object.<anonymous> (/usr/local/lib/node_modules/babel/lib/_babel-node.js:144:25)

assertとしては動きますが、power-assertの詳細表示はされません。

.babelrcあり

.babelrcでbabel-plugin-espowerを指定します。

npm install power-assert babel-plugin-espower
babel-node sapmle.js

出力結果

/Users/shigerunakajima/syamo/node_modules/power-assert/node_modules/empower/lib/decorator.js:66
        throw this.errorToRethrow(e, message, context);
                   ^
AssertionError: a is not true.   # test.js:5

  assert(a, 'a is not true.')
         |
         false

    at decoratedAssert (/Users/shigerunakajima/syamo/node_modules/power-assert/node_modules/empower/lib/decorate.js:42:30)
    at powerAssert (/Users/shigerunakajima/syamo/node_modules/power-assert/node_modules/empower/index.js:58:32)
    at Object.<anonymous> (/Users/shigerunakajima/syamo/test.js:5:1)
    at Module._compile (module.js:460:26)
    at normalLoader (/usr/local/lib/node_modules/babel/node_modules/babel-core/lib/api/register/node.js:199:5)
    at Object.require.extensions.(anonymous function) [as .js] (/usr/local/lib/node_modules/babel/node_modules/babel-core/lib/api/register/node.js:216:7)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)
    at Object.<anonymous> (/usr/local/lib/node_modules/babel/lib/_babel-node.js:144:25)

パチパチ:blush:

6
8
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
6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?