具有反应模块的Webpack提供意外令牌

Apa*_*ear 8 javascript npm reactjs webpack

一直在尝试使用react-spin npm模块,但是当我尝试使用webpack构建bundle.js时,我收到以下错误:

Module parse failed: /Users/nir/browsewidget/node_modules/react-spin/src/main.js Line 29: Unexpected token <
You may need an appropriate loader to handle this file type.
|   render: function() {
|     return (
|       <span ref="container" />
|     );
|   }
 @ ./js/widget.jsx 4:14-35
Run Code Online (Sandbox Code Playgroud)

我猜这个模块里面有jsx,但是我不明白为什么它不能构建?在构建捆绑包时,react-spin是否需要一些额外的配置?

这是我的完整webpack.config.js:

module.exports = {
    entry: "./js/widget.jsx",
    output: {
        path: __dirname,
        filename: "bundle.js"
    },
    module: {
        loaders: [
            {
                    test: /\.jsx$/, 
                    loader: 'jsx-loader?insertPragma=React.DOM&harmony'
            }
        ]
    },
    externals: {
        //don't bundle the 'react' npm package with our bundle.js
        //but get it from a global 'React' variable
        'react': 'React'
    },
    resolve: {
        extensions: ['','.js','.jsx']
    }
};
Run Code Online (Sandbox Code Playgroud)

Mic*_*ley 16

您的加载程序配置为仅转换以下结尾的文件.jsx:

 test: /\.jsx$/,
Run Code Online (Sandbox Code Playgroud)

(美元符号表示字符串结尾.)

你可以改成它

test: /\.jsx?$/,
Run Code Online (Sandbox Code Playgroud)

转换.js.jsx文件,但node_modules通过JSX加载器运行每个JavaScript文件可能会相当慢.

我相信你应该能够设置一个exclude选项,/node_modules/然后include为你关心的特定模块选择一个选项(react-spin),但最好的解决方案是在发布的JavaScript版本中不使用JSX的程序包 - 作者react-spin可能会对对此效果的拉取请求.(编辑:它似乎已经存在,请参阅thomasboyt/react-spin#3)

最后,react-spin 非常小,因此您可以考虑在自己的项目中自己实现它(这样您就不必担心webpack加载器问题).