Webpack с модулями react, дающими неожиданный токен

пытался использовать модуль npm react-spin, но когда я пытаюсь создать пакет.js с webpack, я получаю следующую ошибку:

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

Я предполагаю, что в этом модуле есть jsx, но я не понимаю, почему его нельзя построить? Требуется ли react-spin дополнительная конфигурация при создании пакета?

вот мой полный webpack.конфиг.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']
    }
};

1 ответов


ваш загрузчик настроен только на преобразование файлов, которые заканчиваются на .jsx:

 test: /\.jsx$/,

(знак доллара означает конец строки.)

вы можете изменить его на

test: /\.jsx?$/,

трансформировать .js и .jsx файлы, но запуск каждого файла JavaScript в node_modules через загрузчик JSX, вероятно, будет довольно медленным.

я считаю, вы должны быть в состоянии установить на /node_modules/ и include вариант для специфического модуль, о котором вы заботитесь (react-spin), но лучшим решением является то, что пакеты не используют JSX в опубликованной версии JavaScript-автор react-spin может быть открыт для запроса pull на этот счет. (Edit: похоже, что он уже есть, см. thomasboyt / react-spin#3)

наконец, react-spin очень маленький, поэтому вы рассматриваете возможность реализации его самостоятельно в своем собственном проекте (чтобы вам не приходилось беспокоиться о проблемах с загрузчиком webpack).