Нужен соответствующий загрузчик для работы с этим типом файлов

Я собираюсь реализовать разделение кода с рендерингом на стороне сервера. Для этого я использую реактивную загрузку.

Но при использовании импорта я получаю следующую ошибку.

Я показываю другие сообщения, но у меня ничего не работает.

Для работы с этим типом файлов вам может потребоваться соответствующий загрузчик. | var Content = (0, _reactLoadable.default) ({| loader: function loader () {return import ('./ components / Content'); |},

Мой код выглядит так:

import Loadable from 'react-loadable';

const Content = Loadable({
  loader: () => import('./components/Content'),
  loading: Loading
});

package.json

"dependencies": {
    "@babel/plugin-syntax-dynamic-import": "^7.2.0",
    "acorn-dynamic-import": "^4.0.0",
    "express": "^4.16.4",
    "isomorphic-fetch": "^2.2.1",
    "react": "^16.7.0",
    "react-dom": "^16.7.0",
    "react-loadable": "^5.5.0",
    "react-redux": "^5.1.1",
    "react-router": "^4.3.1",
    "react-router-config": "^1.0.0-beta.4",
    "react-router-dom": "^4.3.1",
    "redux": "^4.0.1",
    "redux-thunk": "^2.3.0"
  },
  "devDependencies": {
    "@babel/cli": "^7.2.3",
    "@babel/core": "^7.2.2",
    "@babel/node": "^7.2.2",
    "@babel/plugin-proposal-class-properties": "^7.2.0",
    "@babel/plugin-transform-runtime": "^7.2.0",
    "@babel/preset-env": "^7.3.1",
    "@babel/preset-react": "^7.0.0",
    "babel-core": "^7.0.0-bridge.0",
    "babel-jest": "^24.0.0",
    "babel-loader": "^7.1.5",
    "css-loader": "^1.0.1",
    "cypress": "^3.1.3",
    "enzyme": "^3.8.0",
    "enzyme-adapter-react-16": "^1.7.1",
    "enzyme-to-json": "^3.3.5",
    "extract-text-webpack-plugin": "^4.0.0-beta.0",
    "fetch-mock": "^7.2.5",
    "jest": "^24.0.0",
    "jest-fetch-mock": "^2.0.1",
    "json-loader": "^0.5.7",
    "nodemon": "^1.18.9",
    "npm-run-all": "^4.1.5",
    "open": "0.0.5",
    "redux-devtools": "^3.4.2",
    "redux-mock-store": "^1.5.3",
    "style-loader": "^0.23.1",
    "uglifyjs-webpack-plugin": "^2.0.1",
    "webpack": "^4.26.1",
    "webpack-cli": "^3.1.2",
    "webpack-dev-server": "^3.1.14",
    "webpack-node-externals": "^1.7.2"
  },
  "babel": {
    "presets": [
      "@babel/preset-env",
      "@babel/preset-react"
    ],
    "plugins": [
      "@babel/plugin-transform-runtime",
      "@babel/plugin-proposal-class-properties",
      "react-loadable/babel",
      "@babel/plugin-syntax-dynamic-import"
    ]
  }

webpack.config.js

return {
        context: path.join(__dirname, "src"),
        entry: './index.js',
        mode: isProduction ? "production" : "development",
        devtool: isProduction ? "none" : "source-map",

        resolve: {
            extensions: [".js", ".jsx"]
        },

        module: {
            rules: [
                {
                    test: /\.(js|jsx)$/,
                    loader: "babel-loader",
                    exclude: /node_modules/,
                    options: {
                        presets: ['@babel/preset-env', '@babel/preset-react'] 
                    }
                },
                {
                    test: /\.(ttf|eot|svg|woff|png|jpg)$/,
                    loader: "file-loader",
                    options: {
                        name: "[path][name].[ext]?[hash]"
                    }
                },
                {
                    test: /\.css$/,
                    use: [{ loader: 'style-loader' }, { loader: 'css-loader' }],
                }
            ]
        },

        optimization: isProduction ? {
            minimizer: [
              new UglifyJsPlugin({
                cache: true,
                parallel: true,
                sourceMap: true
              }),
              new OptimizeCSSAssetsPlugin({})
            ]
          } : {},

        devServer: {
            contentBase: path.resolve(__dirname, "dist"),
            historyApiFallback: true,
        },

        output: {
            filename: 'bundle.js',
            path: path.resolve(__dirname, "dist"),
            publicPath: "/",
        }
    };

person ketan    schedule 28.01.2019    source источник
comment
Можете ли вы предоставить свой webpack конфиг?   -  person ReasonX7    schedule 28.01.2019
comment
@ ReasonX7 Я отредактировал свой вопрос.   -  person ketan    schedule 28.01.2019
comment
import() пока не поддерживается на Node.js   -  person ᆼᆺᆼ    schedule 28.01.2019
comment
Я вижу, что вы установили @babel/preset-env & @babel/preset-react пресеты, но они не используются в вашей конфигурации. Попробуйте добавить: { options: { presets: ['@babel/preset-env', '@babel/preset-react'] } }   -  person ReasonX7    schedule 28.01.2019
comment
Вы видели базовый пример использования babel-loader? github.com/babel/babel-loader#usage   -  person ReasonX7    schedule 28.01.2019
comment
Версия @pete NodeJS в этом случае определенно не проблема, поскольку она используется только для запуска сборки webpack, а не самого приложения, из которого вызывается import().   -  person ReasonX7    schedule 28.01.2019
comment
@ ReasonX7 извините за поздний ответ, но не повезло. Проверить мой отредактированный веб-пакет   -  person ketan    schedule 29.01.2019
comment
@ketan Извините, я не заметил, что вы указали конфиг babel в package.json.   -  person ReasonX7    schedule 29.01.2019


Ответы (1)


Я искал в Google react loadable babel 7 и нашел этот запрос на перенос, который все еще открыт: https://github.com/jamiebuilds/react-loadable/pull/151. Скорее всего, на данный момент библиотека не имеет активной поддержки.

Хорошая новость в том, что вы используете React v16.7, который уже поддерживает отложенную загрузку. Документы для оформления заказа: https://reactjs.org/docs/code-splitting.html#reactlazy. Для этого не требуются какие-либо дополнительные babel пресеты или плагины - вы сможете использовать его с уже имеющимися настройками.

person ReasonX7    schedule 29.01.2019
comment
Но ведь он не поддерживает рендеринг на стороне сервера? React.lazy and Suspense is not yet available for server-side rendering. - person ketan; 30.01.2019
comment
Да, серверный рендеринг пока не поддерживается. Если вам действительно нужен рендеринг на стороне сервера, вы можете поискать для этого другую библиотеку, например react-universal-component или понизить babel до версии 6, чтобы запустить react-loadable. - person ReasonX7; 30.01.2019
comment
В порядке. Спасибо за вашу помощь - person ketan; 30.01.2019