Я пытаюсь создать новый проектact.js и у меня ошибка компиляции - PullRequest
0 голосов
/ 09 июля 2019

Я настраиваю новый реактивный проект и пытаюсь скомпилировать веб-пакет, и у него была синтаксическая ошибка. По моим предположениям, это связано с проблемой package.json и webpack.config.js

это мой код pacakage.json

{
  "name": "blog_project",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "webpack": "webpack"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@babel/core": "^7.5.0",
    "@babel/preset-env": "^7.5.2",
    "@babel/preset-react": "^7.0.0",
    "babel-loader": "^8.0.6",
    "babel-preset-env": "^1.7.0",
    "css-loader": "^3.0.0",
    "node-sass": "^4.12.0",
    "webpack": "^4.35.3",
    "webpack-cli": "^3.3.5"
  },
  "dependencies": {
    "babel-preset-react": "^6.24.1"
    "react": "^16.8.6",
    "react-dom": "^16.8.6"

  }
}

и вот мой код webpack.config.js

const path = require('path');

module.exports = {
    mode: 'none',
    entry: {
        app: './src/index.js'
    },
    watch: true,
    devtool: 'source-map',
    output: {
        filename: '[name].bundle.js',
        path: path.resolve(__dirname, 'dist')
    },
    module: {
        rules: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                use: ['babel-loader']
            }
        ]
    },
    resolve: {
        extensions: [
            '.js'
        ]
    }
}

и код index.js Я пытаюсь скомпилировать и показать какой-то тег div в веб-браузере

import React from 'react'
import ReactDOM from 'react-dom'

class RootEl extends React.Component {

    render() {
        return <div><h1>This is JSX!</h1></div>;
    }

}

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

и когда я пытаюсь скомпилировать этот код, а затем веб-пакет показывает мне сообщение об ошибке

ERROR in ./src/index.js
Module build failed (from ./node_modules/babel-loader/lib/index.js):
SyntaxError: C:\blog\blog\static\src\index.js: Unexpected token (7:15)

   5 |
   6 |     render() {
>  7 |         return <div>This is XML!</div>;
     |                ^
   8 |     }
   9 |
  10 | }

1 Ответ

1 голос
/ 09 июля 2019

JSX (как <div> внутри javascript) не является допустимым синтаксисом javascript. Вам нужно Babel, чтобы преобразовать эти JSX в действительный JavaScript. Чтобы сделать это, вы должны сказать Вавилону, КАК это перенести.

Вы должны установить @babel/preset-react и настроить babel так, чтобы он использовал эту предустановку.

module: {
        rules: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                use: [
                  {
                    loader: 'babel-loader',
                    options: {
                      presets: [
                        ['@babel/preset-react'],
                      ],
                    },
                  },
                ]
            }
        ]
    },

Пресеты - это просто набор правил, на которые может ссылаться babel при попытке перенести коды.

...