Как настроить webpack и babel, когда приложение React не загружается на localhost: 3000 - PullRequest
0 голосов
/ 04 августа 2020

Я изучил несколько руководств, но, похоже, ни один из них не работает. Я могу настроить webpack, babel и некоторые простые компоненты React, но они не отображаются на моем локальном хосте: 3000. Любые предложения относительно того, что я делаю неправильно, так как в терминале нет журналов консоли или ошибок.

package. json

{
  "name": "frontend",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "webpack-dev-server --mode development",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {},
  "devDependencies": {
    "@babel/core": "^7.11.0",
    "@babel/preset-env": "^7.11.0",
    "@babel/preset-react": "^7.10.4",
    "babel-loader": "^8.1.0",
    "react": "^16.13.1",
    "react-dom": "^16.13.1",
    "react-hot-loader": "^4.12.21",
    "webpack": "^4.44.1",
    "webpack-cli": "^3.3.12",
    "webpack-dev-server": "^3.11.0"
  }
}

.babelr c

{
  "presets":
  [
    "@babel/preset-env",
    "@babel/preset-react"
  ]
}

webpack.config. js

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


module.exports = {
  devtool: 'inline-source-map',
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist',),
    publicPath: '/',
    filename: 'bundle.js'
  },
  devServer: {
    port: 3000,
    contentBase: './dist',
    hot: true
  },
  module: {
    rules: [
    {
      test: /\.(js|jsx)$/,
      exclude: /node_modules/,
      use: ['babel-loader']
    }
    ]
  },
  resolve: {
    extensions: ['*', '.js', '.jsx']
  },
  plugins: [
    new webpack.HotModuleReplacementPlugin()
  ],
};

индекс. html

<!DOCTYPE html>
<html>
 <head>
 <title>My React Configuration Setup</title>
 </head>
 <body>
 <div id="root"></div>
 <!-- <script src="./dist/bundle.js"></script> -->
 </body>
</html>

индекс. js

import React from "react";
import ReactDOM from "react-dom";
import Welcome from './App'

ReactDOM.render(<Welcome />, document.getElementById("root"));

module.hot.accept();

Приложение js

import React from 'react';

class Welcome extends React.Component {
  render() {
    return <h1>Hello World from React boilerplate</h1>;
  }
}

export default Welcome

1 Ответ

0 голосов
/ 04 августа 2020

Вы почти у цели.

  1. build bundle.js с помощью webpack команды из package.json с ниже
  "scripts": {
    "start": "webpack && webpack-dev-server --mode development",
    "test": "echo \"Error: no test specified\" && exit 1"
  },

или

  "scripts": {
    "build": "webpack",
    "start": "webpack-dev-server --mode development",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
Измените свойство webpack.config.js contentBase, так как ваш index.html уходит в root (вы можете переместить его в dist)
  devServer: {
    port: 3000,
    contentBase: './',
    hot: true
  },
Раскомментировать bundle.js импорт из index.html:
 <div id="root"></div>
    <script src="./dist/bundle.js"></script>
 </body>

Вы можете использовать create-react-app для очень быстрой инициализации пустого проекта React

...