目錄
開始
輸出(Output))
应用
HtmlWebpackPlugin
首頁 web前端 js教程 webpack核心概念之輸出(Output)

webpack核心概念之輸出(Output)

Aug 09, 2022 pm 06:32 PM
webpack output

將所有的資源(assets)歸攏在一起後,還需要告訴 webpack 在哪裡打包應用程式。 webpack 的 output 屬性描述如何處理歸攏在一起的程式碼(bundled code)。以下這篇文章就來帶大家深入了解一下webpack核心概念中的輸出(Output),希望對大家有幫助!

 webpack核心概念之輸出(Output)

輸出(Output):設定 output 選項可以控制 webpack 如何寫入編譯檔到硬碟。請注意,即使可以存在多個入口起點,但只指定一個輸出配置

開始


我們先npm init初始化一個項目,本地安裝webpackwebpack -cli,然後在根目錄建立index.htmlwebpack.config.jssrc資料夾,在資料夾內再建立一個main.js作為入口檔案

準備工作完成後如圖所示:

webpack核心概念之輸出(Output)

main. js

function Component(){
    var div=document.createElement('div')
    div.innerHTML="来一起学习出口配置吧~"
    return div
}
document.body.appendChild(Component())
登入後複製

index.html

    <script></script>
登入後複製

packag.json

"scripts": {
  "test": "echo \"Error: no test specified\" && exit 1",
  "build":"webpack" //加上
},
登入後複製

接下來就是設定部分:webpack.config.js

輸出(Output))


設定output 選項可以控制webpack 如何向硬碟寫入編譯檔。

注意,即使可以存在多個入口起點,但只指定一個輸出配置

#下面是輸出配置的幾個概念:

1、path

#path指定資源輸出的位置,要求值必須為絕對路徑,如:

const path=require('path')
module.exports={
    entry:'./src/main.js',
    output:{
        filename:'bundle.js',
        //将资源输出位置设置为该项目的dist目录
        path: path.resolve(__dirname, 'dist')
    },
}
登入後複製

在Webpack 4之後,output.path已經預設為dist目錄。除非我們需要更改它,否則不必單獨配置,所以如果是webpack4以上,你可以寫成:

module.exports={
    entry:'./src/main.js',
    output:{
        filename:'bundle.js',
    },
}
登入後複製
登入後複製

2、filename

##filename的作用是

控制輸出資源的檔名,其形式為字串。這裡我把它命名為bundle.js,意思是我希望資源輸出在一個叫bundle.js的檔案中:

module.exports={
    entry:'./src/main.js',
    output:{
        filename:'bundle.js',
    },
}
登入後複製
登入後複製
打包後如圖,會自動產生一個

dist資料夾,裡面有個bundle.js檔案

webpack核心概念之輸出(Output)

#filename可以不只是bundle的名字,還可以是一個相對路徑

即便路徑中的目錄不存在也沒關係,Webpack會在輸出資源時建立該目錄,例如:

  module.exports = {
    output: {
      filename: './js/bundle.js',
    },
  };
登入後複製
打包後如圖:

webpack核心概念之輸出(Output)

在多入口的場景中,我們需要對產生的每個bundle指定不同的名字,Webpack支援使用一種類似模板語言的形式動態地產生檔名

在此之前,我們再去

src中建立一個新的入口檔##vender.js:

function Component(){
    var div=document.createElement('div')
    div.innerHTML="我是第二个入口文件"
    return div
}
document.body.appendChild(Component())
登入後複製

webpack.config.js:

module.exports = {
    entry:{
        main:'./src/main.js',
        vender:'./src/vender.js'
    },
    output: {
      filename: '[name].js',
    },
 };
登入後複製

打包後如圖:

webpack核心概念之輸出(Output)#filename中的

[name]

會被替換為chunk name即main和vender。因此最後會產生vendor.jsmain.js此時如果你希望看到內容,你還需要在

index.html

#中改下內容,將路徑對應上最後打包出來的bundle<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">     &lt;script&gt;&lt;/script&gt;     <script></script> </pre><div class="contentsignin">登入後複製</div></div>

[問題]這時候就會有個需求了,如何讓
index.html

自動幫我們將產生的bundle加入html呢?這裡可以用到外掛HtmlWebpackPlugin,詳細看下方

#3、其他除了

[name]

可以指chunk name以外,還有其他幾種模板變數可以用於filename的配置中:

[hash]:指涉Webpack此次打包所有資源產生的hash
  • [chunkhash]:指涉目前chunk內容的hash
  • [id]:指涉目前chunk的id
  • [query]:指涉filename設定項中的query
  • 它們可以:
控制客戶端快取

[hash]

[chunkhash]都與chunk內容直接相關,如果在filename中使用,當chunk的內容改變時,可以同時引起資源檔案名稱的更改,從而使用戶在下一次請求資源檔案時會立即下載新的版本而不會使用本地快取。

[query]

也可以起到類似的效果,但它與chunk內容無關,要由開發者手動指定。

4、publicPath#

publicPath是一个非常重要的配置项,用来指定资源的请求位置

以加载图片为例

import Img from './img.jpg';
function component() {
    //...
    var img = new Image();
    myyebo.src = Img //请求url
	//...
}
登入後複製
        {
          //...
          query: {
            name: '[name].[ext]',
            outputPath: 'static/img/',
            publicPath: './dist/static/img/'
          }
        }
登入後複製

由上面的例子所示,原本图片请求的地址是./img.jpg,而在配置上加上publicPath后,实际路径就变成了了./dist/static/img/img.jpg,这样就能从打包后的资源中获取图片了

publicPath有3种形式:

  • HTML相关

    我们可以将publicPath指定为HTML的相对路径,在请求这些资源时会以当前页面HTML所在路径加上相对路径,构成实际请求的URL

    //假设当前html地址为:https://www.example.com/app/index.html
    //异步加载的资源名为 1.chunk.js
    pubilicPath:"" 		//-->https://www.example.com/app/1.chunk.js
    pubilicPath:"./js" 	//-->https://www.example.com/app/js/1.chunk.js
    pubilicPath:"../assets/"  	//-->https://www.example.com/assets/1.chunk.js
    登入後複製
  • Host相关

    若publicPath的值以“/”开始,则代表此时publicPath是以当前页面的host name为基础路径的

    //假设当前html地址为:https://www.example.com/app/index.html
    //异步加载的资源名为 1.chunk.js
    pubilicPath:"/" 	//-->https://www.example.com/1.chunk.js
    pubilicPath:"/js/" 	//-->https://www.example.com/js/1.chunk.js
    登入後複製
  • CDN相关

    上面两个都是相对路径,我们也可以使用绝对路径的形式配置publicPath

    这种情况一般发生于静态资源放在CDN上面时,由于其域名与当前页面域名不一致,需要以绝对路径的形式进行指定

    当publicPath以协议头或相对协议的形式开始时,代表当前路径是CDN相关

    //假设当前html地址为:https://www.example.com/app/index.html
    //异步加载的资源名为 1.chunk.js
    pubilicPath:"http://cdn.com/" 	//-->http://cdn.com/1.chunk.js
    pubilicPath:"https://cdn.com/"	//-->https://cdn.com/1.chunk.js
    pubilicPath:"//cdn.com/assets"	//-->//cdn.com/assets/1.chunk.js
    登入後複製

应用


1、单个入口

在 webpack 中配置 output 属性的最低要求是将它的值设置为一个对象,包括以下两点:

  • filename 用于输出文件的文件名。
  • 目标输出目录 path 的绝对路径
module.exports={
    entry:'./src/main.js',
    output:{
        filename:'bundle.js',
    },
}
//webpack4以后dist会默认生成,于是这里省略了path
登入後複製

2、多个入口

如果配置创建了多个单独的 "chunk",则应该使用占位符来确保每个文件具有唯一的名称

这里用到了上面所讲的filename的[name]

另外,如果想将这些资源放进指定的文件夹,可以加上path配置

module.exports={
    entry: {
      main: './src/main.js',
      vender: './src/vender.js'
    },
    output: {
      filename: '[name].js',
      path: __dirname + '/dist/assets' //指定打包后的bundle放在/dist/assets目录下
    }
  }
// 打包后生成:./dist/assets/main.js, ./dist/assets/vender.js
登入後複製

HtmlWebpackPlugin


本章上方遗留的问题可以通过使用插件HtmlWebpackPlugin解决

安装插件

npm install --save-dev html-webpack-plugin
登入後複製

配置插件

const HtmlWebpackPlugin=require('html-webpack-plugin') //加载模块
module.exports = {
    entry:{
        main:'./src/main.js',
        vender:'./src/vender.js'
    },
    //添加插件
    plugins:[
        new HtmlWebpackPlugin({
            title:'output management'
        })
    ],
    output: {
      filename: '[name].js',
    },
 };
登入後複製

打包

打包完成后你会发现dist中出现了一个新的index.html,上面自动帮我们添加所生成的资源,打开后会发现浏览器会展示出内容

webpack核心概念之輸出(Output)

这意味着,以后初始化一个项目就不必写index.html

源码可从这里获取:

https://sanhuamao1.coding.net/public/webpack-test/webpack-test/git/files

更多编程相关知识,请访问:编程视频!!

以上是webpack核心概念之輸出(Output)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

VUE3入門教學:使用Webpack進行打包和構建 VUE3入門教學:使用Webpack進行打包和構建 Jun 15, 2023 pm 06:17 PM

Vue是一款優秀的JavaScript框架,它可以幫助我們快速建立互動性強、高效性好的Web應用程式。 Vue3是Vue的最新版本,它引入了許多新的功能和功能。 Webpack是目前最受歡迎的JavaScript模組打包器和建置工具之一,它可以幫助我們管理專案中的各種資源。本文就為大家介紹如何使用Webpack打包和建構Vue3應用程式。 1.安裝Webpack

vite和webpack的差別是什麼 vite和webpack的差別是什麼 Jan 11, 2023 pm 02:55 PM

差異:1、webpack伺服器啟動速度比vite慢;由於vite啟動的時候不需要打包,也就不需要分析模組依賴、編譯,所以啟動速度非常快。 2.vite熱更新比webpack快;vite在HRM方面,當某個模組內容改變時,就讓瀏覽器去重新請求該模組即可。 3.vite用esbuild預先建置依賴,而webpack基於node。 4.vite的生態不如webpack,載入器、插件不夠豐富。

如何使用PHP和webpack進行模組化開發 如何使用PHP和webpack進行模組化開發 May 11, 2023 pm 03:52 PM

隨著Web開發技術的不斷發展,前後端分離、模組化開發已成為了廣泛的趨勢。 PHP作為一種常用的後端語言,在進行模組化開發時,我們需要使用一些工具來實現模組的管理和打包,其中webpack是一個非常好用的模組化打包工具。本文將介紹如何使用PHP和webpack進行模組化開發。一、什麼是模組化開發模組化開發是指將程式分解成不同的獨立模組,每個模組都有自己的作

webpack怎麼將es6轉成es5的模組 webpack怎麼將es6轉成es5的模組 Oct 18, 2022 pm 03:48 PM

設定方法:1.用導入的方法把ES6程式碼放到打包的js程式碼檔案中;2、利用npm工具安裝babel-loader工具,語法「npm install -D babel-loader @babel/core @babel/preset- env」;3、建立babel工具的設定檔「.babelrc」並設定轉碼規則;4、在webpack.config.js檔案中設定打包規則即可。

使用Spring Boot和Webpack建構前端工程和插件系統 使用Spring Boot和Webpack建構前端工程和插件系統 Jun 22, 2023 am 09:13 AM

隨著現代Web應用程式的複雜性不斷增加,建立優秀的前端工程和插件系統變得越來越重要。隨著SpringBoot和Webpack的流行,它們成為了一個建構前端工程和插件系統的完美組合。 SpringBoot是一個Java框架,它以最小的配置需求來建立Java應用程式。它提供了許多有用的功能,例如自動配置,使開發人員可以更快、更輕鬆地建立和部署Web應用程式。 W

Webpack是什麼?詳解它是如何運作的? Webpack是什麼?詳解它是如何運作的? Oct 13, 2022 pm 07:36 PM

Webpack是一款模組打包工具。它為不同的依賴創建模組,將其整體打包成可管理的輸出檔案。這一點對於單頁面應用程式(現今Web應用的事實標準)來說特別有用。

vue webpack可打包哪些文件 vue webpack可打包哪些文件 Dec 20, 2022 pm 07:44 PM

在vue中,webpack可以將js、css、圖片、json等檔案打包為適當的格式,以供瀏覽器使用;在webpack中js、css、圖片、json等檔案類型都可以被當作模組來使用。 webpack中各種模組資源可打包合併成一個或多個包,並且在打包的過程中,可以對資源進行處理,如壓縮圖片、將scss轉成css、將ES6語法轉成ES5等可以被html識別的文件類型。

前端輸出設定 前端輸出設定 Feb 19, 2024 am 09:30 AM

前端output配置,需要具體程式碼範例前端開發中,output配置是一項非常重要的配置。它用於定義專案打包後產生的檔案路徑、檔案名稱以及相關的資源路徑等。本文將介紹前端output配置的作用、常用設定選項,並給出具體的程式碼範例。 output配置的作用:output設定項用於指定專案打包後產生的檔案路徑和檔案名稱。它決定了專案的最終輸出結果。在webpack等打包

See all articles