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)
})

 

posted @ 2021-10-27 14:48  keyeking  阅读(987)  评论(0编辑  收藏  举报