webpack+react環(huán)境搭建

webpack+react環(huán)境搭建

一、webpack環(huán)境搭建

1、準(zhǔn)備工作

因?yàn)閣ebpack依賴于nodejs,因此我們應(yīng)首先安裝nodejs;而npm是js包管理工具,接著我們應(yīng)該安裝npm,

sudo apt-get update //執(zhí)行檢查可更新的軟件

sudo apt-get install nodejs
sudo apt install nodejs-legacy
sudo apt install npm

2、初始化我們的項(xiàng)目

#項(xiàng)目文件
mkdir blog && cd blog

#項(xiàng)目初始化,生成項(xiàng)目描述文件package.json
npm init

3、安裝webpack和webpack-dev-server

npm install webpack webpack-dev-server --save-dev

這會(huì)在項(xiàng)目文件里面創(chuàng)建node_modules,package.json中也多了"dependencies"和"devDependencies"兩項(xiàng),其記錄的是當(dāng)前依賴及版本信息,其中"dependencies"為空

4、創(chuàng)建入口文件index.html

#在項(xiàng)目文件blog下面新建public/index.html
mkdir public && touch index.html

5、配置webpack
入口文件創(chuàng)建好之后,我們就要配置webpack了。在項(xiàng)目文件blog下面新建文件webpack.config.js,編輯webpack.config.js配置:

module.exports={
    devServer:{
    contentBase:"./public"
    }
}

因?yàn)槲覀兊哪康氖莿?chuàng)建一個(gè)web服務(wù)器,只要添加如上內(nèi)容就ok了。

devServer是webpack中web服務(wù)器的相關(guān)配置項(xiàng),contentBase指定的是頁(yè)面加載目錄,而其加載頁(yè)面默認(rèn)為index.html,由于我們的index.html是在public目錄下,因此就將contentBase設(shè)置為"./public“。

接下來(lái)在package.json中配置web服務(wù)啟動(dòng)命令,該命令配置在scripts中的,其命令名稱為“server”,命令詳情為“webpack-dev-sever --open”:

"server":"webpack-dev-server --open"

配置結(jié)果如下:

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "server": "webpack-dev-server --open"
  },

6、安裝webpack-cli
我們只安裝了webpack服務(wù),而webpack命令是通過(guò)webpack-cli來(lái)執(zhí)行的,因此我們必須安裝:

npm install webpack-cli --save-dev

現(xiàn)在我們就可以啟動(dòng)他了

npm run server


二、react環(huán)境搭建

到目前為止我們都只是在講述webpack,接下來(lái)的環(huán)境搭建,我們就要明白如何使其支持react了

1、安裝react

npm install react react-dom --save

由于react是在正式環(huán)境中也需要的,因此npm安裝時(shí)沒(méi)有帶-dev參數(shù)。

2、代碼創(chuàng)建
既然webpack和react我們都安裝好了,那我們就的試試實(shí)戰(zhàn)了,我們編輯之前創(chuàng)建好的文件:

<body>
     <div id='root'></div>
     <script  src='bundle.js'></script>
</body>

接下來(lái)在public目錄下創(chuàng)建index.jsx文件,注意后綴名是jsx,其內(nèi)容為:

import React from 'react'
import { render } from 'react-dom'

class HelloMessage extends React.Component {
    render() {
       return (
       <h1>hello react! </h1>
    )
    }
}
render(
    <HelloMessage/>,
    document.getElementById('root')
)

jsx是react的專用語(yǔ)法,HTML是無(wú)法引用的,因此我們需要將其轉(zhuǎn)換為HTML能夠識(shí)別的JS,而這個(gè)正是webpack大顯身手的時(shí)候,我們開始來(lái)配置webpack,配置之前,我們的安裝babel環(huán)境。

3、安裝babel環(huán)境
因?yàn)閞eact是通過(guò)babel來(lái)把jsx文件轉(zhuǎn)換為js文件的,因此我們的安裝babel相關(guān)環(huán)境,我們需要安裝:

  • babel-core
  • babel-loader
  • babel-preset-es2015
  • babel-preset-react

執(zhí)行命令:

npm install babel-core babel-loader babel-preset-es2015 babel-preset-react --save-dev

4、配置webpack配置文件
由于我們要轉(zhuǎn)換的源文件是index.jsx,轉(zhuǎn)換后的目標(biāo)文件是bundle.js,因此需要在webpack中配置入口和出口,在文本webpack.config.js中增加以下內(nèi)容:

entry:__dirname+"/public/index.jsx",
output:{
     path:__dirname+"/public",
     filename:'bundle.js'
}

同時(shí)還要在webpack.config.js中配置loader,讓其通過(guò)外部工具來(lái)處理文件,而我們當(dāng)前要處理的是通過(guò)babel來(lái)處理jsx文件:

module.exports={
entry:__dirname+"/app/index.jsx",
output:{
    path:__dirname+"/app",
    filename:'bundle.js'
},
devServer:{
    contentBase:"./public"
},
module: {
    rules: [
        { test: /\.(js|jsx)$/, exclude: /node_modules/, loader: 'babel-loader' }
    ]
}

};

現(xiàn)在我們運(yùn)行npm run server ,會(huì)報(bào)如下錯(cuò)誤:

ERROR in ./public/index.jsx
Module build failed (from ./node_modules/babel-loader/lib/index.js):
SyntaxError: Unexpected token (9:15)

這時(shí)我們要在項(xiàng)目文件blog下創(chuàng)建babel配置文件.babelrc文件,要想babel運(yùn)行必須創(chuàng)建它,并添加如下內(nèi)容:

{
      "presets": [
        "react",
        "es2015"
      ],
      "env": {
        "dev": {
          "plugins": [
        [
          "react-transform",
          {
            "transforms": [
              {
            "transform": "react-transform-hmr",
            "imports": [
              "react"
            ],
            "locals": [
              "module"
            ]
              }
            ]
          }
        ]
          ]
        }
      }
    }
}

至此,再執(zhí)行npm run server,頁(yè)面就可以正常顯示了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。