1. 程式人生 > >搭建React環境的webpack4.0+的基本配置

搭建React環境的webpack4.0+的基本配置

      近期一直在學習使用react,雖然網上看到很多關於react不好或者怎麼樣的新聞,但是作為一個前端開發的菜鳥級選手,還是需要學習一下react的,學習react首先就得搭建react的環境,現在前端發展這麼快,如果還不會前端自動化的話,那就真的要被淘汰了,所以本篇旨在給那些還在用script標籤引入的同學一點啟發,同時也作為自己日後react開發的一個隨時檢視的資料,話不多說,先來看看我們需要通過npm下載的一些東西,webpack,webpack-cli,react,react-dom,babel-core,babel-preset-es2015,babel-preset-env,babel-preset-react

npm install --save react react-dom

--save的命令列是指的開發以後還需要依賴的模組,即像是jquey這樣的第三方庫,完成專案後依然還需要依賴的模組

npm install --save-dev webpack webpack-cli babel-core babel-preset-react babel-preset-env

--save-dev下載的即是開發時依賴的模組,具體下載完以後可以在 package.jso裡面看到所以下載的依賴。

{
  "name": "react-demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack --mode development --watch",
    "start": "webpack-dev-server --mode development --open"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "react": "^16.4.1",
    "react-dom": "^16.4.1"
  },
  "devDependencies": {
    "babel-core": "^6.26.3",
    "babel-loader": "^7.1.5",
    "babel-preset-env": "^1.7.0",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-react": "^6.24.1",
    "css-loader": "^1.0.0",
    "file-loader": "^1.1.11",
    "html-webpack-plugin": "^3.2.0",
    "style-loader": "^0.21.0",
    "webpack": "^4.16.2",
    "webpack-cli": "^3.1.0",
    "webpack-dev-server": "^3.1.5"
  }
}

    上面則是package的檔案,也可以自己寫這個配置,寫完以後npm install 就可以下載以上所有的依賴。迴歸主題,理解webpack重要的幾個用到的概念,出口,入口,除錯,外掛,web伺服器,loader載入器,入口就是你的主檔案的路徑,裡面包含了所有的其他依賴,webpack會根據你的入口檔案,來找到對應的依賴,出口檔案即打包所有模組以後的檔案路徑及檔名稱,配置都是物件鍵值對形式。再來看除錯方法配置就是devtool,一般開發過程中用的就是eval-source-map這個模式,還有很多其他的模式,大家可以去官網看看

   最後個人覺得比較難以理解的部分其實就是外掛和loader載入器比較複雜,所謂loader載入器可以理解為一個外掛,因為webpack只能處理js的檔案,對於其他的檔案,就需要有一種方法來轉換成js,所以才有了loader的概念。loader也有自己的配置,並且GitHub上有非常多的loader可以配置,這裡我們只需要幾種常用的loader就可以了,首先還是先下載

npm install --save-dev babel-loader css-loader style-loader file-loader

看名字大概也能猜到意思,分別是處理css檔案,ES6的程式碼,還有處理圖片檔案的file-loader,具體配置如下

const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
	devtool: 'eval-source-map',
	entry: './src/index.js',
	output: {
		path: path.resolve(__dirname, 'dist'),
		filename: 'bundle.js'
	},
	devServer: {
		contentBase: './public',
		hot: true
	},
	plugins: [
		new webpack.HotModuleReplacementPlugin(),
		new HtmlWebpackPlugin({
			template: './public/index.html',
			inject: true
		})
	],
	module: {
		rules: [
			{
				test: /\.css$/,
				use: ['style-loader','css-loader']
			},
			{
				test: /\.(gif|jpg|svg|eot)$/,
				use: 'file-loader'
			},
			{
				test: /\.(jsx|js)$/,
				use: 'babel-loader',
				exclude: '/node_modules/'
			}
		]
	}
}

這其實就是一個webpack4.0的基本配置了,雖然4.0也是可以零配置就能執行,但是很多時候還是需要經過配置才能更好的完成任務的,對於連除錯瀏覽器重新整理都覺得麻煩的同學就特別適合這個配置,因為我們在上面啟動了一個web伺服器,簡言之,就是讓我們的html檔案可以在瀏覽器中檢視,並且當你修改js檔案的時候,可以立刻重新整理瀏覽器,個人覺得還是非常酷的功能,當然這個還需要用到模組熱替換的功能,這樣不僅僅對於js檔案,html檔案變化也能實現具體重新整理,不過這個配置目前只能重新整理js檔案,具體重新整理html檔案功能,有興趣的同學可以去GitHub檢視博主最近練手的專案。

    web伺服器需要先下載webpack-dev-server,上面的package配置當中也是有的,contentBase的屬性就是監控html檔案所在目錄,hot屬性就是是否開啟模組熱替換模式。最後就剩下外掛這個模組,對於這個html-webpack-plugin外掛,博主也是看了很多文件,才大概瞭解了,這個外掛的作用就是不需要你自己寫html檔案引用js的script等等,template屬性就是根據你這個模組的html檔案,會自動 生成一個帶有script標籤的html檔案,這個外掛屬性非常多,有興趣的同學也是可以去官方文件查詢到。

     剛剛接觸webpack的同學,可以直接將配置拿過去用了,體驗無重新整理的感覺,不過最終還是要自己去學習,懂得每一個屬性的作用才是最重要的,博主展現的也只是 webpack眾多功能中極少的部分,也是還在努力學習當中,與各位共勉