Как правильно прикрепить реагирующий код к HTML?(Я получаю сообщение об ошибке «Целевой контейнер не является элементом DOM») - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь настроить реагирующее веб-приложение с помощью webpack 4, но не могу заставить его работать, я получаю «Uncaught Invariant Violation: целевой контейнер не является элементом DOM». ошибка консоли.

Я провел последние 2 дня, пробуя все, и я прочитал все подобные проблемы здесь в stackoverflow, но у меня ничего не получалось.

Это должна быть глупая ошибка (опечатка или неверная конфигурация), но я ее не вижу, по какой-то причине не удается найти мой html-файл или элемент div с идентификатором приложения.

Структура моего проекта:

Structure

Это сгенерированный html плагином html webpack:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Webpack App</title>
  </head>
  <body>
    <div id='app'></div>
  <script type="text/javascript" src="bundle.js"></script>
</body>
</html>

Мой HTML-шаблон:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Webpack App</title>
  </head>
  <body>
    <div id='app'></div>
  </body>
</html>

index.js:

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

ReactDOM.render(
  <App />,
  document.getElementById('app')
);

App.js:

import React from 'react';

const App = () => {

  return (
    <div>
      {'foobar'}
    </div>
  );
};

export default App;

Конфигурация веб-пакета:

const path = require('path');
const HtmlWebPackPlugin = require("html-webpack-plugin");

module.exports = {
  entry: "./src/index.js",
  output: {
    path: path.join(__dirname, './dist'),
    filename: 'bundle.js'
  },
  devServer: {
    contentBase: './dist'
  },
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
        use: {
          loader: "babel-loader"
        }
      }
    ]
  },
  resolve: {
    extensions: ['*', '.js', '.jsx']
  },
  plugins: [
    new HtmlWebPackPlugin({
      template: `./src/index.html`,
      filename: `index.html`
    })
  ]
};

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

Я нашел решение. Я импортировал компонент из одного из моих проектов пользовательского интерфейса в App.js, я удалил его, и теперь он работает нормально.

0 голосов
/ 11 апреля 2019

Я скопировал предоставленный вами код с той же файловой структурой (не включая файлы jest и eslint), и он успешно запустился. Следовательно, это, вероятно, несоответствия в вашем веб-пакете или версиях Babel, которые вызывают ошибку. Может быть, вы можете попробовать посмотреть на мой package.json по сравнению с вашим. Надеюсь, это поможет!

package.json

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "webpack-dev-server --mode development"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@babel/core": "^7.4.3",
    "@babel/preset-env": "^7.4.3",
    "@babel/preset-react": "^7.0.0",
    "babel": "^6.23.0",
    "babel-loader": "^8.0.5",
    "html-webpack-plugin": "^3.2.0",
    "http-server": "^0.11.1",
    "webpack": "^4.29.6",
    "webpack-cli": "^3.3.0",
    "webpack-dev-server": "^3.3.1"
  },
  "dependencies": {
    "react": "^16.8.6",
    "react-dom": "^16.8.6"
  }
}

.babelrc

{
  "presets": [
    "@babel/preset-env",
    "@babel/preset-react"
  ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...