使用webpack從零開始搭建react項目

[webpack中文文檔](https://webpack.docschina.org/)

![yarn語法](https://note.youdao.com/yws/res/16810/WEBRESOURCE5e9deae4ba81f2d9d1631772395a9a40)

#### webpack的安裝

![webpack的安裝](https://note.youdao.com/yws/res/16815/WEBRESOURCE952f785a54e37cc1cbd1c0cb168a7dd5)

```

yarn add webpack@3.10.1 --dev

```

#### 需要處理的文件類型

![文件類型](https://note.youdao.com/yws/res/16821/WEBRESOURCEe3931234abcfdb25f16f6f72a75893fb)

#### webpack常用模塊

![webpack常用模塊](https://note.youdao.com/yws/res/16827/WEBRESOURCE26f6eb42de497c5d062a8eca60e2a1ea)

#### webpack-dev-server

![webpack-dev-server](https://note.youdao.com/yws/res/16832/WEBRESOURCE5dcf8d2cd6c1af757623e5d31892ceac)

```

yarn add webpack-dev-server@2.9.7 --dev

```

#### webpack用法

> 創(chuàng)建webpack.config.js文件

```js

const path = require('path');

module.exports = {

? ? entry: './src/app.js', //入口文件

? ? output: {

? ? ? ? path: path.resolve(__dirname, 'dist'),

? ? ? ? filename: 'app.js'

? ? }

};

```

> 執(zhí)行命令

```

node_module/.bin/webpack

```

##### 打包html的配置

> htmlWebpackPlugin

```

// 安裝html-webpakc-plugin

yarn add html-webpack-plugin --dev

```

> 自定義html模版(title,mate等信息)

[配置鏈接](https://github.com/jantimon/html-webpack-plugin#options)

```

// webpack.config.js文件

plugins: [

? ? new HtmlWebpackPlugin({

? ? ? ? template: './src/index.html'

? ? })

]

```

##### 安裝babel

[參考鏈接](https://webpack.docschina.org/loaders/babel-loader/#src/components/Sidebar/Sidebar.jsx)

```

// 安裝

// 多個插件之間空格分隔

yarn add babel-core@6.26.0 babel-present-env@1.6.1 babel-loader@7.1.2 --dev

// webpack.config.js配置

module: {

? rules: [

? ? {

? ? ? test: /\.js$/,

? ? ? exclude: /(node_modules|bower_components)/,

? ? ? use: {

? ? ? ? loader: 'babel-loader',

? ? ? ? options: {

? ? ? ? ? presets: ['@babel/preset-env'],

? ? ? ? ? plugins: [require('@babel/plugin-transform-object-rest-spread')]

? ? ? ? }

? ? ? }

? ? }

? ]

}

```

##### 安裝處理React的插件

> `babel-preset-react`

```

//babel-preset-react

yarn add babel-preset-react@6.24.1 --dev

```

##### 如額使用React

```

// 安裝react react-dom

yarn add react react-dom

```

##### 加載CSS

> `style-loader`與`css-loader`

```

module:{

? ? rules: [

? ? ? ? {

? ? ? ? ? ? test: /\.css$/,

? ? ? ? ? ? use: [

? ? ? ? ? ? ? ? 'style-loader',

? ? ? ? ? ? ? ? 'css-loader'

? ? ? ? ? ? ]

? ? ? ? }

? ? ]

}

```

##### 將文件提取出來

> `ExtractTextWebpackPlugin`

[ExtractTextWebpackPlugin: 將包或包中的文本提取到單獨(dú)的文件中货岭。](https://webpack.docschina.org/plugins/extract-text-webpack-plugin/#src/components/Sidebar/Sidebar.jsx)

> 配置

```

const ExtractTextPlugin = require('extract-text-webpack-plugin');

module:{

? ? rules: [

? ? ? ? {

? ? ? ? ? ? test: /\.css$/,

? ? ? ? ? ? use: ExtractTextPlugin.extract({

? ? ? ? ? ? ? ? ? fallback: "style-loader",

? ? ? ? ? ? ? ? ? use: "css-loader"

? ? ? ? ? ? })

? ? ? ? }

? ? ]

},

plugins: [

? ? new ExtractTextPlugin("styles.css"),

]

```

##### 處理sass

> `sass-loader`, `sass-loader`依賴`node-sass`與`webpack`

```

yarn add sass-loader node-sass

```

##### 圖片資源處理

> 用`file-loader`與`url-loader`處理圖片資源且改,`url-loader`依賴`file-loader`

```

// 安裝

yarn add url-loader file-loader --dev

// 配置

module: {

? ? rules: [

? ? ? ? {

? ? ? ? ? ? test: /\.(png|jpg|gif)$/,

? ? ? ? ? ? use: [

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? loader: 'url-loader',

? ? ? ? ? ? ? ? ? ? options: {

? ? ? ? ? ? ? ? ? ? ? ? limit: 8192

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ]

? ? ? ? }

? ? ]

}

```

##### font-awesome

```

yarn add font-awesome

// jsx中引入css

import 'font-awesome/css/font-awesome.min.css';

```

##### CommonsChunkPlugin

```

new webpack.optimize.CommonsChunkPlugin({

? ? name: 'common',

? ? filename: 'js/base.js'

})

```

#### webpack-dev-server

```

// 安裝

yarn webpack-dev-server@2.9.7

// webpack.config.js中 配置

devServer: {

? ? contentBase: './dist'

? ? port: 8086

}

// 更改啟動方式 package.json

"scripts": {

? ? "dev" : "node_modulse/.bin/webpack-dev-server",

? ? "dist": "node_modules/.bin/webpack -p" //添加-p為線上打包

}

```

##### resolve

> object

配置模塊如何解析因苹,例如性置,擋在ES2015中調(diào)用`import "loadsh"`, `resolve`選項能夠?qū)ebpack查找`"lodash"`的方式去做修改。

###### resolve.alias

> object

創(chuàng)建`import`或`require`的別名秒梅,來確保模塊引入變得更簡單铐伴,例如一些位于`src/`文件夾下的常用模塊

```

// webpack.config.js 配置

module.exports = {

? ? // ...

? ? resolve: {

? ? ? ? alias: {

? ? ? ? ? ? Utilities: path.resolve(__dirname, 'src/utilities/'),

? ? ? ? ? ? Templates: path.resolve(__dirname, 'src/templates/')

? ? ? ? }

? ? }

}

```

現(xiàn)在,替換【在導(dǎo)入時使用相對路徑】這種方式隅要,就像這樣:

```

import Utility from '../../utilities/utility';

```

可以這樣使用別名

```

import Utility from 'Utilities/utility';

```

###### devServer.historyApiFallback

當(dāng)使用 `HTML5 History API` 時,任意的 404 響應(yīng)都可能需要被替代為 `index.html`董济。通過傳入以下啟用:

```

module.exports = {

? ? // ...

? ? devServer = {

? ? ? ? historyApiFallback: {

? ? ? ? ? ? index: '/dist/index.html'

? ? ? ? }

? ? }

}

```

###### 接口Api代理`devServer.proxy`

[參考地址](https://webpack.docschina.org/configuration/dev-server/#devserver-proxy)

如果你有單獨(dú)的后端開發(fā)服務(wù)器 API步清,并且希望在同域名下發(fā)送 API 請求 ,那么代理某些 URL 會很有用(可以避免瀏覽器跨域報錯)虏肾。

在 localhost:3000 上有后端服務(wù)的話尼啡,你可以這樣啟用代理:

```

// webpack.config.js配置

module.exports = {

? ? // ...

? ? devServer: {

? ? ? ? proxy: {

? ? ? ? ? ? '/api': 'http://localhost:3000'

? ? ? ? }

? ? }

}

```

請求到 `/api/users` 現(xiàn)在會被代理到請求 `http://localhost:3000/api/users`。

```

module.exports = {

? ? // ...

? ? devServer: {

? ? ? ? proxy: {

? ? ? ? ? ? '/manage': {

? ? ? ? ? ? ? ? ? ? target: 'http://admintest.happymmall.com',

? ? ? ? ? ? ? ? ? ? changeOrigin: true

? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? '/user/logout.do': {

? ? ? ? ? ? ? ? ? ? target: 'http://admintest.happymmall.com',

? ? ? ? ? ? ? ? ? ? changeOrigin: true

? ? ? ? ? ? ? ? }

? ? ? ? }

? ? }

}

```

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末询微,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子狂巢,更是在濱河造成了極大的恐慌撑毛,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,946評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唧领,死亡現(xiàn)場離奇詭異藻雌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)斩个,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評論 3 399
  • 文/潘曉璐 我一進(jìn)店門胯杭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人受啥,你說我怎么就攤上這事做个。” “怎么了滚局?”我有些...
    開封第一講書人閱讀 169,716評論 0 364
  • 文/不壞的土叔 我叫張陵居暖,是天一觀的道長。 經(jīng)常有香客問我藤肢,道長太闺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,222評論 1 300
  • 正文 為了忘掉前任嘁圈,我火速辦了婚禮省骂,結(jié)果婚禮上蟀淮,老公的妹妹穿的比我還像新娘。我一直安慰自己钞澳,他們只是感情好怠惶,可當(dāng)我...
    茶點故事閱讀 69,223評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著略贮,像睡著了一般甚疟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逃延,一...
    開封第一講書人閱讀 52,807評論 1 314
  • 那天览妖,我揣著相機(jī)與錄音,去河邊找鬼揽祥。 笑死讽膏,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拄丰。 我是一名探鬼主播府树,決...
    沈念sama閱讀 41,235評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼料按!你這毒婦竟也來了奄侠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,189評論 0 277
  • 序言:老撾萬榮一對情侶失蹤载矿,失蹤者是張志新(化名)和其女友劉穎垄潮,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體闷盔,經(jīng)...
    沈念sama閱讀 46,712評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡弯洗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,775評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了逢勾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牡整。...
    茶點故事閱讀 40,926評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖溺拱,靈堂內(nèi)的尸體忽然破棺而出逃贝,到底是詐尸還是另有隱情,我是刑警寧澤迫摔,帶...
    沈念sama閱讀 36,580評論 5 351
  • 正文 年R本政府宣布秋泳,位于F島的核電站,受9級特大地震影響攒菠,放射性物質(zhì)發(fā)生泄漏迫皱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,259評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卓起。 院中可真熱鬧和敬,春花似錦、人聲如沸戏阅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奕筐。三九已至舱痘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間离赫,已是汗流浹背芭逝。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留渊胸,地道東北人旬盯。 一個月前我還...
    沈念sama閱讀 49,368評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像翎猛,于是被迫代替她去往敵國和親胖翰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,930評論 2 361

推薦閱讀更多精彩內(nèi)容

  • GitChat技術(shù)雜談 前言 本文較長切厘,為了節(jié)省你的閱讀時間萨咳,在文前列寫作思路如下: 什么是 webpack,它要...
    蕭玄辭閱讀 12,699評論 7 110
  • 1 Webpack 1.1 概念簡介 1.1.1 WebPack是什么 1疫稿、一個打包工具 2某弦、一個模塊加載工具 3...
    Kevin_Junbaozi閱讀 6,680評論 0 16
  • 一、webpack的基本概念 webpack 本質(zhì)上是一個打包工具而克,它會根據(jù)代碼的內(nèi)容解析模塊依賴,幫助我們把多個...
    cilla123閱讀 1,546評論 0 8
  • 嘿怔毛。大家好呀员萍。 好久不見啦。 最近剛開始玩簡書了拣度。真的是剛開始試水碎绎。有一次我投稿一篇文章,有個專題編輯拒絕了還特地...
    王咕嚕閱讀 298評論 2 1
  • 我們都為了夢想活在現(xiàn)實抗果! 夢想像是關(guān)在天邊筋帖,我們不斷不斷的努力去觸及,卻總是一次又一次摔落冤馏。有時候不禁在想日麸,什么是...
    咖啡店的燈閱讀 192評論 0 0