2016-09-29 6 views
0

私は2つのファイルを持っている場合、のはA.jsとB.jsそれらを呼びましょう:Babelで作成されたファイルをBabelに要求するにはどうすればよいですか?

/src/A.js 
/src/B/B.js 

A.jsはES6モジュールの構文を経由してB.jsを使用しています。

import B from './B/B.js'; 

とB.jsの輸入を以下のような他のもの:

import http from 'http'; 

私はrequire(CommonJS)構文にモジュールの構文を変換するために、バベルを使用している、と私は実行して正常に実行できます。

node_modules/babel-cli/bin/babel.js src > compiled.js 

しかし、問題があります:私は結果compiled.jsを実行しようとすると、私が取得:

/src/b/B.js:1 
(function (exports, require, module, __filename, __dirname) { import http from 'http'; 

SyntaxError: Unexpected token import 

このラインにcompiled.jsポイントから来ているスタックトレースの一部:

var _B = require('./src/b/B') 

問題を引き起こす実際のインポートは、B.jsから来ますが、

import http from 'http'; 

compiled.js内のB.jsコードのコピーにimportが含まれていないため、元のB.jsが必須であるようですが、なぜそのバージョンが使用されていないのかわかりません。

ご協力いただければ幸いです。

+0

通常、ファイル間の相対パスが引き続き機能するように、ディレクトリ全体を変換します。なぜファイルを個別にコンパイルして名前を変更するのですか? –

+0

私はWebpackに慣れていて、バベルを手動でコンパイルする必要がなかったダミーだからです。代わりに私のディレクトリでそれを実行しようとします、ありがとう! – machineghost

+0

それは動作しませんでした。これはA.jsの 'import'を' require'に変換しますが、B.jsを別のファイル(インポートを伴う)として残します。 A.jsとB.jsの両方をコンパイル済みのjsに入れることを望んでいましたが、そのような運はありませんでした。 – machineghost

答えて

1

インポートの名前を変更する必要はありません。個々のファイルをコンパイルする代わりに、ソースフォルダ全体をコンパイルしてください。これにより、相対的なインポートが保持されます。

あなた

src/ 
    A.js 
    B.js 

を持っているとbabel src --out-dir libを実行する場合は、lib/フォルダがコンパイルされたファイルが含まれてい

lib/ 
    A.js 
    B.js 
src/ 
    A.js 
    B.js 

を取得します。コンパイルされたコードをnode lib/A.jsで実行すると、期待通りに動作するはずです。

関連する問題