一歩一歩Reactの世界に入る(React+Webpack+ES 6コンビネーション構成)
多くのブログを見て、ほとんどはプロファイルを一筆持ってきたか、いっそプロファイルを与えないが、環境構築は初心者にとって困難で重要であり、明らかにネット上のブログは初心者が勉強を始めるのに不利である.BZは最初から、一歩一歩webpackを配置し、ES 6+Reactの組み合わせを使って開発できるようにするつもりで、くだらないことは言わないで、一緒にWebpack+ES 6+Reactの旅を始めましょう.
私のgithubの中でcloneあるいはforkができて、本博文はdemo 01に対応しますhttps://github.com/zrysmt/react-demo
もちろん、このブログの最後にまとめた部分を使用したり、私のgithubから入手したりして、プラグイン
webpack.config.js
.babelrc
入口app.js,es 6構文
エントリファイルapp.js
取付
注意:babelrcファイルは上のファイルと同じでも必要です.webpack.config.js
React,es 6構文の使用
取付 webpack.config.js
使いやすい
package.json
webpack.config.js
忘れないで.babelrcファイル
Webpack-dev-serverはホットスワップ(ホットスワップHRM)をサポートし、HRM機能を使用するにもコマンドライン方式とNodeの2つの方式がある.js API方式.
Node.js API方式は3つの構成を行う必要がある:1)
reactを使用してコードを記述すると、変更した部分を自動的にリフレッシュできます.しかし、これは自動的にページをリフレッシュするのとは異なります.hot-loaderはページをリフレッシュするのではなく、変更した部分を置き換えるだけです.インストール修正.babelrc webpackを修正する.config.js serverを追加する.jsファイル
どのように使用しますか?–コマンドライン
ブラウザで
コマンドライン方式は比較的簡単で、
https://github.com/zrysmt/react-website/tree/master/mysite02
この例では、次のコマンドを実行します.
私のgithubでhttps://github.com/zrysmt/react-demo中cloneまたはfork、このブログはdemo 01とdemo 04に対応しています
参考阅读:-react-facebook官网-react中国语版-极客学院-React入门実例教程-阮一峰-【訳】在React.jsではES 6+-Reactを用いる.jsでよく使われるES 6表記まとめ-react-hot-loader-WEBPACK DEV SERVERを使用して説明
私のgithubの中でcloneあるいはforkができて、本博文はdemo 01に対応しますhttps://github.com/zrysmt/react-demo
もちろん、このブログの最後にまとめた部分を使用したり、私のgithubから入手したりして、プラグイン
npm install
をすべてインストールし、webpack
を実行してコンパイルすることもできます.-コマンドnpm init
を使用してパッケージ管理ファイルを新規作成します.プロジェクトのルートディレクトリにwebpack.config.js
ファイルを追加します.基本的な構成は次のとおりです.var webpack = require('webpack');
module.exports = {
entry:{
page: "./src/app.js"
},
output: {
path: './build',
filename: "bundle.js"
},
module: {
loaders: [
{test:/\.js$/,exclude: /node_modules/,loader:''},//
//
]
}
};
1.es 6のサポート
npm i --save-dev babel-core babel-loader babel-preset-es2015
webpack.config.js
{ test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader' }
.babelrc
{
"presets": [
"es2015"
]
}
入口app.js,es 6構文
var p = require("./es6test/es6test1.js")
//es6test1.js
import Point from './es6test2';
let p = new Point(1,2);
console.log(p.toString());
//es6test2.js
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
toString() {
return '(' + this.x + ', ' + this.y + ')';
}
}
export default Point;
2.React構文のサポート
{test:/\.jsx$/,exclude: /node_modules/,loader:'jsx-loader?harmony'}
エントリファイルapp.js
var React = require('react');
var ReactDOM = require('react-dom');
var HelloMessage = React.createClass({
render: function() {
return <h1>Hello {this.props.name}h1>;
}
});
ReactDOM.render( <HelloMessage name="John" />,
document.getElementById('example')
);
3.Reactとes 6の同時サポート
npm i --save-dev babel-preset-react
注意:babelrcファイルは上のファイルと同じでも必要です.webpack.config.js
{test:/\.jsx?$/,exclude: /node_modules/,loader: 'babel', query: {presets: ['es2015', 'react']}},
// es6 react
{test:/\.jsx?$/,exclude: /node_modules/,loader:'babel?presets[]=react,presets[]=es2015'},
// es6 react
React,es 6構文の使用
import React from 'react';
import ReactDOM from 'react-dom';
class HelloMessage extends React.Component {
render() {
return <h1> Hello { this.props.name } h1>;
}
}
ReactDOM.render( <HelloMessage name="zry" />,
document.getElementById('example')
);
4.残りの構成
css/sass
npm i --save-dev style-loader css-loader sass-loader node-sass
{ test: /\.css$/, loader: "style!css" },
{ test: /\.scss$/, loader: "style!css!sass" }, //sass
使いやすい
import "./home/home.css";
import "./home/home.scss";
5.基本機能構成のまとめ:
package.json
{
"name": "react-demo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "webpack-dev-server --hot --progress --colors",
"build": "webpack --progress --colors"
},
"repository": {
"type": "git",
"url": "zry"
},
"author": "",
"license": "ISC",
"devDependencies": {
"babel-core": "^6.18.0",
"babel-loader": "^6.2.7",
"babel-preset-es2015": "^6.18.0",
"babel-preset-react": "^6.16.0",
"css-loader": "^0.25.0",
"jsx-loader": "^0.13.2",
"node-sass": "^3.10.1",
"react": "^15.3.2",
"react-dom": "^15.3.2",
"sass-loader": "^4.0.2",
"style-loader": "^0.13.1",
"webpack": "^1.13.3"
}
}
webpack.config.js
var webpack = require('webpack');
module.exports = {
entry:{
page: "./src/app.js"
},
output: {
path: './build',
filename: "bundle.js"
},
module: {
loaders: [
// { test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader' },// es6
// {test:/\.jsx?$/,exclude: /node_modules/,loader:'jsx-loader?harmony'},// react
// {test:/\.jsx?$/,exclude: /node_modules/,loader:'babel?presets[]=react,presets[]=es2015'},// es6 react
{test:/\.jsx?$/,exclude: /node_modules/,loader: 'babel', query: {presets: ['es2015', 'react']}},// es6 react
{ test: /\.css$/, loader: "style!css" },
{ test: /\.scss$/, loader: "style!css!sass" }, //sass
]
},
resolve: {
extensions: ['', '.js', '.json']
},
plugins: [
new webpack.NoErrorsPlugin()
],
devtool: 'source-map'
};
忘れないで.babelrcファイル
{
"presets": [
"es2015"
]
}
6.Reactはホットスワップ対応
Webpack-dev-serverはホットスワップ(ホットスワップHRM)をサポートし、HRM機能を使用するにもコマンドライン方式とNodeの2つの方式がある.js API方式.
6.1 Node.js API方式
Node.js API方式は3つの構成を行う必要がある:1)
webpack/hot/dev-server
をwebpackプロファイルのentry項目に追加する;2)new webpack.HotModuleReplacementPlugin()
をwebpackプロファイルのplugins項目に追加する.3)hot:true
をwebpack-dev-serverの構成項目に加える.reactを使用してコードを記述すると、変更した部分を自動的にリフレッシュできます.しかし、これは自動的にページをリフレッシュするのとは異なります.hot-loaderはページをリフレッシュするのではなく、変更した部分を置き換えるだけです.インストール
npm i --save-dev react-hot-loader webpack-dev-server
{
"presets": [
"es2015"
],
"plugins":["react-hot-loader/babel"]
}
var webpack = require('webpack');
module.exports = {
// :entry
entry: [
"webpack-dev-server/client?http://127.0.0.1:3000",
"webpack/hot/only-dev-server",
"./src/app.js"
],
// :output
output: {
path: __dirname,
filename: "build/bundle.js",
publicPath: "/build"
},
module: {
loaders: [
{ test: /\.jsx?$/, exclude: /node_modules/, loader: 'babel', query: { presets: ['es2015', 'react'] } }, // es6 react
{ test: /\.css$/, loader: "style!css" },
{ test: /\.scss$/, loader: "style!css!sass" }, //sass
]
},
resolve: {
extensions: ['', '.js', '.json']
},
plugins: [
new webpack.NoErrorsPlugin(), //
new webpack.HotModuleReplacementPlugin() // :webpack
],
devtool: 'source-map'
};
var webpack = require('webpack');
var WebpackDevServer = require('webpack-dev-server');
var config = require('./webpack.config');
new WebpackDevServer(webpack(config), {
publicPath: config.output.publicPath,
hot: true,
historyApiFallback: true
}).listen(3000, 'localhost', function(err, result) {
if (err) {
return console.log(err);
}
console.log('Listening at http://localhost:3000/')
});
どのように使用しますか?–コマンドライン
webpack //
node server.js // node
ブラウザで
localhost:3000
を入力すると結果が表示され、cssファイルを変更し、保存するとWebページが自動的にブラウザに表示されます.6.2命令ライン方式
コマンドライン方式は比較的簡単で、
--inline --hot
を追加するだけです.例の位置は私のgithubです.https://github.com/zrysmt/react-website/tree/master/mysite02
この例では、次のコマンドを実行します.
webpack-dev-server --history-api-fallback --progress --profile --inline --colors --hot --port 4000
私のgithubでhttps://github.com/zrysmt/react-demo中cloneまたはfork、このブログはdemo 01とdemo 04に対応しています
参考阅读:-react-facebook官网-react中国语版-极客学院-React入门実例教程-阮一峰-【訳】在React.jsではES 6+-Reactを用いる.jsでよく使われるES 6表記まとめ-react-hot-loader-WEBPACK DEV SERVERを使用して説明