webpacke2でReactの開発環境を作る。
フォルダ・ファイルを作る
$ mkdir react1
$ cd react1
$ mkdir src
$ mkdir public
$ touch public/index.html
$ touch src/index.js
$ touch webpack.config.js
$ touch postcss.config.js
インストール
$ npm init -y
$ npm i -D webpack webpack-dev-server
$ npm i -D babel-loader babel-core babel-plugin-syntax-dynamic-import babel-preset-es2015 babel-preset-react
$ npm i -D extract-text-webpack-plugin
$ npm i -D style-loader css-loader postcss postcss-loader autoprefixer cssnano precss react-css-modules
$ npm i -D react react-dom
package.jsonは下記のようになった。
{ "name": "react1", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { "autoprefixer": "^6.7.7", "babel-core": "^6.24.0", "babel-loader": "^6.4.1", "babel-plugin-syntax-dynamic-import": "^6.18.0", "babel-preset-es2015": "^6.24.0", "babel-preset-react": "^6.23.0", "css-loader": "^0.27.3", "cssnano": "^3.10.0", "extract-text-webpack-plugin": "^2.1.0", "postcss": "^5.2.16", "postcss-loader": "^1.3.3", "precss": "^1.4.0", "react": "^15.4.2", "react-css-modules": "^4.1.0", "react-dom": "^15.4.2", "style-loader": "^0.16.0", "webpack": "^2.3.1", "webpack-dev-server": "^2.4.2" } }
webpack.config.jsを作る
var path = require('path'); const webpack = require('webpack'); var ExtractTextPlugin = require('extract-text-webpack-plugin'); module.exports = { entry: path.resolve(__dirname, 'src/index.js'), output: { filename: 'bundle.js', path: path.resolve(__dirname, 'public') }, devServer: { contentBase: path.resolve(__dirname, 'public'), port: 8080, }, module: { rules: [ { test: /\.css$/, use: ExtractTextPlugin.extract({ fallback: "style-loader", use: [ 'css-loader', 'postcss-loader' ], }) }, { test: /\.js$/, use: [{ loader: 'babel-loader', options: { presets: [ ['es2015', {modules: false}], 'react' ], plugins: ['syntax-dynamic-import'] } }] } ] }, plugins: [ new ExtractTextPlugin('styles.css'), new webpack.optimize.UglifyJsPlugin({ beautify: false, mangle: { screw_ie8: false, keep_fnames: false }, compress: { screw_ie8: true }, comments: false }) ] };
postcss.config.jsを作る
module.exports = { plugins: [ require('autoprefixer')({}), require('cssnano')({}), require('precss')({}), require('react-css-modules')({}) ] }
public/index.htmlを作る
<!doctype html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>React App</title> </head> <body> <div id="root"></div> <script src="bundle.js"></script> </body> </html>
src/index.jsを作る
import React from 'react'; import ReactDOM from 'react-dom'; ReactDOM.render( <h1>Hello, world!</h1>, document.getElementById('root') );
webpackを実行する。実行後、public/bundle.jsが作成される。
$ webpack
webpack-dev-serverを実行する。実行後、http://localhost:8080にアクセスすると確認できる。
$ webpack-dev-server