IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 重构Webpack系列之二 ---- 入口起点 -> 正文阅读

[JavaScript知识库]重构Webpack系列之二 ---- 入口起点

重构Webpack系列之二 ---- 入口起点

webpack入口起点

一、概念

入口起点(entry point)指示Webpack应该使用哪个模块,来作为构建其内部依赖图的开始。

进入入口起点后,Webpack会找出哪些模块和库是跟入口起点(直接或间接)有依赖的关系。

默认值是./src/index.js,但可以通过在webpack configuration中配置entry属性,来指定一个(或多个)不同的入口起点。例如:

本文以下代码均在webpack.config.js之中实现

module.exports = {
  entry: './path/to/my/file.js'
}

二、单个入口

1.默认字符串写法

module.exports = {
  entry: './path/to/my/entry/file.js'
}

当你希望通过一个入口(例如一个库)为应用程序或工具快速设置webpack配置时,单一入口的语法方式就以及可以满足了。

除此之外,webpack的entry属性还提供了对象语法,可以为webpack配置多个入口起点,使用这种语法方式来扩展或调整配置则更具备有灵活性。

用法:entry: {<entryChunkName> String | [string]} | {}

2.对象写法(单个入口)

module.exports = {
  entry: {
	main: './path/to/my/entry/file.js'
  }
}

3.对象写法(多个入口)

module.exports = {
  entry: {
	app: './src/app.js',
	adminApp: './src/adminApp.js'
  }
}

4.数组写法

这将创建一个所谓的“multi-main-entry”。在你想要一次注入多个以上文件,并且将他们的依赖关系绘制在一个“chunk”中时,这种方法很有用。

module.exports = {
  entry: ['./src/file_1.js','./src/file_2.js'],
  output: {
	filename: 'bundle.js'
  }
}

三、entry的配置选项

  1. dependOn
    当前入口所依赖的入口。他们必须在该入口被加载前加载。
  2. filename
    指定要输出的文件名称。
  3. import
    启动时需要加载的模块。
  4. library
    指定library选项,为当前entry构建一个library。(日常开发基本上用不到)
  5. runtime
    运行时chunk的名字。如果设置了,就会创建一个新的运行时的chunk。在webpack@5之后可将其设置为false,以用来避免运行时生成新的chunk。
  6. publicPath
    当该入口的输出文件在浏览器中被引用时,为他们指定一个公共的URL地址。

基本用法

module.exports = {
  entry: {
	a2: 'dependingfile.js',
	b2: {
	  publicPath: '/',
	  dependOn: 'a2',
	  import: './src/app.js'
	}
  }
}

需要注意的是,请确保runtime不能指向已存在的入口名称

module.exports = {
  entry: {
    a1: './a',
    b1: {
	  runtime: 'a1' //这里,不行
	  import: './b'
	}
  }
}

另外需要注意runtime和dependOn不可以同时存在于同一个入口上,dependOn也不能够循环引用的


// 不能同时存在,会报错

module.exports = {
  entry: {
	a2: './a',
	b2: {
	  runtime: 'x2',
	  dependOn: 'a2', // 这里不能同时存在,否则会报错
	  import: './b'
	}
  }
}

// dependOn不可以循环引用

module.exports = {
  entry: {
    a3: {
      import: './a',
      dependOn: 'b3'
    },
    b3: {
      import: './b',
      dependOn: 'a3'
    }
  }
}

四、多入口应用实例

在webpack<4的版本中,开发者想要分离app(应用程序)和vendor(第三方库)的入口,通常将vendor作为一个单独的入口添加到entry选项中,以将其编译为一个单独的文件(与CommonChunkPlugin结合使用)。例如:

但在webpack>4版本中不鼓励这样做,而是使用optimization.splitChunks选项,将vendor和app(应用程序)模块分开,并为其创建一个单独的文件。不要为vendor或其他library执行起点创建entry。


// webpack.config.js

module.exports = {
  entry: {
	main: './src/app.js',
	vendor: './src/vendor.js'
  }
}

// webpack.prod.js

module.exports = {
  output: {
	filename: '[name].[contenthash].bundle.js'
  }
}

// webpack.dev.js

module.exports = {
  output: {
	filename: '[name].bundle.js'
  }
}

通过上面的配置,我们可以在vendor.js中存入未做修改的必要library或文件(例如Bootstrap,jQuery,图片等),然后将他们打包在一起称之为单独的chunk。内容哈希保持不变,这使得浏览器可以单独的缓存他们,从而减少了打开网页的加载时间。

五、多页面应用程序

上面的内容都好理解,多页面应用程序内容较多需要重开一文来进行说明,请期待下一文。

至此,webpack的入口起点知识点到这里就结束了,各位看官不妨点点赞,支持本菜鸟的创作把!

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-23 15:40:27  更:2021-12-23 15:41:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:38:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码