前幾天一直在學習webpack,總算比以前學習的時候有了點收穫,因此在昨天發佈了一篇webpack入門筆記,今天繼續使用webpack練了練手,搭建了一個React開發環境,若是還不熟悉的童鞋能夠看一下昨天發佈的筆記:入門webpack筆記css
在任意目錄下,新建一個文件夾做爲你的項目文件夾,命名隨意。隨後使用命令行工具,切換到該文件夾,鍵入npm init
進行初始化(遇到的問題一直回車就行了),初始化完成以後能夠看到生成了一個package.json
文件。html
隨後在該項目文件夾下新建兩個文件夾:/dist
和/src
,其中/src
用於放置開發的源碼,/dist
用於放置「編譯」後的代碼。node
隨後在/src
目錄下新建index.html
、index.css
和index.js
文件react
經過命令行使用webpack 4須要安裝兩個模塊:webpack和webpack-cli,都安裝爲開發環境依賴。webpack
npm install -D webpack webpack-cli
複製代碼
安裝完成以後能夠看到你的package.json
文件發生了變化,在devDependencies屬性下多了兩個包的屬性。git
1.安裝最基本的插件:github
npm install -D html-webpack-plugin clean-webpack-plugin webpack-dev-server css-loader webpack-merge style-loader
複製代碼
2.在項目文件夾下新建文件webpack.base.conf.js
,表示最基本的配置文件,內容以下:web
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
module.exports = {
entry: './src/index.js',
output: {
filename: 'bundle.[hash].js',
path: path.join(__dirname, '/dist')
},
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
}
]
},
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html'
}),
new CleanWebpackPlugin(['dist'])
]
};
複製代碼
其中,/src/index.html
是你的網站入口HTML文件,/src/index.js
是你的入口js文件。npm
3.在項目文件夾下新建webpack.dev.conf.js
文件,表示開發環境下的配置。內容以下:json
const merge = require('webpack-merge');
const baseConfig = require('./webpack.base.conf.js');
module.exports = merge(baseConfig, {
mode: 'development',
devtool: 'inline-source-map',
devServer: {
contentBase: './dist',
port: 3000
}
});
複製代碼
4.在項目文件夾下新建webpack.prod.conf.js
文件,表示生產環境的配置,內容以下:
const merge = require('webpack-merge');
const baseConfig = require('./webpack.base.conf.js');
console.log(__dirname);
module.exports = merge(baseConfig, {
mode: 'production'
});
複製代碼
配置了三個配置文件以知足兩個不一樣環境下的代碼構建,使用語義化較好的npm scripts
來構建代碼有利於簡化工做。
添加新的scripts內容到package.json
文件的scripts
屬性,記得用雙引號引發來,其屬性以下:
// package.json
{
"scripts": {
"start": "webpack-dev-server --open --config webpack.dev.conf.js",
"build": "webpack --config webpack.prod.conf.js"
}
}
複製代碼
配置完以後,能夠嘗試修改/src/index.html
、/src/index.js
或/src/index.css
,運行npm scripts命令查看效果。
好比按照如下內容建立文件:
index.html
<html>
<head>
<meta charset="utf-8"/>
<title>React & Webpack</title>
</head>
<body>
<div id="root">
<h1>Hello React & Webpack!</h1>
</div>
</body>
</html>
複製代碼
index.css
body {
background-color: blue;
}
#root {
color: white;
background-color: black;
}
複製代碼
index.js
import './index.css';
console.log('Success!');
複製代碼
隨後使用命令npm run start
,便可看到效果。修改css或者js文件,保存以後能夠看到瀏覽器自動刷新而且展現出了你剛剛所作的更改。
作到這裏,一個基本的開發環境已經搭建出來了,下一步就是針對React特定的環境,配置不一樣的webpack來進行構建。
使用React開發,主要是ES6(雖然最近全部高級瀏覽器都已經支持ES6,可是仍是要爲低級IE作準備)和React的JSX語法須要進行轉換。下面針對這兩種語法進行配置。
Babel是一個優秀的JavaScript編譯器(這句話源自Babel官網),經過Babel的一些插件,能夠將JSX語法、ES6語法轉換爲ES5的語法,使得低級瀏覽器也能夠運行咱們寫的代碼。
經過如下命令安裝Babel預設、babel-loader
、babel-polyfill
和babel-preset-react
:
npm install -D babel-preset-env babel-loader babel-polyfill babel-preset-react
複製代碼
在項目文件夾的根目錄下新建一個.babelrc
的文件(Windows下沒法直接建立,能夠經過將文件命名爲.babelrc.
達到建立的目的),在文件內輸入如下內容:
{
"presets": ["env", "react"]
}
複製代碼
webpack.base.conf.js
在module.rules
中插入一個新對象,內容以下:
{
test: /\.js$/,
use: 'babel-loader',
exclude: /node_modules/
}
複製代碼
react
和react-dom
模塊npm install --save react react-dom
複製代碼
在/src
中新建一個App.js
文件,內容以下:
import React from 'react';
class App extends React.Component {
render() {
return <div>
<h1>Hello React & Webpack!</h1>
<ul>
{
['a', 'b', 'c'].map(name => <li>{`I'm ${name}!`}</li> )
}
</ul>
</div>
}
}
export default App;
複製代碼
清空index.js
以後在其中寫入以下內容:
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import './index.css';
ReactDOM.render(<App/>, document.getElementById('root'));
複製代碼
使用npm run start
命令打開頁面能夠看到使用React寫出來的效果了。
打開瀏覽器查看編譯後的代碼,找到App組件中的map函數這一段,能夠發現ES6的語法已經被轉換到了ES5的語法:
['a', 'b', 'c'].map(function (name) {
return _react2.default.createElement(
'li',
null,
'I\'m ' + name + '!'
);
})
複製代碼
箭頭函數被寫成了function匿名函數。
上面的步驟,我已經從新跑了一遍,一步一步按照來就能夠搭建成功,有興趣的童鞋能夠照着跑一遍。^_^
另外若是還有錯誤的話,請提醒我一下,我必定會立刻改正的!