Webpack基础教程之名词解释
作者:pingan8787 发布时间:2022-12-17 19:04:30
一、概念介绍
本质上,webpack 是一个现代JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。
它是高度可配置的,但是,在开始前你需要先理解四个核心概念:
入口(entry)
输出(output)
loader
插件(plugins)
1、 入口(entry)
指定webpack从哪个模块开始构建项目,通过一下配置指定一个入口起点(或多个入口起点),被处理到称之为 bundles 的文件中:
// webpack.config.js
module.exports = {
entry: './path/to/my/entry/file.js'
}
2、出口(output)
处理打包生成的 bundles 文件,如指定输出文件位置,文件名等。
// webpack.config.js
module.exports = {
entry: './path/to/my/entry/file.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'test_name.bunlde.js'
}
}
3、loader
loader 作用是将所有文件类型转换成webpack能处理的有效模块,然后就可以通过webpack将文件打包。
本质上,webpack loader将所有类型文件转换成应用程序的依赖图可以直接引用的模块。
特殊: 只有webpack支持 import 导入任何类型模块,如 .css,.vue 等文件。
webpack 配置 loader的两个目标:
1.识别需要对应 loader 处理的文件。(使用test属性)
2.转换文件使其能够添加到依赖图并最终添加到 bunlde 中。(使用use属性)
// webpack.config.js
const path = require('path');
const config = {
entry: './path/to/my/entry/file.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'my-first-webpack.bundle.js'
},
module: {
rules: [
{ test: /\.txt$/, use: 'raw-loader' }
// test/use 两个属性是必须的
]
}
}
module.exports = config;
4、插件(plugins)
使用插件可以执行范围更广的任务。通过 require() 引用后添加在 plugins 数组中。
另外如果需要多次使用同一个插件,则使用 new 操作符来创建它的一个实例。
安装html-webpack-plugin:
npm install html-webpack-plugin --save-dev
// webpack.config.js
const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack'); // 用于访问内置插件
const path = require('path');
const config = {
entry: './path/to/my/entry/file.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'my-first-webpack.bundle.js'
},
module: {
rules: [
{ test: /\.txt$/, use: 'raw-loader' }
]
},
plugins: [
new webpack.optimize.UglifyJsPlugin(),
new HtmlWebpackPlugin({template: './src/index.html'})
]
};
module.exports = config;
二、入口起点(Entry Points)
webpack的 entry 属性不仅可以配置单个入口,还可以配置多个入口:
1、单个入口(简写)配置
用法:entry: string|Array<string>
简单使用 :
const config = {
entry: './path/to/my/entry/file.js'
};
module.exports = config;
entry 属性的单个入口配置方式:
const config = {
entry:{
main:'./path/to/my/entry/file.js'
}
}
若向 entry 传入 [文件路径(file path)数组],将创建 多个主入口,常常用在需要同时注入多个文件,并将它们的依赖导向(graph)到一个chunk时。
2、多个入口(简写)配置
对象语法
用法:entry: {[entryChunkName: string]: string|Array<string>}
// webpack.config.js
webpack.config.js
const config = {
entry: {
app: './src/app.js',
vendors: './src/vendors.js'
}
};
虽然语法繁琐,但这是应用程序中定义入口的最可扩展的方式。
“可扩展的 webpack 配置”是指,可重用并且可以与其他配置组合使用。这是一种流行的技术,用于将关注点(concern)从环境(environment)、构建目标(build target)、运行时(runtime)中分离。然后使用专门的工具(如 webpack-merge)将它们合并。
常见场景
列出一些常见的入口配置和实际案例:
(1)分离 应用程序(app) 和 第三方库(vendor) 入口
// webpack.config.js
const config = {
entry: {
app: './src/app.js',
vendors: './src/vendors.js'
}
};
webpack 从 app.js 和 vendors.js 开始构建,并且他们是完全分离互相独立,为了支持提供更佳 vendor 分离能力的 DllPlugin,考虑移除该场景。
(2)多页面应用程序
// webpack.config.js
const config = {
entry: {
pageOne: './src/pageOne/index.js',
pageTwo: './src/pageTwo/index.js',
pageThree: './src/pageThree/index.js'
}
};
这样告诉 webpack 需要 3 个独立分离的依赖图,
使用 CommonsChunkPlugin 为每个页面间的应用程序共享代码创建 bundle。
由于入口起点增多,多页应用能够复用入口起点之间的大量代码/模块,从而可以极大地从这些技术中受益。
来源:http://pingan8787.com/2018/01/31/41-%E3%80%90Webpack%E3%80%91%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%E6%95%B4%E7%90%86%EF%BC%88%E6%95%B4%E7%90%86%E4%B8%AD%EF%BC%89/
猜你喜欢
- 一、概念我们可以将工作池理解为线程池。线程池的创建和销毁非常消耗资源,所以专门写一个pool,每次用过的线程池再放回pool中而不是销毁。不
- 一、python多线程因为CPython的实现使用了Global Interpereter Lock(GIL),使得python中同一时刻只
- 需要引用vue-resource安装请参考https://github.com/pagekit/vue-resource官方文档在入口函数中
- SSI是英文Server Side Includes的缩写,翻译成中文就是服务器端包含的意思。从技术角度上说,SSI就是在HTML文件中,可
- 为index.php文件设置只读属性后,木马就没权限给你文件末尾追加广告了。下面我们看具体的代码,设置index.php只读:<?ph
- 本文实例讲述了jQuery绑定事件监听bind和移除事件监听unbind用法。分享给大家供大家参考,具体如下:这里分别采用后bind(eve
- 代码:function checkall(checkNames){ var allBoxs = document.getElem
- import numpy as npimport pandas as pdimport matplotlib.pylab as pltif
- 如今大部分网站仍然采用表格嵌套内容的方式来制作网站,虽然此方法对于我们来说比较熟悉、比较上手;但是,它却阻碍了一种更好的、更有亲和力的、更灵
- 传递函数创建传递函数有两种方式:import control as ctrl# 方式 1s = ctrl.tf('s')sy
- 一、实验内容 对于下面这幅图像,编程实现染色体计数,并附简要处理流程说明。二、实验步骤1.中值滤波2.图像二值化3.膨胀图像4.腐
- 注:代码用 jupyter notebook跑的,分割线线上为代码,分割线下为运行结果1.导入库生成缺失值通过pandas生成一个6行4列的
- 实现效果实现代码import matplotlib.pyplot as pltfrom skimage import iofile_name
- 本文实例讲述了python基于windows平台锁定键盘输入的方法。分享给大家供大家参考。具体分析如下:pywin32中没有BlockInp
- 游戏规则用pygame动画实现神庙逃亡类似的小游戏,当玩家移动的时候躲避 * ,如果 * 命中玩家或者名字龙都会减速,玩家躲避 * 使更多的 * 打
- element-ui中el-form自定义验证需求在输入项目名称后,调用后端接口isNameOnly,若已存在,则效果如下图:1.先设置校验
- 1.语法规则1-1 代码实例sorted(iterable, key=None,reverse=False)1-2 参数说明(1)itera
- 前段时间练习过的一个小项目,今天再看看,记录一下~项目结构说明:datefile文件夹:保存车辆信息表的xlsx文件file文件夹:保存图片
- 前言在启动 Django 项目时,Django 默认监听的端口号为 8000,设置的默认 IP 地址为 127.0.0.1 。如果需要修改默
- 有一次去超市换货,本能的找到服务中心,服务中心说这个业务在超市旁边一个房间里,由于忘记带小票,那个小房间的人让我去另外一个小房间调电脑里的记