コンパイラとしてbabelを使用してES2015コードを使用するjavascript CLIアプリを開発しました。(babel-require フック)
アプリはローカルで完全に動作しますが、npm で公開すると動作しなくなります (babel は ES2015 ファイルをコンパイルしていないようです)
設定:
サンプル./bootstrap.js
(ES5):
require('babel-register');
require('./src/app.js');
サンプル./src/app.js
(ES2015):
import package from 'package';
...
サンプル./bin/myapp
:
#!/usr/bin/env node
require('../bootstrap.js');
ローカルで実行すると動作します:
appdir$ ./bin/myapp
I'm running fine!
appdir$
(npm のインストール後に) グローバルに実行すると、次のように壊れます。
$ sudo npm install -g myapp
└── myapp@0.1.0
$ myapp
/usr/local/lib/node_modules/myapp/src/app.js:1
(function (exports, require, module, __filename, __dirname) { import package from 'package';
^^^^^^
SyntaxError: Unexpected token import
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:404:25)
at Module._extensions..js (module.js:432:10)
at Object.require.extensions.(anonymous function) [as .js] (/usr/local/lib/node_modules/myapp/node_modules/babel-register/lib/node.js:138:7)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:313:12)
at Module.require (module.js:366:17)
at require (module.js:385:17)
at Object.<anonymous> (/usr/local/lib/node_modules/myapp/server.js:9:12)
at Module._compile (module.js:425:26)
バージョン:
├─┬ babel-register@6.4.3
│ │ ├─┬ babel-core@6.4.5
│ │ │ ├─┬ babel-code-frame@6.3.13
│ │ │ ├─┬ babel-generator@6.4.5
│ │ │ ├── babel-helpers@6.4.5
│ │ ├── babel-runtime@5.8.35
私が試したこと:
- コンパイルが有効になることを期待
ignore: false
してファイルに追加する.babelrc
.babelrc
ファイルの代わりにrequireフック引数でオプションを使用する
運が悪い:/