webpack配置之---入口

entry

单入口

由于一般的单页面项目只有一个入口,也就是单入口,单入口的配置方式有以下三种方式,如果有遗漏的欢迎补充

1、字符串方式

以下这几行代码解释:

entry:本项目的入口文件

output:本项目打包后的输出文件

javascript 复制代码
module.exports = {
  entry: './src/index.js',  // 入口文件
  output: {
    filename: 'bundle.js',  // 打包后的文件名
    path: path.resolve(__dirname, 'dist'),
  },
};

2、数组方式

以下这几行代码解释:

entry:本项目的入口是单入口即app,但是该入口app依赖俩文件

javascript 复制代码
module.exports = {
  entry: {
    app: ['./src/app.js', './src/appHelper.js'],  // 入口为多个文件
  },
  output: {
    filename: '[name].bundle.js',
    path: path.resolve(__dirname, 'dist'),
  },
};

3、对象方式

javascript 复制代码
entry: {
  app: {
    import: ['./src/app.js', './src/appHelper.js'],  // 使用 import 数组指定多个文件
    dependOn: 'vendor',  // 可以指定依赖其他入口(如果有的话)
  },
  vendor: ['./src/vendor.js'],  // 假设这里有一个单独的 vendor 入口
},

多入口

当多个入口时,每个入口的配置方式有以下三种,如果有遗漏的欢迎补充

1、字符串

其中键表示入口的名称,值表示对应的入口文件路径。每个入口都会生成一个对应的打包文件。

在这个配置中,entry 是一个对象,appvendor 是两个不同的入口文件。Webpack 会分别为这两个入口生成 app.bundle.jsvendor.bundle.js

javascript 复制代码
module.exports = {
  entry: {
    app: './src/app.js',         // 第一个入口
    vendor: './src/vendor.js',   // 第二个入口
  },
  output: {
    filename: '[name].bundle.js',  // 使用 [name] 占位符来动态生成文件名
    path: path.resolve(__dirname, 'dist'),
  },
};

2、数组

每个入口可以配置为一个包含多个文件路径的数组。Webpack 会将所有文件打包在一起,按顺序构建依赖图。

javascript 复制代码
module.exports = {
  entry: {
    app: ['./src/app.js', './src/appHelper.js'],  // 入口为多个文件
    vendor: ['./src/vendor.js', './src/vendorHelper.js'],
  },
  output: {
    filename: '[name].bundle.js',
    path: path.resolve(__dirname, 'dist'),
  },
};

这种方式下,app 入口由两个文件 app.jsappHelper.js 组成,Webpack 会处理这些文件的依赖关系并打包成 app.bundle.js

3、对象(带有优化功能)

当项目中有多个入口,并且某些代码是共享的,你可以使用 dependOn 来指定共享的模块。这有助于进行代码拆分,优化打包结果。

javascript 复制代码
module.exports = {
  entry: {
    app: {
      import: './src/app.js',
      dependOn: 'common',  // 共享的模块
    },
    vendor: {
      import: './src/vendor.js',
      dependOn: 'common',  // 共享的模块
    },
    common: './src/common.js',  // 公共模块
  },
  output: {
    filename: '[name].[contenthash].bundle.js',
    path: path.resolve(__dirname, 'dist'),
  },
  optimization: {
    splitChunks: {
      chunks: 'all',  // 启用代码拆分
    },
  },
};

在这个例子中,appvendor 都依赖于 common 模块。Webpack 会将 common 模块提取出来作为一个独立的 chunk,从而避免冗余的代码。

总结:

  • 单入口配置:适用于只有一个入口文件的简单项目。配置方式为一个字符串路径。
  • 多入口配置 :适用于需要多个入口文件的项目,可以使用对象或数组方式配置。
    • 对象方式:每个入口配置为对象的属性,键为入口名称,值为文件路径。
    • 数组方式:每个入口配置为数组,多个文件按顺序打包。
  • 动态入口:可以根据环境变量或其他条件动态选择入口文件。
  • 多个页面入口:多个页面的多入口配置,使得每个页面生成独立的 JavaScript 文件。
  • 代码拆分 :通过 importdependOn 配置共享模块,进行代码拆分,优化打包结果。
相关推荐
子兮曰1 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰1 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万1 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝1 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋1 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁1 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王95271 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大1 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师1 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学1 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端