精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

在終端里輸入 npm start 后都發生了啥

開發 前端
要想對 JavaScript 代碼進行打包,我們可以依賴 webpack 對我們的幫助我們完成這一件事情。要想使用 webpack,首先需要我們安裝 webpack,首先對項目進行初始化。

前言

在前面的內容純屬胡說八道,如果想要看正文,請直接滾動條往下拉,以省下寶貴的時間繼續卷。

要想對 JavaScript 代碼進行打包,我們可以依賴 webpack 對我們的幫助我們完成這一件事情。要想使用 webpack,首先需要我們安裝 webpack,首先對項目進行初始化:

npm init -y

生成配置配置文件:

圖片圖片

要想使用 webpack,首先需要安裝 webpack 以及 webpack-cli,這里還有 html-webpack-plugin,用于生成 html 模板,具體命令如下:

npm install  webpack webpack-cli html-webpack-plugin -D

依賴安裝完成之后,我們需要在跟目錄上面創建一個名為 webpack.config.js,當然,你也可以創建其他文件名的 js 文件,并添加以下配置:

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

module.exports = {
  entry: "./src/index.js",
  output: {
    filename: "bundle.js",
    path: path.resolve(__dirname, "./dist"),
  },
  mode: "production",
  plugins: [
    new HtmlWebpackPlugin({
      template: "./index.html",
    }),
  ],
};

為了能執行打包命令,我們在 package.json 文件中的 script 中添加這一段命令:

"build": "webpack"

如果你使用的 webpack 配置文件名為其他的則需要在該命令中添加相對應的路徑,否則在執行命令的時候 webpack-cli 則無法找到相關的配置。

接下來我們創建在根目錄下創建一個 src 目錄,在目錄下面創建一個 index.js 文件,作為整個項目的入口,并在文件中添加一些自己想寫的代碼:

console.log("hello webpack");

此時,在命令行中輸入一下命令:

npm run build

此時文件被輸出出來了:

圖片圖片

生成的文件是根據我們前面的 webpack 配置文件中生成的,通過運行 index.html 文件,hello webpack 也被輸出在瀏覽器控制臺上面:

圖片圖片

但是這個方法存在弊端,當我們對源代碼進行修改的時候,它并不會對我所修改的代碼進行重新編譯,要想能夠在瀏覽器中看到最新效果,你必須通過重新執行 npm run build 打包才可以,開發效率極其低下。

watch

webpack 有一個 watch 屬性可以監聽文件的變化,當監聽到文件變化,當它們修改后會重新編譯,要啟用 watch,你只需要在 webpack.config.js 文件中設置 watch:true即可,詳情如下:

module.exports = {
  ...,
  watch: true,
};

或者在 package.json 文件中 script 下修改添加 --watch.代碼如下所示:

"build": "webpack --watch"

控制臺再次執行 npm run build,你會發現這次控制臺不會結束了,會一直開啟著,詳情請看下圖:

圖片圖片

當我們修改文件內容的時候,watch 會監聽著文件變化,如下圖終端所示:

圖片圖片

并且瀏覽器上的內容也會隨著變化而變化,你也可以配置 watchOptions 來使你的項目更快,例如:

watchOptions: {
  aggregateTimeout: 6000,
  ignored: /node_modules/,
},

在上面的配置中,當第一個文件更改,會在重新構建前增加延遲,它會將這段時間內的所有更改都聚合到一次重新構建中,以毫秒為單位。對于某些系統,監聽大量文件會導致大量的 CPU 或內存占用。可以使用正則排除像 node_modules 如此龐大的文件夾。

盡管有這些配置,效率仍然不高,編譯成功后,都會生成新的文件,并且需要開啟 live-server,但是這個插件屬于 vscode 的,但是在其他編輯器上并沒有,并不屬于 webpack。

live-server 每次都會重新刷新整個頁面,并不能保存當前頁面的狀態,還會編譯所有的代碼。

webpack-dev-server的基本使用

webpack-dev-server(簡稱 WDS) 為你提供了一個基本的 web server,并且具有 live reloading(實時重新加載)功能。要想使用使用你首先要安裝該依賴:

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

繼續在 package.json 文件中 script 下修改添加一段命令.代碼如下所示:

"start": "webpack serve --open"

完成之后,在終端下輸入以下命令執行:

npm start

WDS 會自動為為你自動開啟電腦上的默認瀏覽器,并且默認的端口為 http://localhost:8080/,在終端里有如下輸出:

圖片圖片

在瀏覽器上有如下輸出:

圖片圖片

默認開啟 live Reload ,當代碼發生改變時會自動重新對代碼進行編譯。

WDS 原理

webpack-dev-server 啟動了一個使用 express 的HTTP服務,這個服務器與客戶端采用 WebSocket 通信協議,當原始文件發生改變,webpack-dev-server 會實時編譯,但是對 index.html 的修改不會做出處理。

通過查看 webpack-dev-server 源碼中的 package.json 文件,我們發現這里定義了一個 bin 字段,那么這個 bin 有什么用呢?

bin 字段是命令名到本地文件名的映射。當我們使用 npm 或者 yarn 命令安裝包時,如果該包的 package.json 文件有 bin 字段,就會在 node_modules 文件夾下面的 .bin 目錄中復制了 bin 字段鏈接的執行文件。我們在調用執行文件時,可以不帶路徑,直接使用命令名來執行相對應的執行文件。

也就是說,當我們在終端中輸入 npm install webpack-dev-server -D 的時候,會在 node_modules/.bin 目錄下生成了三個文件:

圖片圖片

這三個文件中,其中的 ·cmd 是 windows 中默認的可執行文件,當我們不添加后綴名時,自動根據 pathext 查找文件。

當我們執行 npm start 的時候,會在 node_modules/.bin 目錄下找到 webpack-dev-server.cmd 目錄,因為這個文件是 windows 的批處理腳本:

@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0

IF EXIST "%dp0%\node.exe" (
  SET "_prog=%dp0%\node.exe"
) ELSE (
  SET "_prog=node"
  SET PATHEXT=%PATHEXT:;.JS;=;%
)

endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%"  "%dp0%..\webpack-dev-server\bin\webpack-dev-server.js" %*

在這寫代碼里的最后一行 "%dp0%..\webpack-dev-server\bin\webpack-dev-server.js" 命令中,通過軟連接鏈接到 node_modules/webpack-dev-server/bin 中的 webpack-dev-server.js 目錄。

所以當我們運行 npm start 的時候,也就是相當于運行 node_modules/.bin/webpack-dev-server.cmd serve 命令,并最終以 webpack-dev-server/bin/webpack-dev-server.js 就是整個命令行的入口,通過這里,它會自動給你開啟 webpack-cli,詳情請看下圖:

圖片圖片

所以當我們沒有安裝 webpack-cli 的時候運行 npm start 時會有以下提示:

圖片圖片

在這里 webpack 就會基于我們 webpack.config.js 里創建一個 compiler,然后基于 compiler 和 devServer 相關配置生成一個 WebpackDevServer 實例,該實例會啟動一個expores 服務來幫我們監聽靜態資源變化并更新。

在 webpack-dev-server 源代碼中,有一個 Server.js 的目錄,創建了一個 Server 類,用于啟動的是 start(...) 方法中通過 socket 監聽一個端口,默認使用的是 8080,初始化 client 和 dev-server,以 p[lugin 的形式掛載到 compiler 上,添加 hooks 插件,實例化 express 服務等等,有以下代碼,詳情可自行查看,可以通過安裝依賴的方式,也可以到 GitHub:

圖片圖片

接下來我們看看 await this initialize(...) 都干了些啥?詳情請看下列代碼(省略了后面部分):

async initialize() {
    if (this.options.webSocketServer) {
      const compilers =
        /** @type {MultiCompiler} */
        (this.compiler).compilers || [this.compiler];

      compilers.forEach((compiler) => {
        this.addAdditionalEntries(compiler);
        const webpack = compiler.webpack || require("webpack");
        new webpack.ProvidePlugin({
          __webpack_dev_server_client__: this.getClientTransport(),
        }).apply(compiler);

        compiler.options.plugins = compiler.options.plugins || [];
        if (this.options.hot) {
          const HMRPluginExists = compiler.options.plugins.find(
            (p) => p.constructor === webpack.HotModuleReplacementPlugin
          );
          if (HMRPluginExists) {
            this.logger.warn(
              `"hot: true" automatically applies HMR plugin, you don't have to add it manually to your webpack configuration.`
            );
          } else {
            // Apply the HMR plugin
            const plugin = new webpack.HotModuleReplacementPlugin();
            plugin.apply(compiler);
          }
        }
      });

      if (
        this.options.client &&
        /** @type {ClientConfiguration} */ (this.options.client).progress
      ) {
        this.setupProgressPlugin();
      }
    }

在 initialize() 方法中還有以下方法的調用:

this.setupHooks();
this.setupApp();
this.setupHostHeaderCheck();
this.setupDevMiddleware();
this.setupBuiltInRoutes();
this.setupWatchFiles();
this.setupWatchStaticFiles();
this.setupMiddlewares();
this.createServer();

在這里,主要做的事情是將 client 以 plugin 的形式掛載到 compiler,如果存在 HMR,則開啟 HMR,通過 this.setupWatchFiles() 監聽文件變化。

在 this.setupHooks() 中,主要做的事情就是在 webpack 的 done 鉤子上掛了個給客戶端廣播消息的回調,通過這個回調就知道工程代碼有更新,這時候客戶端就會發送請求給 express 服務去請求最新的 webpack 打包的代碼,詳情請看以下代碼:

setupHooks() {
    this.compiler.hooks.invalid.tap("webpack-dev-server", () => {
      if (this.webSocketServer) {
        this.sendMessage(this.webSocketServer.clients, "invalid");
      }
    });
    this.compiler.hooks.done.tap(
      "webpack-dev-server",
      /**
       * @param {Stats | MultiStats} stats
       */
      (stats) => {
        if (this.webSocketServer) {
          this.sendStats(this.webSocketServer.clients, this.getStats(stats));
        }

        /**
         * @private
         * @type {Stats | MultiStats}
         */
        this.stats = stats;
      }
    );
  }

當客戶端接收到 websocket 廣播的消息后,會觸發reloadApp方法(webpack打包時注入進去的)reloadApp會根據廣播消息里的更新類型選擇是頁面更新 liveReload 還是模塊更新 HMR,通過測試,發現每次修改正是都會經過 sendMessage 方法。

圖片圖片

上圖正是 webpack-dev-server 的整個流程圖,到這來,這篇文章的內容也就講完了,如有錯誤,煩請批評指出。

本文轉載于:https://juejin.cn/post/7187368174952644665

參考文獻

  • # webpack-dev-server運行原理[1]
  • WDS源碼[2]
責任編輯:武曉燕 來源: 量子前端
相關推薦

2024-05-06 10:53:22

瀏覽器TCPHTTPS

2013-02-25 11:40:04

云計算大數據阿里云

2011-02-22 09:59:44

互聯網Email網站

2019-12-23 16:24:47

人工智能機器學習技術

2016-11-02 06:57:33

科技新聞早報

2011-03-31 09:20:45

URLDNSWeb應用程序

2018-10-08 09:32:55

2025-06-30 09:26:47

2023-01-14 16:11:27

瀏覽器URL回車

2019-08-26 09:35:25

命令ping抓包

2020-09-01 11:40:01

HTTPJavaTCP

2021-12-16 15:58:48

Linux內存微軟

2022-05-26 23:36:36

SQLMySQL數據

2020-10-09 08:59:55

輸入網址解密

2023-11-02 08:00:00

ClickHouse數據庫

2021-05-27 10:26:00

地址欄URLhttp

2022-02-15 13:20:28

特斯拉電動車

2019-06-12 11:01:19

TCPUDPHTTP

2019-11-28 15:36:43

Redis數據庫高延遲

2023-12-13 17:04:51

終端命令shell
點贊
收藏

51CTO技術棧公眾號

亚洲国产日韩欧美综合久久| 亚洲国产成人在线| 777精品视频| 魔女鞋交玉足榨精调教| 精品成人免费一区二区在线播放| 国产精品久久毛片a| 岛国一区二区三区高清视频| 精品国产一区二区三区四| 欧美a级片视频| 亚洲国产女人aaa毛片在线| 国产主播中文字幕| 国内外激情在线| 成年人网站91| 成人做爽爽免费视频| 国产尤物在线视频| 欧美一区不卡| 国产午夜精品一区二区三区| 男人女人拔萝卜视频| 日日夜夜天天综合| 亚洲一区二区精品视频| 性刺激综合网| 亚洲 欧美 激情 另类| 久久精品99国产精品日本| 午夜精品一区二区三区在线视频 | 国产在线无码精品| 黄色在线网站| 成人aa视频在线观看| 91免费在线视频| 波多野结衣绝顶大高潮| 99香蕉国产精品偷在线观看 | 久久久com| 朝桐光av在线一区二区三区| 久久99精品久久只有精品| 欧美最顶级丰满的aⅴ艳星| 毛片a片免费观看| 久久久久av| 日韩中文字幕在线| 日韩不卡av在线| 国产99亚洲| 日韩成人av在线| 久久久久亚洲av无码网站| 亚洲精品tv| 欧美日韩专区在线| 美女网站免费观看视频| 欧美1级2级| 日韩欧美国产免费播放| 精品国产免费av| 免费高潮视频95在线观看网站| 一区二区三区自拍| 欧美另类videos| 成人免费视屏| 亚洲日本va午夜在线影院| 中文字幕乱码一区二区三区| yiren22综合网成人| 国产午夜精品美女毛片视频| 欧美精品一区三区在线观看| 欧美女同网站| 欧美激情一区二区三区| 神马影院我不卡| 91精品国产综合久久久久久豆腐| 日本一区二区三区免费乱视频| 日韩久久在线| 色网站免费在线观看| 亚洲视频网在线直播| 免费看污污视频| 色yeye免费人成网站在线观看| 亚洲最大成人网4388xx| 成品人视频ww入口| 天堂√中文最新版在线| 色婷婷久久久久swag精品| 天天操天天摸天天爽| 婷婷成人av| 日韩精品中文字幕一区| 蜜臀aⅴ国产精品久久久国产老师| 精品国内亚洲2022精品成人| 精品亚洲一区二区| 免费黄在线观看| 一区二区电影在线观看| 性欧美激情精品| 国产又粗又猛又黄视频| 精品一区二区精品| 国产精品视频免费一区二区三区| 日韩电影在线观看完整版| 欧美经典三级视频一区二区三区| 一区二区三区我不卡| 宅男网站在线免费观看| 好吊成人免视频| 亚洲免费999| 成人看片爽爽爽| 亚洲最大中文字幕| 欧美精品xxxxx| 久久综合狠狠| 成人妇女免费播放久久久| 草逼视频免费看| 国产日韩欧美激情| 人妻无码一区二区三区四区| 亚洲私拍视频| 日韩一区二区电影| 日韩人妻一区二区三区| 一区二区三区在线| 日韩av电影国产| 国产黄色小视频在线观看| 国产午夜精品一区二区| 成人一级生活片| 国产精品99| 亚洲激情视频网站| 欧美风情第一页| 久久亚洲欧洲| 国产精品yjizz| 欧美人xxx| 色噜噜狠狠一区二区三区果冻| 一级黄色免费毛片| 精品日韩欧美一区| 2019中文字幕免费视频| 国产福利资源在线| 中文字幕av一区 二区| 六月丁香激情网| 久久视频社区| 久久精品国产亚洲7777| 天天射天天干天天| 93久久精品日日躁夜夜躁欧美| 一区中文字幕在线观看| 国产综合色区在线观看| 亚洲精品国产欧美| 久久久久亚洲av成人片| 黑人巨大精品欧美一区| 亚洲bbw性色大片| 成人亚洲欧美| 国产偷国产偷亚洲清高网站| 久久中文字幕无码| 国产一区二区三区香蕉| 亚洲精品久久久久久一区二区| 欧美私密网站| 亚洲福利小视频| 免费在线观看日韩| 国产剧情一区二区| 懂色av一区二区三区四区五区| 亚洲成av在线| 国产亚洲精品久久| 销魂美女一区二区| 国产三级欧美三级日产三级99| 欧美 日韩 激情| 精品成人自拍视频| 91精品91久久久久久| 人妻偷人精品一区二区三区| 亚洲一线二线三线视频| 欧美xxxx日本和非洲| 欧美日本在线| 成人欧美一区二区三区在线观看| a级在线观看| 精品久久人人做人人爱| 国产一级片免费看| zzijzzij亚洲日本少妇熟睡| 精品丰满人妻无套内射| 久久中文资源| 57pao精品| 国产黄色在线| 欧美日韩免费一区二区三区| 中文字幕无码日韩专区免费| 国产一区二区看久久| 特级西西444| 大奶在线精品| 欧洲美女7788成人免费视频| 久青草国产在线| 欧美日韩中文字幕一区二区| 日韩视频中文字幕在线观看| 国产精品1024久久| 国产麻豆天美果冻无码视频| 免费欧美激情| 日韩免费在线看| 成在在线免费视频| 欧美撒尿777hd撒尿| 五月天色婷婷丁香| 国产成人精品免费看| 婷婷五月综合缴情在线视频| 亚洲成人一品| 国产精品一区二区三区在线播放| 黄色免费在线观看网站| 精品久久99ma| 人人草在线观看| 国产精品久久久久桃色tv| 久久精品亚洲天堂| 亚洲激情在线| 亚洲不卡1区| 亚洲狼人综合| 久久免费视频网| 国产免费视频在线| 日韩欧美专区在线| 免费看日批视频| ...xxx性欧美| aaaaa一级片| 激情五月激情综合网| 国产欧美日韩小视频| 精品久久美女| 国产精品二区三区四区| 日韩av免费| 国语对白做受69| 五月天婷婷在线视频| 亚洲国产成人精品久久| 亚洲熟妇av乱码在线观看| 亚洲综合自拍偷拍| 日本美女bbw| thepron国产精品| 热久久久久久久久| 美女精品在线观看| 免费网站永久免费观看| 欧美日韩激情| 精品乱色一区二区中文字幕| 四虎成人精品一区二区免费网站| 91精品国产色综合| 最爽无遮挡行房视频在线| 亚洲性生活视频在线观看| 亚洲黄色小说网址| 欧美日韩国产精选| 无码免费一区二区三区| 亚洲不卡av一区二区三区| 亚洲 欧美 变态 另类 综合| 久久久久国产精品麻豆ai换脸 | 亚洲精品乱码久久久久久金桔影视 | 成人高清在线| 亚洲国产91精品在线观看| 国产原创中文av| 在线观看不卡一区| 日韩久久久久久久久| 亚洲另类中文字| 狂野欧美性猛交| 久久久精品免费免费| 亚洲男女在线观看| 国产69精品久久99不卡| 亚洲无在线观看| 免费成人你懂的| av片中文字幕| 亚洲欧美高清| 中文字幕无码精品亚洲35| 亚洲高清资源| 大荫蒂性生交片| 国模一区二区三区| 九一免费在线观看| 中文字幕一区二区三区久久网站| 一区精品视频| 久久久精品久久久久久96| 中文字幕一区二区三区最新| 水蜜桃精品av一区二区| 亚洲午夜精品一区二区| 日韩av密桃| 亚洲一区二区不卡视频| 日韩欧美综合| 宅男一区二区三区| 羞羞答答成人影院www| 婷婷视频在线播放| 中文在线日韩| 野外做受又硬又粗又大视频√| 女人天堂亚洲aⅴ在线观看| 国产成人亚洲综合无码| 亚洲性图久久| 国产日产欧美视频| 日韩黄色免费网站| 天天干天天av| 国产美女在线精品| 伊人久久久久久久久| 成人手机电影网| 一出一进一爽一粗一大视频| 91蜜桃传媒精品久久久一区二区| 永久免费看mv网站入口78| 欧美国产一区在线| 久久嫩草捆绑紧缚| 亚洲免费观看在线视频| 日韩免费一二三区| 欧美三级免费观看| 中国女人真人一级毛片| 欧美一区二区三区在线电影| 免费a级片在线观看| 精品视频一区在线视频| 国产h视频在线观看| 久久九九亚洲综合| 91资源在线观看| 国产精品白嫩美女在线观看| 亚洲人成网站在线在线观看| 国产传媒一区二区三区| 中文字幕亚洲影视| 一区二区三区四区视频在线| 国产一区二区中文| 精品视频一区二区在线| 久色婷婷小香蕉久久| 一区二区三区四区影院| 久久久久久久久久美女| 日日噜噜夜夜狠狠久久波多野| 亚洲观看高清完整版在线观看 | 特黄一区二区三区| 一区二区三区在线影院| 日本熟女毛茸茸| 欧美一级日韩免费不卡| 日韩偷拍自拍| 不卡av电影院| 国产另类xxxxhd高清| 成人av播放| 日韩高清欧美| 好吊妞无缓冲视频观看| 久久av资源网| 久久精品一区二区免费播放| 亚洲桃色在线一区| 免费黄色网址在线| 日韩午夜中文字幕| 999国产在线视频| 4438全国成人免费| 一区二区在线免费播放| 天天爽天天狠久久久| 91久久中文| 青青草原播放器| 国产日本一区二区| 日韩欧美激情视频| 91精品国产91久久久久久一区二区 | 国产精品一区二区免费在线观看| 激情综合色播五月| 日本一卡二卡在线播放| 婷婷夜色潮精品综合在线| 国产男女无套免费网站| 伊人久久综合97精品| 欧美激情网站| 国内视频一区二区| 欧美区国产区| 午夜影院免费观看视频| 国产精品家庭影院| 久久精品视频2| 日韩精品免费在线| 波多野结衣在线观看| **亚洲第一综合导航网站| 日韩成人免费| 亚洲少妇久久久| 国产偷v国产偷v亚洲高清| 日韩中文字幕在线观看视频| 亚洲成人xxx| 爱看av在线| 国产女人水真多18毛片18精品| 综合久久久久| 日本黄色www| 亚洲乱码中文字幕综合| 国产毛片毛片毛片毛片| 啊v视频在线一区二区三区| 精品国产美女a久久9999| 视频一区免费观看| 日韩激情视频在线观看| 性猛交娇小69hd| 色狠狠桃花综合| 国产免费a∨片在线观看不卡| 国产精品久久久久久久久男| 欧美在线色图| 亚洲欧美手机在线| 亚洲色图一区二区三区| 国产婷婷在线视频| 欧美日本国产在线| 成人精品动漫一区二区三区| 国产综合中文字幕| 97精品视频在线观看自产线路二| 99久在线精品99re8热| 国产视频在线一区二区| 欧美影视资讯| www.午夜色| 国产sm精品调教视频网站| 日韩欧美亚洲视频| 精品爽片免费看久久| 日韩天堂在线| 中文字幕免费在线不卡| 成人永久看片免费视频天堂| 色播视频在线播放| 国产亚洲精品激情久久| av在线播放一区二区| 国产成人一区二区三区别| 成人av在线资源| 日本精品入口免费视频| 少妇高潮 亚洲精品| 婷婷视频一区二区三区| 国模无码视频一区二区三区| 久久久国产精品午夜一区ai换脸| 国产女优在线播放| 欧美成人一区二区三区电影| 欧美aaaaa级| 亚洲欧美久久久久| 一区二区三区在线免费视频| 日韩精品视频无播放器在线看 | 天堂成人在线| 国产精品久久久久久搜索| 女人天堂亚洲aⅴ在线观看| 好吊日免费视频| 欧美日韩高清一区二区三区| 第一av在线| 亚洲精品电影在线一区| 懂色av一区二区三区免费看| 无码人妻丰满熟妇奶水区码| 插插插亚洲综合网| 神马影视一区二区| 国产成人精品综合久久久久99| 狠狠久久亚洲欧美专区| 国产写真视频在线观看| 久久精品国产综合精品| 国产在线不卡一卡二卡三卡四卡| 日韩在线视频免费播放| 久久久精品久久| 激情婷婷综合| 国产黑丝在线观看|