2016-05-27 4 views
0

コンパイル後にエラーが発生し続ける:can't find variable: exportsどのようにしてReelをBabelとGulpと連携させることができますか?

ここに私のファイルがあります。

Gulpfile.js

var gulp = require('gulp'); 
var babel = require('gulp-babel'); 

gulp.task('react', function() { 
    gulp.src('./resources/components/*.jsx') 
     .pipe(babel({presets: ['react', 'es2015']})) 
     .pipe(gulp.dest('./public/js')); 
}); 

gulp.task('default', ['react']); 

./resources/components/HelloWorld.jsx

import React, {PropTypes, Component} from 'react' 

export default class HelloWorld extends Component { 

    constructor (props) { 
     super(props) 
    } 

    render() { 
     return (
      <table> 
       <tr> 
        <th>Title</th> 
        <th>Description</th> 
        <th>Actions</th> 
       </tr> 

       <tr> 
        <td>Hello World</td> 
        <td>Loren ipsum</td> 
        <td>Delete | Update</td> 
       </tr> 
      </table> 
     ); 
    } 

} 

ReactDOM.render(<HelloWorld/>, document.getElementById('main')); 

index.htmlを

<!doctype html> 
<html> 
<head> 
<title>Crossover - Project</title> 
<meta charset="utf-8"> 
</head> 

<body> 

    <main id="main"></main> 
    <script src="./js/HelloWorld.js"></script> 

</body> 
</html> 

私は私が間違っているのかわかりませんここに。ここに出力があります。

HelloWorld.js

'use strict'; 

Object.defineProperty(exports, "__esModule", { 
    value: true 
}); 

var _createClass = function() { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); 

var _react = require('react'); 

var _react2 = _interopRequireDefault(_react); 

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 

function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } 

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } 

var HelloWorld = function (_Component) { 
    _inherits(HelloWorld, _Component); 

    function HelloWorld(props) { 
    _classCallCheck(this, HelloWorld); 

    return _possibleConstructorReturn(this, Object.getPrototypeOf(HelloWorld).call(this, props)); 
    } 

    _createClass(HelloWorld, [{ 
    key: 'render', 
    value: function render() { 
     return _react2.default.createElement(
     'table', 
     null, 
     _react2.default.createElement(
      'tr', 
      null, 
      _react2.default.createElement(
      'th', 
      null, 
      'Title' 
     ), 
      _react2.default.createElement(
      'th', 
      null, 
      'Description' 
     ), 
      _react2.default.createElement(
      'th', 
      null, 
      'Actions' 
     ) 
     ), 
     _react2.default.createElement(
      'tr', 
      null, 
      _react2.default.createElement(
      'td', 
      null, 
      'Hello World' 
     ), 
      _react2.default.createElement(
      'td', 
      null, 
      'Loren ipsum' 
     ), 
      _react2.default.createElement(
      'td', 
      null, 
      'Delete | Update' 
     ) 
     ) 
    ); 
    } 
    }]); 

    return HelloWorld; 
}(_react.Component); 

// this is where the error occurs 
exports.default = HelloWorld; 


ReactDOM.render(_react2.default.createElement(HelloWorld, null), document.getElementById('main')); 

は私が反応するのは非常に新しいですし、私はすでにWebサーバ+フレームワーク実行していると私は自分のアプリケーションに反応を統合するためのWebPACKを使用する必要はありません。

<script src="./js/HelloWorld.js"></script> 

しかし、ブラウザは何exportsの知識と共通-jsからモジュールの機能を持っていないので、変数の輸出を作成しません:

答えて

2

問題はHTMLであるとして、あなたがHelloWorld.jsを含むということです。このコードはブラウザで実行され、node.js環境では実行されません。

EDIT:

ので、これは適切な場所であれば、私は知らないが、私はあなたができるだけ早く速度までできるように、いくつかのポイントを作ってみるつもりです。

1)ES6は仕様であり、主要なブラウザベンダーが実装していますが、すべてではありません。ですから、ES6(AKA ES2015)を使ってコードを書くつもりならば、誰もが気にするように、トランスペラレータを使ってコードがすべてのブラウザで正しく解析され実行されるようにしてください。あなたが知っているように、最高の蒸散器はバベルです。 Plus Babelは、Reactを使用する場合に使用するJSXコードを翻訳できます(JSXはES6とは関係ありません)。

2)トランスバータを使用しているので、にはがあり、結果を確認するたびにES6コードが変更されます。

3)Gulpはノードモジュールで、ビルドシステムを自動化する素晴らしいツールです:コードを見て変更し、変更ごとにコードを作成し、ローカルサーバーを実行してください。他のもの;

4)gpackと組み合わせてwebpackを使用できます。 npmスクリプトとwebpackを使用することをお勧めしますが、これをスムーズに行うことができます:既存のビルドシステムにwebpackを統合し、将来的にwebpackとnpmスクリプトでgulpタスクを段階的に置き換えるようにしてください。より良い。

概要:

"[ノード] ES6、バベル、ガルプ、て反応が一緒に働くことができる"この方法:

  • がグッをインストールして使用することができるようにインストールしてノードを使用
  • インストールし、変更のためのあなたのファイルを見るためにがぶ飲みを使用し
  • インストール反応し、バベルとそのモジュールES2015とJSX、-DOMを反応させ、
  • あなたはES6の機能を備えたコードを反応書いて、JSX私はあなたの心の中で物事が明確になされ願う
  • 使用一気あなたES6/JSXコードをtranspileし、単一のファイルにそれを連結し、あなたのウェブサーバを実行するために(必要に応じて、ブラウザ同期;-))

たぶん、あなたはこのgithubのプロジェクトを見て、支店で見ることができる:https://github.com/laruiss/front-boilerplate

+0

私の理解では、ノード環境はブラウザが解析できるというES5での単一JSファイルを作成する必要があるということです。そのファイルを作成するにはどうすればいいですか?私はそれをGulpとNodeを使ってやりたいのですが、Webpackのようなものは使用しません。毎回ノードを生成するのではなく、反応ファイルを静的にしたい。私は本当にES6、Babel、Gulp、Reactがどのように連携できるのか分かりません。 – Gasim

+0

編集した投稿を見ましたか? – laruiss

+0

私はちょうどしてくれてありがとう!多くの研究の後、私は実際にReactを理解し、あなたの編集によって多くのことが明らかになりました。私が気づいたことの1つは、Reactが肥満とうまく機能しないということでした。だから、最初に私はbrowserifyを使用しようとしましたが、それは遅かったです。今、私はWebpackを使用することに戻りました。なぜなら、これは開発環境にとっては本当に素晴らしいことです。 – Gasim

関連する問題