2017-06-18 10 views
1

私はGulpで構築された私のアプリにReact with ES6を導入しようとしています。私はReactを単独で働くことができ、ES6は単独で働くことができます。しかし、importにしようとすると私のギャルプビルドがクラッシュします。ガルプのエラーは次のとおりです。gulp-reactでの不正なインポート宣言

14行:不正輸入申告

マイHTMLページが反応含まれており、構築されたJSファイル:

import {Child} from './child.js'; 

var Parent = React.createClass({ 
    render: function(){ 
    const y = 3; //es6 works 
    return (
     <div> 
     <div> This is the parent {y}. </div> 
     <Child name="child"/> 
     </div> 
    ) 
    } 
}); 

React.render(<Parent />, document.getElementById('container')); 

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.12.2/react.min.js"></script> 
    <script src="js/app.js"></script> 

app.jsはこのようになります

child.jsは同じディレクトリにあり、th次のとおりです。

var Child = React.createClass({ 
    render: function(){ 
    return (
     <div> 
     and this is the <b>{this.props.name}</b>. 
     </div> 
    ) 
    } 
}); 

export default Child; 

バベルとES6をコンパイルし、私のガルプファイルの一部:

gulp.task('babel', function(){ 
    gulp.src('js/app.js') 
    .pipe(react()) 
    .pipe(babel({ 
     presets: ['es2015'] 
    })) 
    .pipe(gulp.dest('dist/js')); 
}); 

私はimportを使用してから私を妨げている間違っている/何をしないのですか?あなたのimport文を修正し、次に

.pipe(react({ 
    es6module: true 
})) 

答えて

1

を試してみてください。

import Child from './child.js'; 

注:Childがデフォルトとしてエクスポートされているので、このようにそれをインポートgulp-reactgulp-babelの賛成で廃止されましたあなたはすでにes2015のためにそれを使用している場合ので、私はその代わりに使用することをお勧め。このコードは質問に答えるかもしれないが、

presets: ['es2015', 'react'] 
+0

Andrewに感謝します。私はそれがうまくいったと思うが、これをした後に別のエラーがある。 ブラウザで、 'モジュール名xxxがまだコンテキストに読み込まれていません。 'という要求からコンソールエラーが発生しました。だから私はBabelを落として、ReactコードをコンパイルするためにWebpackを使っています。 @AlanP。 –

+1

。ああ、はい。 Babelは実際にモジュールローダーではありません。それは単にトランスバータだけなので、エラーが発生します。 Webpackを使用すると、Web用のモジュールも変わります。 – Li357

-2

あなたは、モジュールのインポートを可能にするgulp-reactes6moduleオプションを適用する必要が

import Child from './child'; 
+0

の方法および/または、なぜそれが解決に関する追加のコンテキストを提供する:gulp-babelにそれを適用し、最後に

npm install --save-dev babel-preset-react 

:代わりにgulp-babelを使用し、バベルのためreactプリセットをインストールしますこの問題は、回答の長期的な価値を向上させるでしょう。 – Badacadabra

+0

@Badacadabra私はポイントと評判を気にしない。私は作業コードを提供し、上記のユーザーは説明に答えましたので、Andrewのものと同じ説明をすることには意味がありません。 **もし彼が説明の答えを出していないなら、私は説明を追加するでしょう。 –

関連する問題