精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧美日韩专区| 男人的天堂a在线| 一本色道69色精品综合久久| 国产欧美日本一区二区三区| 国产精品极品美女粉嫩高清在线| 欧美 日韩 成人| 波多野结衣亚洲| 国产欧美日韩视频在线观看| 成人黄色av网| 伊人365影院| 国产欧美久久一区二区三区| 欧美日韩高清一区二区三区| 小说区视频区图片区| 中日韩av在线| 欧美88av| 亚洲色图50p| 无码人妻少妇色欲av一区二区| 国产一区二区三区福利| 视频一区二区不卡| 欧美www在线| 中文幕无线码中文字蜜桃| 美女视频一区| 亚洲国产精品久久久久婷婷884| 成人羞羞视频免费| 羞羞色院91蜜桃| 99热国内精品| 亚洲福利视频免费观看| 粉嫩虎白女毛片人体| 性xxxxfjsxxxxx欧美| 成人动漫在线一区| 国产精品日韩欧美大师| 九九视频在线观看| 日韩精品永久网址| 麻豆91精品视频| 欧美黑人巨大xxx极品| 五月天综合视频| 9l视频自拍九色9l视频成人| 欧美视频日韩视频| 欧美日韩一道本| 二区三区在线观看| 国产精品理伦片| 国产精品久久久久av福利动漫| 中文字幕精品在线观看| 亚洲一区观看| 欧美高清自拍一区| 成年人在线观看av| 精品一区二区三区中文字幕在线| 狠狠久久亚洲欧美专区| 黄色a级片免费看| 久久精品视频免费看| 国产清纯白嫩初高生在线观看91 | 天使萌一区二区三区免费观看| 久久亚洲欧美日韩精品专区 | 污版视频在线观看| 日韩中文影院| 91福利资源站| 日本a在线天堂| 免费黄网在线观看| 久久你懂得1024| 成人自拍爱视频| 99在线小视频| 国产精品一区一区三区| 国产欧美精品va在线观看| 无码人妻丰满熟妇精品| 久久久人人人| 国产999在线| 极品久久久久久| 欧美一区激情| 久久99青青精品免费观看| 永久免费看黄网站| 亚洲欧美综合| 久久在线观看视频| 午夜写真片福利电影网| 欧美三级乱码| 韩国精品美女www爽爽爽视频| 婷婷伊人五月天| 国产最新精品| 中文字幕一区日韩电影| 伊人久久久久久久久久久久久久| 欧美日韩一区二区综合| 深夜福利国产精品| 中文字幕 自拍| 哺乳挤奶一区二区三区免费看| 337p日本欧洲亚洲大胆精品| 国产精品久久不卡| 久久av导航| 亚洲欧美自拍一区| 欧美xxxooo| 午夜激情久久| 欧美激情一区二区三区在线视频观看 | 免费久久久久久| 亚洲七七久久综合桃花剧情介绍| 国产视频一区二区在线| 你懂的网址一区二区三区| 风间由美一区| 国产精品久久久久国产精品日日| 中文字幕乱码免费| 久久青草伊人| 欧美日韩一区二区三区在线| 欧美国产日韩另类| 激情av综合| 中文综合在线观看| 18岁成人毛片| 日韩高清在线不卡| 99在线观看| 亚洲欧美日韩成人在线| 自拍偷拍欧美精品| 欧美亚洲视频一区| 高潮在线视频| 欧洲国产伦久久久久久久| 妖精视频在线观看| 欧美肉体xxxx裸体137大胆| 欧美大尺度激情区在线播放| 日韩久久中文字幕| 国产美女视频91| 欧美精品一区二区三区在线四季| 91在线高清| 欧美日韩精品在线播放| 91看片在线免费观看| 国产精品极品在线观看| 久久九九国产精品怡红院 | 亚洲欧洲av一区二区| 91插插插插插插| 亚洲高清免费| 国产成人在线精品| 国产精品视频无码| 不卡欧美aaaaa| 视频一区三区| xxx.xxx欧美| 色婷婷综合久久| 九九九久久久久久久| 啪啪亚洲精品| 欧美激情一级精品国产| 中文字幕理论片| 国产亚洲欧美激情| 一区二区三区不卡在线| 女囚岛在线观看| 欧美丝袜第一区| 久久综合桃花网| 久久99精品久久久久久园产越南| 欧美大秀在线观看| 日韩免费黄色片| 奇米色一区二区三区四区| 丁香五月网久久综合| 91在线看片| 色噜噜夜夜夜综合网| 国产乱淫av片| 日韩电影免费网址| 欧美夜福利tv在线| 欧美一级一区二区三区| 久久久久国产精品人| 和岳每晚弄的高潮嗷嗷叫视频| 日本黄色成人| 亚洲美女免费精品视频在线观看| 唐朝av高清盛宴| 看电视剧不卡顿的网站| 国语精品中文字幕| 蜜臀av在线| 日韩一区二区三区免费观看| 亚洲天堂精品一区| 奇米四色…亚洲| 亚洲国产欧美日韩| 精品无人乱码一区二区三区 | 日韩美女免费观看| 国产高清在线观看视频| 国产精品成人一区二区艾草| 我看黄色一级片| 色综合中文网| 国产精品入口免费视| 天天干视频在线| 一区二区三区丝袜| 免费网站在线观看黄| 国产精品久久久久无码av| 日韩免费观看av| 日批视频免费播放| 天天综合天天综合色| 国产不卡的av| 国产精品久久久久无码av| 国产有码在线一区二区视频| 日本高清视频在线播放| 精品国产91乱高清在线观看 | av有声小说一区二区三区| 亚洲欧美国内爽妇网| 视频一区二区三区四区五区| 91免费看片在线观看| 久久av综合网| 久久精品国产亚洲blacked| 欧美精品18videos性欧| 高h放荡受浪受bl| 五月激情综合网| 亚洲精品午夜视频| 久久国产人妖系列| 国内自拍中文字幕| 国产欧美啪啪| 国产精品免费在线免费 | 久久精品国产69国产精品亚洲| 伊人网综合在线| 亚洲欧美日韩在线不卡| 亚洲精品国产久| 一区二区自拍| 青娱乐一区二区| 中文字幕日本一区| 欧美精品久久久久久久免费观看 | 天堂va蜜桃一区二区三区| 亚洲欧美精品在线观看| 日韩在线你懂得| 精品中文字幕在线观看| 日本免费一区二区三区最新| 欧美日韩一区二区电影| 久久免费视频精品| 久久精品亚洲一区二区三区浴池 | 精品一区二区三区日本| 色8久久久久| 久久人人爽人人| 韩国中文字幕2020精品| 91精品国产色综合久久不卡电影| 蜜桃av.com| 国产亚洲短视频| 日韩av影视大全| 午夜亚洲精品| 久久99国产精品一区| 视频福利一区| 日韩欧美视频在线| 美女脱光内衣内裤| 激情综合色丁香一区二区| 青青青免费在线| 国产国产精品| 欧美日韩在线不卡一区| 亚洲一区二区电影| 国产精品成人国产乱一区| a视频在线播放| 亚洲色图美腿丝袜| 国产成人自拍一区| 欧美日韩国产电影| 亚洲第一网站在线观看| 亚洲综合色噜噜狠狠| 女教师淫辱の教室蜜臀av软件| 99久久精品免费精品国产| 日本美女视频一区| 国产精品一二| 成人性免费视频| 在线看片不卡| 久久www免费人成精品| 91精品亚洲一区在线观看| 欧洲成人免费aa| 老司机99精品99| 久久精品国产一区二区电影| 福利视频在线看| 亚洲免费av电影| 少妇高潮一区二区三区99小说| 91.com在线观看| 久久久久久久亚洲| 在线免费观看成人短视频| 国产污污视频在线观看| 亚洲一区在线视频观看| 亚洲熟女毛茸茸| 国产丝袜美腿一区二区三区| 美女久久久久久久久久| 久久久美女艺术照精彩视频福利播放| 亚洲美女性囗交| 久久99精品国产麻豆婷婷洗澡| 日本欧美视频在线观看| 亚洲国产电影| 丁香婷婷综合激情| 国语对白精品一区二区| 黄网站色视频免费观看| 欧美疯狂party性派对| 麻豆md0077饥渴少妇| 欧美日韩伦理| 亚洲日本欧美在线| 色婷婷精品视频| 国产成人av一区二区三区| 久久亚洲国产精品尤物| 欧美洲成人男女午夜视频| 久草在线中文最新视频| 青草青草久热精品视频在线网站| 成人片免费看| 欧美性做爰毛片| 91精品韩国| 国产精品爽黄69天堂a| 一级毛片久久久| 午夜精品久久久久久久久久久久久 | 美脚丝袜一区二区三区在线观看| 欧美偷窥清纯综合图区| 国精产品99永久一区一区| 国产91一区| 亚洲欧美精品在线观看| 国产精品久久久久蜜臀 | 日批在线观看视频| 91日韩精品一区| 久久人妻少妇嫩草av蜜桃| www国产精品av| 黄视频网站免费看| 亚洲电影一区二区三区| 国产嫩bbwbbw高潮| 欧美人妇做爰xxxⅹ性高电影| 99久久免费国产精精品| 日韩精品极品视频| 国产在线高清视频| 欧美激情视频给我| 欧美freesex黑人又粗又大| 国产福利视频一区二区| 欧美男人天堂| 91精品国产自产在线观看永久| 久久av网站| 91超碰rencao97精品| 日本亚洲不卡| 一本一道久久a久久精品综合 | 欧美久久婷婷综合色| 91亚洲欧美激情| 日韩电影免费观看在线观看| 毛片在线播放网址| 久久夜色撩人精品| 成人性生活av| 91久久久一线二线三线品牌| 九色丨蝌蚪丨成人| 久久亚洲国产精品日日av夜夜| 99久久夜色精品国产亚洲狼| 日韩有码免费视频| 国产麻豆一精品一av一免费| 蜜桃精品成人影片| 色偷偷中文字幕| 国产美女亚洲精品7777| 久久视频在线观看中文字幕| 国产精品7777777| 一区二区三区.www| 中文字幕69页| 欧美成人精品1314www| 亚洲第一天堂网| 在线观看欧美日韩| 黄色网页在线看| 国产精品国产三级国产aⅴ浪潮| 成人全视频在线观看在线播放高清 | 精品视频一区 二区 三区| 香蕉视频黄在线观看| 久久精品视频va| 自拍视频在线看| 91成人在线看| av在线不卡顿| 欧美日韩一道本| 成人精品电影在线观看| www中文在线| 欧美日韩亚洲网| 丁香六月色婷婷| 日韩在线观看免费全| 精品国模一区二区三区| 久久久久久久久久码影片| 综合色一区二区| 欧美性猛交xxxx乱大交91| 欧美激情一二三区| 国产精品6666| 9191久久久久久久久久久| 日本三级视频在线观看| 国产精品丝袜高跟| 鲁大师精品99久久久| 老太脱裤让老头玩ⅹxxxx| 国产成人精品三级麻豆| 国产黄色大片免费看| 欧美在线不卡视频| 中文字幕在线有码| 日韩欧美国产免费播放| 日本黄色大片视频| 日韩一区二区三区在线播放| 蜜桃成人精品| 五月天色一区| 玖玖在线精品| 毛片aaaaaa| 欧美国产综合色视频| 一级黄色在线视频| 伊人久久久久久久久久久久久 | 亚洲精品中文字幕乱码三区| 一级黄色免费看| 久久九九国产精品怡红院| 亚洲91在线| 农民人伦一区二区三区| www.亚洲精品| 五月天婷婷激情| 亚洲午夜久久久影院| 9.1麻豆精品| 亚洲精品少妇一区二区| 精品一二三四区| www.99热| 91精品国产色综合久久| 国产区美女在线| 成人xxxxx色| 日韩精品91亚洲二区在线观看| 亚洲欧美日韩第一页| 91精品国产综合久久久久久久 | 1000部国产精品成人观看| 国产又爽又黄免费软件| 欧美激情亚洲国产| 亚洲婷婷丁香| 手机在线看福利| 亚洲欧美日韩国产综合在线| 国产精品自拍电影| 久久成年人视频| 中文一区二区三区四区| 欧美视频在线观看网站| 国产日产精品一区| 亚洲综合精品在线|