国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

node 第二十一天 webpack 初見

這篇具有很好參考價值的文章主要介紹了node 第二十一天 webpack 初見。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

  1. 為什么需要學習(了解)webpack
    webpack是前端工程化的基石,webpack又是基于node進行文件打包bundle,所以作為前端起手學習node服務端開發(fā),同時學習webpack是很有必要的。
    隨著vite的出現(xiàn),vue這一脈可能也許不再需要學習webpack了,但是需要知道的是,打包一定是前端工程化繞不開的一個概念,如果是一個足夠了解webpack的開發(fā)者,日后再學習任何一款前端構建工具都將事半功倍。
    但是webpack本身卻是是復雜的。真要深入學習付出是必不可少的。
    經過基礎學習之后能夠具備對問題順藤摸瓜的能力,這是基礎要求。

  2. webpack概念

    本質上,webpack 是一個用于現(xiàn)代 JavaScript 應用程序的 靜態(tài)模塊打包工具。當 webpack 處理應用程序時,它會在內部從一個或多個入口點構建一個 依賴圖(dependency graph),然后將你項目中所需的每一個模塊組合成一個或多個 bundles,它們均為靜態(tài)資源,用于展示你的內容。

  3. webpack核心配置項

    • webpack.common.js 基本配置項 入口(entry), 出口(output), 插件(plugins),模塊打包(loader)
      const path = require('path');
      const HtmlWebpackPlugin = require('html-webpack-plugin');
      const webpack = require('webpack');
      const MyPlugin = require('./myPlugin');
      
      module.exports = {
        // 入口 可多個
        entry: './src/main.js',
        // 出口 可多個
        output: {
          path: path.resolve(__dirname, 'dist'),
          filename: 'build.js'
        },
        // 插件
        plugins: [
          new webpack.DefinePlugin({
            VERSION: JSON.stringify('1.0.0')
          }),
          new HtmlWebpackPlugin({ template: './public/index.html', title: 'webpack app' }),
          new MyPlugin()
        ],
        // 模塊loader
        module: {
          rules: [
            {
              test: /\.css$/i,
              use: ['style-loader', 'css-loader', './myLoader']
            }
          ]
        }
      };
      
      
    • webpack.dev.js 開發(fā)環(huán)境配置項 代理服務器(devServer) 調試工具(devtool)
      const { merge } = require('webpack-merge');
      const path = require('path');
      const common = require('./webpack.common.js');
      const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
      
      module.exports = merge(common, {
        plugins: [
          new BundleAnalyzerPlugin({
            analyzerPort: 8888,
            openAnalyzer: false
          })
        ],
        // 模式
        mode: 'development',
        // devServer
        devServer: {
          static: {
            // 告訴服務器從哪里提供內容。只有在你希望提供靜態(tài)文件時才需要這樣做。static.publicPath 將會被用來決定應該從哪里提供 bundle,并具有優(yōu)先級。
            publicPath: '/',
            directory: path.join(__dirname, 'public')
          },
          host: 'localhost',
          port: 8080,
          open: true
        },
        // source-map 會在webpack打包生成的文件模塊的末端 加上 //# sourceURL=
        // 映射source-map
        devtool: 'inline-source-map'
      });
      
    • webpack.prod.js 生產環(huán)境配置項 externals(打包剔除優(yōu)化)
      const { merge } = require('webpack-merge');
      const common = require('./webpack.common.js');
      const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
      const { CleanWebpackPlugin } = require('clean-webpack-plugin');
      
      module.exports = merge(common, {
        plugins: [
          new CleanWebpackPlugin(),
          new BundleAnalyzerPlugin({
            analyzerPort: 1055,
            openAnalyzer: false
          })
        ],
        // 模式
        mode: 'production',
        // externals key: value
        // key和 import jQ from 'jquery'; 中的 'jquery' 一樣
        // value 用于替換 import jQ from 'jquery' 中的jQ
        // 所以 value 必須和cdn引用暴露的window變量一樣
        externals: {
          jquery: 'jQuery'
        }
      });
      
  4. main.js 順著main.js我們往下看

    import './style.css';
    
    import jQ from 'jquery';
    
    const str = 'hello webpack';
    // 再webpack中
    // 告知 webpack 將 process.env.NODE_ENV 設置為一個給定字符串。
    // 如果 optimization.nodeEnv 不是 false,則會使用 DefinePlugin,optimization.nodeEnv 默認值取決于 mode,
    // 如果為 falsy 值,則會回退到 "production"。
    console.log(process.env.NODE_ENV);
    //打包常量直接替換為 console.log('hello webpack');
    console.log(str);
    //生產環(huán)境用cdn
    console.log(jQ);
    //webpack.DefinePlugin
    console.log(VERSION);
    
    // 開啟 devtool: 'inline-source-map' 方便調試
    // console.log(VERSION.t.t);
    
  5. 實現(xiàn)js文件中引入css
    因為在webpack.common.js中配置了css模塊的loader,這樣webpack就能知道怎么去處理對應的文件,以及處理之后給js暴露一個什么樣的對象

  6. 生產環(huán)境不將jquery打包,改用cdn引入
    因為在webpack.prod.js中配置了打包剔除優(yōu)化(externals),結合使用插件HtmlWebpackPlugin 結合 ejs語法, 在html模板中實現(xiàn)生產環(huán)境使用cdn引入jquery,當然此處還涉及了如何判斷開發(fā)環(huán)境和生產環(huán)境,用到了一個node進程對象變量process.env.NODE_ENV 默認情況取決于webpack配置項mode的值
    html模板如下

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title><%= htmlWebpackPlugin.options.title %></title>
        <% if (process.env.NODE_ENV === 'production' ) { %>
        <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
        <% } %>
      </head>
      <body>
        <h1>hello webpack server</h1>
      </body>
    </html>
    
  7. 使用DefinePlugin 在 編譯時 將代碼中的變量替換為其他值或表達式
    這里你也可以用來區(qū)分開發(fā)環(huán)境和生產環(huán)境而不是使用process.env.NODE_ENV , 在main.js中我們輸出了一個被定義為字符串1.0.0的VERSION,console.log(VERSION); ==> console.log('1.0.0');

  8. 實現(xiàn)MyLoader MyPlugincmd控制臺打印MyLoader… MyPlugin… 自定義規(guī)則需要結合文檔文章來源地址http://www.zghlxwxcb.cn/news/detail-795618.html

    module.exports = function (source) {
      const content = source;
      console.log('MyLoader...');
      return content;
    };
    //loader 從右到左(或從下到上)地取值(evaluate)/執(zhí)行(execute)
    //盲猜源碼用了pop()
    
    module.exports = class MyPlugin {
      apply(compiler) {
        // 找到合適的事件鉤子,實現(xiàn)自己的插件功能
        compiler.hooks.emit.tap('MyPlugin', () => {
          // compilation: 當前打包構建流程的上下文
          console.log('MyPlugin...');
        });
      }
    };
    

到了這里,關于node 第二十一天 webpack 初見的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 第五十一天打卡

    中等 1.5K company 微軟 Microsoft 給定一個整數(shù)數(shù)組prices,其中第 prices[i] 表示第 i 天的股票價格 。? 設計一個算法計算出最大利潤。在滿足以下約束條件下,你可以盡可能地完成更多的交易(多次買賣一支股票): 賣出股票后,你無法在第二天買入股票 (即冷凍期為 1 天)。 注意

    2023年04月09日
    瀏覽(26)
  • 學習Android的第十一天

    目錄 Android ProgressBar 進度條 ProgressBar ProgressBar 外觀 ProgressBar 屬性 ProgressBar 方法 Android ProgressBar 動圖替代圓形進度條 范例 Android ProgressBar 自定義圓環(huán)進度條 例子: 參考文檔 在Android中,ProgressBar(進度條)是用于顯示任務進度的UI組件,通常用于耗時操作的過程中以及需要顯

    2024年02月19日
    瀏覽(28)
  • C語言(第三十一天)

    C語言(第三十一天)

    6. 調試舉例1 求1!+2!+3!+4!+...10!的和,請看下面的代碼: 調試找一下問題。 7. 調試舉例2 在VS2019、X86、Debug 的環(huán)境下,編譯器不做任何優(yōu)化的話,下面代碼執(zhí)行的結果是啥? 程序運行,死循環(huán)了,調試看看為什么? 調試可以上面程序的內存布局如下: ?1. 棧區(qū)內存的使用習慣

    2024年02月11日
    瀏覽(25)
  • 學C的第三十一天【通訊錄的實現(xiàn)】

    學C的第三十一天【通訊錄的實現(xiàn)】

    ========================================================================= 相關代碼gitee自取 :C語言學習日記: 加油努力 (gitee.com) ?========================================================================= 接上期 : 學C的第三十天【自定義類型:結構體、枚舉、聯(lián)合】_高高的胖子的博客-CSDN博客 ?==============

    2024年02月15日
    瀏覽(30)
  • 15天學習MySQL計劃-MySQL工具(進階篇)-第十一天

    1.mysql 該mysql 不是指MySQL服務,而是指MySQL的客戶端工具。 -e選項可以在MySQL客戶端執(zhí)行SQL語句,而不用連接到MySQL數(shù)據(jù)庫再執(zhí)行,對于一些批處理腳本,這種方式尤其方便。 2.mysqladmin mysqladmin是一個執(zhí)行管理操作的客戶端程序??梢杂盟鼇頇z查服務器的配置和當前狀態(tài),創(chuàng)建并

    2024年02月01日
    瀏覽(22)
  • 谷粒商城第十一天-完善商品分組(主要添上關聯(lián)屬性)

    谷粒商城第十一天-完善商品分組(主要添上關聯(lián)屬性)

    目錄 一、總述 二、前端部分 2.1 改良前端獲取分組列表接口及其調用 2.2 添加關聯(lián)的一整套邏輯 三、后端部分 四、總結 前端部分和之前的商品品牌添加分類差不多。 也是修改一下前端的分頁獲取列表的接口,還有就是加上關聯(lián)的那一套邏輯,包括基本構件的引入、數(shù)據(jù)域的

    2024年02月13日
    瀏覽(104)
  • 從零開始的力扣刷題記錄-第六十一天

    題目描述: 給定由一些正數(shù)(代表長度)組成的數(shù)組 nums ,返回 由其中三個長度組成的、面積不為零的三角形的最大周長 。如果不能形成任何面積不為零的三角形,返回 0。 題解: 排序后從后往前遍歷,取最大的三個邊,如果滿足兩邊之和大于第三邊則返回,否則整體向前

    2024年02月09日
    瀏覽(25)
  • 從零開始的力扣刷題記錄-第五十一天

    題目描述: 給你一棵二叉搜索樹的 root ,請你 按中序遍歷 將其重新排列為一棵遞增順序搜索樹,使樹中最左邊的節(jié)點成為樹的根節(jié)點,并且每個節(jié)點沒有左子節(jié)點,只有一個右子節(jié)點。 題解: 中序遍歷存儲節(jié)點后按順序連接即可 代碼(Go): 題目描述: 小扣在秋日市集發(fā)

    2024年02月08日
    瀏覽(26)
  • 【三十天精通Vue 3】第十一天 Vue 3 過渡和動畫詳解

    【三十天精通Vue 3】第十一天 Vue 3 過渡和動畫詳解

    ?創(chuàng)作者:陳書予 ??個人主頁:陳書予的個人主頁 ??陳書予的個人社區(qū),歡迎你的加入: 陳書予的社區(qū) ??專欄地址: 三十天精通 Vue 3

    2023年04月17日
    瀏覽(20)
  • 【算法第十一天7.25】二叉樹前、中、后遞歸、非遞歸遍歷

    樹的結構 ================================================ 鏈接 :力扣94-二叉樹中序遍歷 遞歸 思路 1、 確定返回值和方法參數(shù) :需要集合來存放樹各節(jié)點的值,最后打印出來,所以需要一個list集合作為參數(shù),不斷迭代;除此之外不需要有返回值 2、 確定終止條件 :當前節(jié)點為空時,

    2024年02月15日
    瀏覽(47)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包