溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么在react框架中引入webpack

發(fā)布時(shí)間:2020-12-23 09:28:31 來源:億速云 閱讀:273 作者:小新 欄目:web開發(fā)

這篇文章給大家分享的是有關(guān)怎么在react框架中引入webpack的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過來看看吧。

在react框架中引入webpack的方法:首先創(chuàng)建一個(gè)文件夾;然后創(chuàng)建一個(gè)“package.json”的工程文件;接著全局安裝webpack;最后通過“npm install”在項(xiàng)目中安裝webpack即可。

什么是webpack?

webpack是一個(gè)模塊打包工具,在前端中模塊指的就是js,css,圖片等類型文件。webpack支持多種模塊系統(tǒng),而且兼容js的多種書寫規(guī)范(如ES6),它可以處理模塊間的相互依賴關(guān)系,對靜態(tài)資源進(jìn)行統(tǒng)一打包和發(fā)布。

webpack的安裝與使用

首先我們創(chuàng)立一個(gè)文件夾如study,在開始菜單打開cmd,進(jìn)入該文件夾,然后進(jìn)行以下步驟:

1、npm init //創(chuàng)建一個(gè)package.json的工程文件。

2、npm install -g webpack // 在全局安裝webpack,若已安裝過則可以跳過。

3、npm install --save-dev webpack //在項(xiàng)目中安裝webpack。

創(chuàng)建完成之后,我們在我們的文件目錄中創(chuàng)建兩個(gè)文件夾,為dist(打包后放置的文件夾)與src(我們寫項(xiàng)目的地方)。src文件夾中我們先創(chuàng)立兩個(gè)文件為index.js與main.js。dist文件夾中我們創(chuàng)立一個(gè)index.html用來讓瀏覽器來讀取顯示。結(jié)構(gòu)如下:

怎么在react框架中引入webpack

我們在dist/index.html中寫好初始的內(nèi)容,引入的js文件為bundle.js文件,這個(gè)文件就是webpack打包后生成的文件。如下圖:

怎么在react框架中引入webpack

在index.js中輸入“導(dǎo)出代碼”:

module.exports = function() {
  var hello = document.createElement('div');
  hello.textContext = "This is index.js file."
  return hello;
}

將hello變量導(dǎo)出,在main.js接受變量,然后將該變量插入到root標(biāo)簽中:

const hello = require('./index.js');
document.querySelector('#root').appendChild(hello());

接下來我們在根目錄下創(chuàng)建一個(gè)webpack.config.js文件用來配置webpack,我們先進(jìn)行簡單的配置,目前主要做的是要設(shè)置內(nèi)容的入口路徑以及打包后文件的存放路徑。在webpack.config.js中寫入以下代碼塊:

module.exports = {
  entry: __dirname + "/src/main.js",
  output:{
    path: __dirname + "/dist",
    filename: "bundle.js"
  },
}

entry為唯一的入口文件,也就是webpack要從這里讀取,output為輸出,這里設(shè)置的是輸出到dist目錄下的bundle.js文件。接著運(yùn)行webpack在cmd中運(yùn)行

".\\node_modules\\.bin\\webpack" 這是在windows中運(yùn)行的。若已安裝全局則使用 "webpack"也可以。

進(jìn)一步我們不用以上的輸入方式,在package.json中的scripts中加入 "start": "webpack" ,即可通過npm start命令來啟用webpack。

package.json中的腳本部分已經(jīng)默認(rèn)添加了./node_modules/.bin路徑,所以我們也不需要輸入詳細(xì)的路徑地址了。start是一個(gè)特殊的腳本名稱,我們也可以起其他的名字,但是如果對應(yīng)的不是start那么我們要啟動(dòng)時(shí)必須要使用npm run {你在script中所用的名字} 如npm run build。

webpack的在開發(fā)生產(chǎn)時(shí)的具體功能

開發(fā)時(shí)需要調(diào)試代碼,在打包過后如果出錯(cuò)我們就需要調(diào)試工具來幫我們改正錯(cuò)誤。Source Map就是幫我們解決這個(gè)難題的。他要在我們的webpack.config.js文件中進(jìn)行配置,屬性名為devtool,他有四種選項(xiàng)來讓使用者來選擇。

1、source-map: 在一個(gè)單獨(dú)的文件中產(chǎn)生一個(gè)完整且功能完全的文件。這個(gè)文件具有最好的source map,但是它會(huì)減慢打包文件的構(gòu)建速度;

2、cheap-module-source-map: 在一個(gè)單獨(dú)的文件中生成一個(gè)不帶列映射的map,不帶列映射提高項(xiàng)目構(gòu)建速度,但是也使得瀏覽器開發(fā)者工具只能對應(yīng)到具體的行,不能對應(yīng)到具體的列(符號(hào)),會(huì)對調(diào)試造成不便;

3、eval-source-map: 使用eval打包源文件模塊,在同一個(gè)文件中生成干凈的完整的source map。這個(gè)選項(xiàng)可以在不影響構(gòu)建速度的前提下生成完整的sourcemap,但是對打包后輸出的JS文件的執(zhí)行具有性能和安全的隱患。不過在開發(fā)階段這是一個(gè)非常好的選項(xiàng),但是在生產(chǎn)階段一定不要用這個(gè)選項(xiàng);

4、cheap-module-eval-source-map: 這是在打包文件時(shí)最快的生成source map的方法,生成的Source Map 會(huì)和打包后的JavaScript文件同行顯示,沒有列映射,和eval-source-map選項(xiàng)具有相似的缺點(diǎn)。

我們這里用第三種方法。在webpack.config.js進(jìn)行以下配置:

module.exports = {
  devtool: 'eval-source-map',
  entry: __dirname + "/src/main.js",
  output:{
    path: __dirname + "/dist",
    filename: "bundle.js"
  },
}

這四種方式從上到下打包速度回越來越快,當(dāng)然隱患越來越多,所以在生產(chǎn)階段還是用第一種為好。

使用webpack構(gòu)建本地服務(wù)器

webpack提供一個(gè)可選的可以檢測代碼的修改并自動(dòng)刷新頁面的本地服務(wù)器。該服務(wù)器是基于node.js的,不過我們需要單獨(dú)安裝它作為項(xiàng)目依賴。

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

devserver作為webpack配置選項(xiàng)中的一項(xiàng),以下是它的一些主要配置選項(xiàng):

1、contentBase: 默認(rèn)webpack-dev-server會(huì)為根文件夾提供本地服務(wù)器,如果想為另外一個(gè)目錄下的文件提供本地服務(wù)器,應(yīng)該在這里設(shè)置其所在目錄(本例設(shè)置到“public"目錄)

2、port: 設(shè)置默認(rèn)監(jiān)聽端口,如果省略,默認(rèn)為“8080”

3、inline: 設(shè)置為true,當(dāng)源文件改變時(shí)會(huì)自動(dòng)刷新頁面

4、historyApiFallback: 在開發(fā)單頁應(yīng)用時(shí)非常有用,它依賴于HTML5 history API,如果設(shè)置為true,所有的跳轉(zhuǎn)將指向index.html

代碼如下:

module.exports = {
  devtool: 'eval-source-map',
  entry: __dirname + "/src/main.js",
  output:{
    path: __dirname + "/dist",
    filename: "bundle.js"
  },
  devServer:{
    contentBase: "./dist", //讀取目錄
    port: 8000,   //端口號(hào)
    inline: true, //實(shí)時(shí)刷新
    historyApiFallback: true //單頁面不跳轉(zhuǎn)
  },
}

接著我們要在package.json中配置server代碼如下:

{
  "name": "study-webpack",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "webpack",
    "test": "echo \"Error: no test specified\" && exit 1",
    "server": "webpack-dev-server --open"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "webpack": "^3.8.1",
    "webpack-dev-server": "^2.9.3"
  }
}

接著在cmd中輸入 npm run server 即可在瀏覽器中打開本地服務(wù)器。

Loaders

loaders作為webpack的強(qiáng)大功能之一,它的作用就是讓webpack調(diào)用外部腳本和工具來對不同的格式的文件進(jìn)行處理。Loaders需要單獨(dú)安裝并且需要在webpack.config.js下的modules關(guān)鍵字下進(jìn)行配置,Loaders的配置選項(xiàng)包括以下幾方面:

1、test:一個(gè)匹配loaders所處理的文件的擴(kuò)展名的正則表達(dá)式。

2、loader: loader的名稱(必需)。

3、include/exclude:手動(dòng)添加:手動(dòng)添加需要的文件夾或者屏蔽掉不需要選擇的文件。

4、query: 為loaders提供了額外的設(shè)置選項(xiàng)。

babel

babel是一個(gè)編譯js的平臺(tái),它可以幫助你的代碼編譯稱為瀏覽器識(shí)別的代碼。并且它還可以把js的擴(kuò)展語言JSX編譯稱為瀏覽器識(shí)別的語句。

安裝依賴包:

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

下面我們在webpack.config.js中來配置loader和babel:

module.exports = {
  devtool: 'eval-source-map',
  entry: __dirname + "/src/main.js",
  output:{
    path: __dirname + "/dist",
    filename: "bundle.js"
  },
  module: {
    loaders:[{
      test: /\.js$/,   //需要匹配的文件擴(kuò)展名
      exclude: /node_modules/, // 排除不需要處理的文件夾
      loader: 'babel-loader', //  所用的loader名稱
      query:{
            presets: ['es2015', 'react']  // 支持es5與react
      }
    }]
  },
  devServer:{
    contentBase: "./dist", //讀取目錄
    port: 2333,   //端口號(hào)
    inline: true, //實(shí)時(shí)刷新
    historyApiFallback: true //單頁面不跳轉(zhuǎn)
  },
}

完成以上工作后接著來安裝react

npm install --save react react-dom

接著修改src文件夾中的Index.js與main.js的代碼,react使用的版本"react": "^16.0.0":

以下是Index.js代碼:

import React from 'react';
import ReactDOM from 'react-dom';
class Greeter extends React.Component{
  render() {
    return (
      <div>
        <span>my god</span>
      </div>
    );
  }
};
export default Greeter

以下為main.js代碼:

import React from 'react';
import ReactDOM from 'react-dom';
import Greeter from './Index';
ReactDOM.render(<Greeter />, document.getElementById('root'));

Babel的配置選項(xiàng)

因?yàn)閎abel有非常多的配置選項(xiàng),在單一的webpack.config.js文件中進(jìn)行配置往往使得這個(gè)文件顯得太復(fù)雜,因此一些開發(fā)者支持把babel的配置選項(xiàng)放在一個(gè)單獨(dú)的名為 ".babelrc" 的配置文件中。因此現(xiàn)在我們就提取出相關(guān)部分,分兩個(gè)配置文件進(jìn)行配置(webpack會(huì)自動(dòng)調(diào)用.babelrc里的babel配置選項(xiàng))。

將webpack.config.js中的query去掉,建立.babelrc文件寫出一下代碼:

{
  "presets": ["react", "es2015"]
}

css的相關(guān)安裝

webpack把所有文件當(dāng)成模塊處理,只要有合適的loaders,它都可以被當(dāng)做模塊來處理。webpack提供兩個(gè)工具處理樣式表css-loader,style-loader,二者處理的任務(wù)不同,css-loader使你能夠使用類似@import 和 url(…)的方法實(shí)現(xiàn) require()的功能,style-loader將所有的計(jì)算后的樣式加入頁面中,二者組合在一起使你能夠把樣式表嵌入webpack打包后的JS文件中。

安裝loader

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

接著webpack.config.js中添加loaders

module.exports = {
  devtool: 'eval-source-map',
  entry: __dirname + "/src/main.js",
  output:{
    path: __dirname + "/dist",
    filename: "bundle.js"
  },
  module: {
    loaders:[
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'babel-loader'
      },
      {
        test: /\.css$/,
        loader: 'style-loader!css-loader'
      }
    ]
  },
  devServer:{
    contentBase: "./dist", //讀取目錄
    port: 2333,   //端口號(hào)
    inline: true, //實(shí)時(shí)刷新
    historyApiFallback: true //單頁面不跳轉(zhuǎn)
  },
}

接著我們可以創(chuàng)立一個(gè)css文件,記好路徑,在main.js中(也就是webpack的入口文件)我們導(dǎo)入css文件即可使用。

這里題外說個(gè)問題,我們想在react中使用sass,就在此基礎(chǔ)上先進(jìn)行npm下載

加載: npm install sass-loader node-sass –save-dev

之后我們在webpack.config.js中添加loaders

module.exports = {
  devtool: 'eval-source-map',
  entry: __dirname + "/src/main.js",
  output:{
    path: __dirname + "/dist",
    filename: "bundle.js"
  },
  module: {
    loaders:[
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'babel-loader'
      },
      {
        test: /\.(css|scss)$/,
        loader: 'style-loader!css-loader!sass-loader'
      }
    ]
  },
  devServer:{
    contentBase: "./dist", //讀取目錄
    port: 2333,   //端口號(hào)
    inline: true, //實(shí)時(shí)刷新
    historyApiFallback: true //單頁面不跳轉(zhuǎn)
  },
}

之后再style文件夾中創(chuàng)立一個(gè)scss文件導(dǎo)入到main.js文件中即可使用了。

eslint的安裝與使用

首先安裝依賴包 npm install –save-dev eslint eslint-loader

通過配置webpack.congfig.js以及創(chuàng)建.eslintrc文件來配置好初始值即可在項(xiàng)目中使用eslint。

webpack.config.js:
module.exports = {
  devtool: 'eval-source-map',
  entry: __dirname + "/src/main.js",
  output:{
    path: __dirname + "/dist",
    filename: "bundle.js"
  },
  module: {
    loaders:[
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'babel-loader!eslint-loader'
      },
      {
        test: /\.(css|scss)$/,
        loader: 'style-loader!css-loader!sass-loader'
      }
    ]
  },
  devServer:{
    contentBase: "./dist", //讀取目錄
    port: 2333,   //端口號(hào)
    inline: true, //實(shí)時(shí)刷新
    historyApiFallback: true //單頁面不跳轉(zhuǎn)
  },
};
.eslintrc
{
    "parser": "babel-eslint",
    "rules": {
        "semi": [
            "error",
            "always"
        ]
    }
}

eslint的相關(guān)規(guī)則根據(jù)自己的需求來制定即可。

感謝各位的閱讀!關(guān)于怎么在react框架中引入webpack就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI