Привет, мир с ReactJS, Webpack и Babel
Я хочу напечатать простой Hello World с React. Вот моя структура каталогов приложения:
webpack.config.js
const path = require('path');
module.exports = {
entry: {
app: './js/app.js'
},
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'build')
},
module: {
loaders: [
{
test: /\.js$/,
loader: 'babel-loader',
query: {
presets: ['es2015', 'react']
}
}
]
},
stats: {
colors: true
},
devtool: 'source-map'
};
JS / app.js
var React = require('react');
var ReactDOM = require('react-dom');
ReactDOM.render(
<h1>Hello, world!</h1>,
document.getElementById('root')
);
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href='http://fonts.googleapis.com/css?family=Roboto:400,300,700' rel='stylesheet' type='text/css'>
<link href="css/styles.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="root"></div>
<script src="build/app.bundle.js"></script>
</body>
</html>
package.json
{
"name": "es6-tutorial-react",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"webpack": "webpack --mode=development"
},
"repository": {
"type": "git",
"url": "git+https://github.com/ccoenraets/es6-tutorial-react.git"
},
"author": "",
"license": "ISC",
"bugs": {
"url": "https://github.com/ccoenraets/es6-tutorial-react/issues"
},
"homepage": "https://github.com/ccoenraets/es6-tutorial-react#readme",
"devDependencies": {
"@babel/core": "^7.1.2",
"@babel/preset-env": "^7.1.0",
"@babel/preset-react": "^7.0.0",
"babel-core": "^6.26.3",
"babel-loader": "^8.0.4",
"babel-preset-es2015": "^6.24.1",
"babel-preset-react": "^6.24.1",
"react": "^16.5.2",
"react-dom": "^16.5.2",
"webpack": "^4.20.2",
"webpack-cli": "^3.1.2"
}
}
Когда я бегу npm run webpack
возвращает ошибку:
Неверный объект конфигурации. Webpack был инициализирован с использованием объекта конфигурации, который не соответствует схеме API. - configuration.module имеет неизвестное свойство 'loaders'. Эти свойства являются действительными: object { defaultRules?, exprContextCritical?, exprContextRecursive?, exprContextRegExp?, exprContextRequest?, noParse?, rules?, strictExportPresence?, strictThisContextOnImports?, unknownContextCexical??, wrappedContextRecursive?, wrappedContextRegExp? } -> Опции, влияющие на нормальные модули (
NormalModuleFactory
). нпм ERR! код ELIFECYCLE npm ERR! errno 1 npm ERR! es6-tutorial-react@1.0.0 веб-пакет:webpack --mode=development
нпм ERR! Статус выхода 1 нпм ERR! нпм ERR! Не удалось выполнить скрипт веб-пакета es6-tutorial-react@1.0.0. нпм ERR! Это, вероятно, не проблема с npm. Вероятно, есть дополнительные выходные данные регистрации.нпм ERR! Полный журнал этого прогона можно найти в: npm ERR!
C: \ Users \ User \ AppData \ Roaming \ NPM-cache_logs\2018-10-15T10_57_59_640Z-debug.log
Пожалуйста. Помогите, спасибо.
2 ответа
Как уже сказал @Dominic, используйте rules
собственность вместо сразу loaders
, Который выглядит следующим образом:
...
module: {
rules: [
{
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env', '@babel/preset-react']
}
}
}
]
},
...
Еще одна вещь, которую вы должны исправить, в вашем index.html
:
Change this: <script src="build/app.bundle.js"></script>
To this: <script src="build/bundle.js"></script>
Потому что в вашем webpack.config.js вы указали имя выходного файла bunlde.js
не app.bundle.js
,
Надеюсь, что это помогло!
Вы используете код из webpack v3, но установили webpack v4. Грузчики называется rules
в v4. Вместо этого следуйте актуальному руководству: https://webpack.js.org/guides/getting-started/ или https://www.valentinog.com/blog/react-webpack-babel/ т. Д.
Вы также установили новые пресеты из @babel
поэтому убедитесь, что ваш.babelrc верен и не следует какому-то старому руководству <= v6.
Уменьшите версию, ваша проблема будет решена.
"babel-cli": "^6.26.0",
"babel-core": "^6.26.3",
"babel-eslint": "^8.2.3",
"babel-loader": "^7.1.4",
"babel-preset-env": "^1.7.0",
"babel-preset-react": "^6.24.1",