欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

webpack前端應(yīng)用之基礎(chǔ)打包實(shí)現(xiàn)

 更新時(shí)間:2023年02月03日 08:53:18   作者:。Idea  
本文主要介紹了webpack前端應(yīng)用之基礎(chǔ)打包實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言:初識(shí) Webpack 5

webpack 是一個(gè)靜態(tài)資源的打包工具,會(huì)以一個(gè)或多個(gè)文件為入口,將這一個(gè)或多個(gè)文件直接或間接使用到的所有文件,組合成一個(gè)或多個(gè)文件輸出。輸出的文件就是編譯好的文件,通常稱其為 bundle,可以在瀏覽器上運(yùn)行。Webpack 本身能力有限,在不添加 loader、plugin等擴(kuò)展時(shí)能力有限。

Webpack 能讓前端具有 模塊化 和 工程化。

一、前端工程化

1、webpack

(1)定義:是一個(gè)前端的構(gòu)建工具。前端代碼格式多(html、css、js、圖片),前端構(gòu)建工具的作用是將各種格式不同文件打包到一起,方便項(xiàng)目的上線運(yùn)行。(將開(kāi)發(fā)環(huán)境的代碼轉(zhuǎn)換成運(yùn)行環(huán)境的代碼)

開(kāi)發(fā)環(huán)境的代碼:便于閱讀

運(yùn)行環(huán)境的代碼:能夠更快的執(zhí)行(通常會(huì)對(duì)代碼進(jìn)行壓縮)

? (2)主要功能:

? A、代碼壓縮:將js代碼、css代碼、靜態(tài)的資源文件(圖標(biāo)、圖像)等進(jìn)行混合壓縮,使代碼的體積變小、加載速度更快

B、統(tǒng)一編譯語(yǔ)法:css、less、sass,ES6語(yǔ)法、TypeScript語(yǔ)法等,語(yǔ)法要求不同在不同瀏覽器上運(yùn)行時(shí)會(huì)出現(xiàn)問(wèn)題,就需 要使用構(gòu)建工具進(jìn)行統(tǒng)一編譯

C、模塊化處理:css、js都有自己的模塊化處理方式,對(duì)于這些模塊化的語(yǔ)法在不同瀏覽器上的兼容性很差,需要使用構(gòu)建工具統(tǒng)一模塊化的形式,提高兼容性

2、webpack的使用:配置文件所需要的信息(五大配置屬性)

(1)entry(入口配置):配置打包的入口文件(即從項(xiàng)目的哪個(gè)文件開(kāi)始打包)

(2)output(輸出配置):配置打包后的文件,名稱是什么、存儲(chǔ)路徑是什么

         path:指明存儲(chǔ)路徑

         filename:指定打包后的文件名

         clean:指定打包前是否清空打包的輸出目錄

(3)Loaders(加載器):webpack只能處理js、json等文件,若需要打包處理其他格式的文件(css、less、sass、vue、圖片)時(shí)需要使用不同的loader(插件)輔助完成。若安裝了不同的loader,需要在webpack的配置中通過(guò)module.rules進(jìn)行配置

(4)plugins (插件):擴(kuò)展webpack的功能。如html插件

(5)mode(打包的模式): webpack 有兩種打包模式:生產(chǎn)模式 production 和 開(kāi)發(fā)模式 development。兩種模式都只能編譯ES6中的模塊(Module)語(yǔ)法。

3、示例

(1)創(chuàng)建文件夾(根目錄): webpack-study

(2)進(jìn)入該文件夾,打開(kāi)cmd窗口(vs code終端)

?(3)將該文件夾初始化為npm項(xiàng)目:npm init

(4)安裝 webpack 開(kāi)發(fā)依賴:npm install webpack webpack-cli -D

        或 npm install  webpack  -D

            npm install  webpack-cli  -D

        強(qiáng)調(diào):

?         A、使用npm安裝包時(shí),若沒(méi)有指定版本號(hào),默認(rèn)安裝最新版本

         B、package.json文件中dependencies鍵的含義是發(fā)布后還依賴的,devDependencies鍵的

                含義是開(kāi)發(fā)時(shí)的依賴

?         C、npm install —save:將依賴包安裝到dependencies鍵下;npm install —save-dev將依賴

                包安裝到devDependencies鍵下

         D、i 是 install 的縮寫(xiě),-D 是 —save-dev 的縮寫(xiě)(即在開(kāi)發(fā)時(shí)的依賴)

? (5)項(xiàng)目的目錄結(jié)構(gòu):

 (6)寫(xiě)代碼

? (7)在項(xiàng)目的根目錄下創(chuàng)建webpack的配置文件:webpack.config.js

/**
 * webpack的基本打包配置有: entry、output、mode 三項(xiàng)即可
 */
const path = require('path');
module.exports = {
    entry:'./src/main.js',//配置打包入口文件
    output:{//輸出配置
        path: path.join(__dirname,'dist'),//配置輸出文件的保存位置
        filename:'js/bundle.js',//打包后的文件名
        clean: true,//打包前是否將打包的輸出目錄清空
    },
    mode:'development'//以開(kāi)發(fā)模式打包
}

(8)在package.json文件中配置打包指令

"scripts": {
"build": "webpack"
}

? (9)運(yùn)行打包指令進(jìn)行打包

? (10)將打包后的js文件導(dǎo)入頁(yè)面文件(index.html)中

4、webpack中使用的loader

? (1)url-loader:用來(lái)打包圖像文件

? (2)’style-loader’, ‘css-loader’, ‘less-loader’:用來(lái)打包樣式文件

? (3)babel-loader:打包js文件

? (4)vue-loader:打包.vue文件

 此處附加 webpack官網(wǎng)

二、webpack配置詳解

const { resolve } = require('path'); // node 內(nèi)置核心模塊,用來(lái)處理路徑問(wèn)題。
module.exports = { 
     mode: 'development' //開(kāi)發(fā)環(huán)境   production  //生產(chǎn)環(huán)境
 	 entry: './src/js/index.js', //  單入口文件
      // entry: {                     //多入口  會(huì)打包雙方重復(fù)文件
      //   index: './src/index.js',
      //   another: './src/another-module.js'
      // },
      // entry: {                     //多入口   lodash不會(huì)重復(fù)打包
      //   index: { import: './src/index.js', dependOn: 'shared' },
      //   another: { import: './src/another-module.js', dependOn: 'shared' },
      //   shared: 'lodash' //不會(huì)重復(fù)打包
      // },
	 output: { // 輸出配置
    	 //filename: './built.js', // 輸出文件名 
         path: resolve(__dirname, 'dist'),  //打包后的輸出位置 webpack當(dāng)前目錄下的  dist
    //contenthash根據(jù)內(nèi)容變化生成文件名 不變不修改名字會(huì)用緩存
        filename: 'scripts/[name].[contenthash].js', //'bundle.js',      //打包后的文件名  多個(gè)入口不能寫(xiě)固定一個(gè)名字
        clean: true,   //打包后清除上次內(nèi)容
        assetModuleFilename: 'images/[contenthash][ext]', //靜態(tài)文件打包地址/文件名
        publicPath: ''
	 },
    // devtool: 'inline-source-map',  //打包后找到真實(shí)源代碼位置
     devServer: {            //實(shí)時(shí)更新
        static: './dist', 
        hot: true,   //開(kāi)啟熱更新
        compress: true, // 啟動(dòng)gzip壓縮
        port: 3000, // 端口號(hào)
        open: true // 自動(dòng)打開(kāi)瀏覽器
        proxy: {   //代理
          '/api': {
            target: 'http://localhost:4000',
            changeOrigin: true,
            ws: true,
            pathRewrite: {
              '^/api': ''
            }
      }
    }
  },
 module: {
    rules: [
      // 詳細(xì)loader配置
      // 不同文件必須配置不同loader處理
     {
        test: /\.(jpg|gif|png)/,
        use: 'url-loader',
        option: {// 圖片大小小于8kb,就會(huì)被base64處理// 優(yōu)點(diǎn): 減少請(qǐng)求數(shù)量(減輕服務(wù)器壓力)// 缺點(diǎn):圖片體積會(huì)更大(文件請(qǐng)求速度更慢)
          esModule: true,
          limint: 5 * 1024,    //圖片是否轉(zhuǎn)base64
          name: '[hash: 10].[ext]'  //圖片命名
        }
      },
      {
        test: /\.(css|less)$/,
        // use: ['style-loader', 'css-loader', 'less-loader']  //從后往前編譯 先解析在編譯  行內(nèi)樣式
        use: ['MinCssExtractPlugin.loader', 'css-loader', 'less-loader'], //把css文件打包到一個(gè)css 用link引入到html中
      },
      {
        test: /\.js$/,
        exclude: /node_modules/, // 不打包指定路徑下的js文件
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env'],
            plugins: [
              [
                '@babel/plugin-transform-runtime'  //為promise解決
              ]
            ]
          }
        }
      },
 
    ]
  },
 plugins: [
webpack.HotModuleReplacementPlugin(), //熱更新
    new HtmlWebpackPlugin({
      template: './index.html', //要打包的html
      filename: 'app.html',  //html打包后的名字
      inject: 'body',   //script 標(biāo)簽生成地址
      collapseWhitespace: true,  //壓縮移除空格
      removeComments: true,  //壓縮移除注釋
    }),
    new MinCssExtractPlugin({   //把css文件打包到一個(gè)新css 用link引入到html中 可修改地址/文件名
      filename: 'styles/[contenthash].css'
    })
  ],
 optimization: {
    minimizer: [
      new CssMinimizerWebpackPlugin()  //還需將mode改為production  會(huì)壓縮css代碼
    ],
    splitChunks: {
      // chunks: 'all',// 公共文件 lodash不會(huì)重復(fù)打包
      cacheGroups: {
        vendor: {
          test: /[\\/]node_modules[\\/]/,
          name: 'vendors',
          chuns: 'all'
        }
      }
    }
  }
};

到此這篇關(guān)于webpack前端應(yīng)用之基礎(chǔ)打包實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)webpack 基礎(chǔ)打包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • js下拉框二級(jí)關(guān)聯(lián)菜單效果代碼具體實(shí)現(xiàn)

    js下拉框二級(jí)關(guān)聯(lián)菜單效果代碼具體實(shí)現(xiàn)

    這篇文章介紹了js下拉框二級(jí)關(guān)聯(lián)菜單效果代碼具體實(shí)現(xiàn),有需要的朋友可以參考一下
    2013-08-08
  • 在JS循環(huán)中使用async/await的方法

    在JS循環(huán)中使用async/await的方法

    async / await是ES7的重要特性之一,也是目前社區(qū)里公認(rèn)的優(yōu)秀異步解決方案。這篇文章主要介紹了在JS循環(huán)中使用async/await的方法,需要的朋友可以參考下
    2018-10-10
  • js跳轉(zhuǎn)頁(yè)面方法實(shí)現(xiàn)匯總

    js跳轉(zhuǎn)頁(yè)面方法實(shí)現(xiàn)匯總

    js跳轉(zhuǎn)頁(yè)面的方法有很多,本文搜集整理了一些,個(gè)人感覺(jué)還不錯(cuò),希望對(duì)大家有所幫助
    2014-02-02
  • js Array.slice的8種不同用法示例

    js Array.slice的8種不同用法示例

    這篇文章主要給大家介紹了關(guān)于js Array.slice的8種不同用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用js 具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • js知識(shí)點(diǎn)總結(jié)之getComputedStyle的用法

    js知識(shí)點(diǎn)總結(jié)之getComputedStyle的用法

    getComputedStyle是一個(gè)可以獲取當(dāng)前元素所有最終使用的CSS屬性值,下面這篇文章主要給大家介紹了關(guān)于js知識(shí)點(diǎn)總結(jié)之getComputedStyle用法的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • javascript cookie解碼函數(shù)(兼容ff)

    javascript cookie解碼函數(shù)(兼容ff)

    javascript cookie解碼函數(shù)
    2008-03-03
  • javascript特殊日歷控件分享

    javascript特殊日歷控件分享

    這篇文章主要為大家詳細(xì)介紹了javascript特殊日歷控件的使用方法,展示了javascript日歷控件實(shí)現(xiàn)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-03-03
  • javascript實(shí)現(xiàn)畫(huà)板功能

    javascript實(shí)現(xiàn)畫(huà)板功能

    這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)畫(huà)板功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • JavaScript之WebSocket技術(shù)詳解

    JavaScript之WebSocket技術(shù)詳解

    這篇文章主要為大家詳細(xì)介紹了JavaScript之WebSocket技術(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 淺談函數(shù)調(diào)用的不同方式,以及this的指向

    淺談函數(shù)調(diào)用的不同方式,以及this的指向

    下面小編就為大家?guī)?lái)一篇淺談函數(shù)調(diào)用的不同方式,以及this的指向。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09

最新評(píng)論