2016-06-20 11 views
1

私はReactアプリケーションを、ビルドの簡単な方法を使ってビルドしようとしています。私は私のWebPACKのdevのサーバーを実行すると、私は次のようなエラー出力を取得:Webpackでモジュールの解析に失敗した、予期しないトークン

Module parse failed: /Directory/To/router.js Unexpected token (26:2)

You may need an appropriate loader to handle this file type.

それは文句を言う私が最初に私のルータハンドラを定義する場合であるラインを... <Route handler={App}>

私の完全なrouter.jsは次のように設定されています:

// Load css first thing. It gets injected in the <head> in a <style> element by 
// the Webpack style-loader. 
import css from './src/styles/main.sass'; 

import React from 'react'; 
import { render } from 'react-dom'; 

// Assign React to Window so the Chrome React Dev Tools will work. 
window.React = React; 

import { Router } from 'react-router'; 
Route = Router.Route; 

// Require route components. 

import { App } from './containers/App'; 
import { Home } from './containers/Home'; 
import { StyleGuide } from './containers/StyleGuide'; 
import { Uploader } from './containers/Uploader'; 

const routes = (
    <Route handler={App}> 
    <Route name="Home" handler={Home} path="/" /> 
    <Route name="StyleGuide" handler={StyleGuide} path="/styleguide" /> 
    <Route name="Uploader" handler={Uploader} path="/uploader" /> 
    </Route> 
) 

Router.run(routes, function(Handler) { 
    return ReactDOM.render(<Handler/>, document.getElementById('app')); 
    }); 

In私はすでにこの問題を研究しようとした

var path = require('path'); 
var webpack = require('webpack'); 

module.exports = { 
    entry: [ 
    'webpack-dev-server/client?http://0.0.0.0:8080', 
    'webpack/hot/only-dev-server', 
    './src/router' 
    ], 
    devtool: 'eval', 
    debug: true, 
    output: { 
    path: path.join(__dirname, 'public'), 
    filename: 'bundle.js' 
    }, 
    resolveLoader: { 
    modulesDirectories: ['node_modules'] 
    }, 
    plugins: [ 
    new webpack.HotModuleReplacementPlugin(), 
    new webpack.NoErrorsPlugin() 

    ], 
    resolve: { 
    extensions: ['', '.js'] 
    }, 
    module: { 
    loaders: [ 
    // js 
    { 
     test: /\.js$/, 
     loaders: ['babel'], 
     include: path.join(__dirname, 'public') 
    }, 
    // CSS 
    { 
     test: /\.sass$/, 
     include: path.join(__dirname, 'public'), 
     loader: 'style-loader!css-loader!sass-loader' 
    } 
    ] 
    } 
}; 

:私は私のプリセットは私の開発のWebPACKは、次のようになりますreactes2015

で定義されている私の.babelrcファイル。私はこの特定のインスタンスに対する解決策を見つけることはできません。なぜこれがこのように機能しているのか、私は興味があります。

編集1私はpublic/に私の実際のソースディレクトリにディレクトリ名を変更しないで、私の問題を解決するために管理

。しかし、私の間違いを訂正した後、おそらく私のコンポーネントを扱っている他の2つのエラーに遭遇しましたか?

は、私は今のブラウザで2つのエラーを受け取る: Warning: React.createElement: type should not be null, undefined, boolean, or number. It should be a string (for DOM elements) or a ReactClass (for composite components).

TypeError: _reactRouter.Router.run is not a function. (In '_reactRouter.Router.run', '_reactRouter.Router.run' is undefined)

は、私は、これは一般的に正しくいくつかのことをエクスポート/インポートしないことによって引き起こされていることがわかりました。あなたがデフォルトとしてアップローダをエクスポートするが、名前の輸出としてそれをインポートしている

import React from 'react'; 
import { Link } from 'react-router'; 

const Uploader = React.createClass({ 
    //displayName: 'Uploader', 
    render() { 
     return (
     <div> 
      <h1>Uploader</h1> 
     </div> 
    ) 
    } 
}); 

export default Uploader; 
+0

'router.js'ファイルは' public/'ディレクトリにありますか?公共もあなたの出力のようです。 – Herku

+0

@Herkuはい私はこの質問を投稿した直後にこれを理解することができました!しかし、ディレクトリを変更した後で私の質問が更新されました。なぜなら、それは私に奇妙なエラーを与えているからです。 – privateer35

答えて

0

を:それは以下のようにその構造を共有し、私のrouter.jsや私のコンポーネントのいずれかから来る

export default Uploader; 

import { Uploader } from './containers/Uploader'; 
// instead do 
import Uploader from './containers/Uploader'; 

ルータの設定は少しはあります奇妙な。 react-routerのどのバージョンをお使いですか?通常<Route>設定を<Router>にラップすることができます。 docsを参照してください。

+0

バージョン2.4.0を使用していますが、私は同意します。周りを見回した後、他の人たちが私のやり方とは違う方法で実装しているのを見ています。 – privateer35

関連する問題