webpack-output的詳細配置


output的詳細配置

目錄結構:

 

 1> filename的配置

filename指的是出口文件的名稱

  // 出口文件
  output: {
    // 出口文件名稱
    filename: "build.js",
    // 智能合並路徑,絕對路徑
    path: resolve(__dirname,'build')
  },

如果是字符串命名,針對的是單一chunk模塊,如果有多個chunk模塊,此時就不能用字符串命名

如果返回的是帶有/的字符串,表示的是出口文件是有文件夾層級的

比如:

output: {
  // 出口文件的名稱
  filename: "a/b/c/build.js",
  path: resolve(__dirname,'build')
},

表示出口的文件是a文件夾內部的b文件夾內部的c文件夾內部的build.js文件中

如果入口entry是多chunk模塊

此時我們可以使用動態鍵表示文件的名稱

例如:

  // 入口文件
  entry: {
    fileA: './src/a.js',
    fileB: './src/b.js',
    fileC: './src/c.js'
  },

  // 出口文件
  output: {
    // 出口文件名稱
    filename: "[name].js",
    // 智能合並路徑,絕對路徑
    path: resolve(__dirname,'build')
  },

[]表示動態鍵,內部的參數是動態的

如果[]的內部是name,表示產生的chunk模塊的名稱就是多入口設置的名稱

 

 如果[]的內部是id,表示產生的chunk模塊的id就是多入口設置的名稱

 

 如果[]的內部是contenthash,表示產生的chunk模塊的hash文件名就是多入口設置的名稱

 

 filename的參數也可以是函數

  // 出口文件
  output: {
    // 出口文件名稱
    filename: (pathData) => {
      return pathData.chunk.name === 'main' ? '[name].js' : '[name]/[name].js';
    },
  
    // 智能合並路徑,絕對路徑
    path: resolve(__dirname,'build')
  },

 

 

2>  path的配置

path配置的是絕對路徑,一般使用path模塊進行輔助配合

  // 出口文件
  output: {
    // 出口文件名稱
    filename: "[name].js",
    // 智能合並路徑,絕對路徑
    path: resolve(__dirname,'build')
  },

__dirname表示計算機的絕對地址

 

3>  publicPath的配置

publicPath表示設置的是相對的路徑地址,一般用於生產環境會

  // 出口文件
  output: {
    // 出口文件名稱
    filename: "[name].js",
    // 智能合並路徑,絕對路徑
    path: resolve(__dirname,'build'),
    publicPath: "/dist/"
  },

加了publicPath為/dist/之后,此時所有的靜態資源的引入都會加載/dist/前綴

 

 

4> chunkFilename的配置

import異步請求文件的方法

import("./a.js").then(({ defult: a }) => {
  console.log(a)
})

import()函數會返回一個promise對象,通過then來獲取值,此時表示異步請求數據,這樣的好處就是可以按需加載

異步和同步的區別就是同步一打開文件就必須加載,異步是按需要進行加載

比如異步的小例子:隨機數如果為偶數則表示請求文件

var num = parseInt(Math.random() * 10)
if (num % 2==0) {
  import("./a.js").then(({ defult: a }) => {
    console.log(a)
  })
}
console.log(a)

 chunkFilename表示非入口文件的引用異步加載生成chunk的重命名

 // 出口文件
  output: {
    // 出口文件名稱
    filename: "[name].js",
    // 智能合並路徑,絕對路徑
    path: resolve(__dirname,'build'),
    chunkFilename:"[name]_chunk.js"
  },

index.js

import("./a.js").then(({ defult: a }) => {
  console.log(a)
})

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM