是什么:
webpack 是一个用于现代 js 应用程序的 静态模块打包工具。
为什么:
解决:
一是浏览器中运行 js 的方式的效率问题 我们知道有两种方式在浏览器上执行js
1 引用一些脚本来存放每个功能;此解决方案有个问题,如果文件比较多,比如有10个文件则需要发送十次http请求来加载,因为文件之中有函数的相互引用,则如果因为网络原因其中一个文件未加载成功,则页面功能就无法顺利执行。
2 使用一个包含所有项目代码的大型 .js 文件,但是这会导致作用域、文件大小、可读性和可维护性及文件加载时长性能方面的问题。
二是浏览器对新技术的支持不足
现代js应用程序的最大特点可能就是模块化了,这里面涉及很多新技术,比如ES6、TS的使用越来越普及,再比如Vue框架,包含了特定的语法:指令。 但是出现的问题是:这些新兴的技术并不是在所有的浏览器上都适用(浏览器不支持模块化,它不能像node.js那样快速地去本地加载一个个模块文件),都需要将源代码转化为可以直接在浏览器上运行的代码。
怎么做:
配置项:
1 入口起点(entry)
指示 webpack 应该使用哪个模块,来作为构建其内部依赖图的开始。默认值是 ./src/index.js
2 输出(output)
output 属性告诉 webpack 在哪里输出它所创建的 bundle,以及如何命名这些文件。主要输出文件的默认值是 ./dist/main.js,其他生成文件默认放置在 ./dist 文件夹中。
3 loader
webpack 只能理解 JavaScript 和 JSON 文件,这是 webpack 开箱可用的自带能力。loader 让 webpack 能够去处理其他类型的文件,并将它们转换为有效模块,以供应用程序使用,以及被添加到依赖图中。
在更高层面,在 webpack 的配置中,loader 有两个属性:
test属性,识别出哪些文件会被转换。use属性,定义出在进行转换时,应该使用哪个 loader。
const path = require('path');
module.exports = {
output: {
filename: 'my-first-webpack.bundle.js',
},
module: {
rules: [{ test: /.txt$/, use: 'raw-loader' }],
},
};
4 插件(plugin)
loader 用于转换某些类型的模块,而插件则可以用于执行范围更广的任务。包括:打包优化,资源管理,注入环境变量。
5 模式(mode)
通过选择 development, production 或 none 之中的一个,来设置 mode 参数,你可以启用 webpack 内置在相应环境下的优化。其默认值为 production。
module.exports = {
mode: 'production',
};
6 浏览器兼容性(browser compatibility)
Webpack 支持所有符合 ES5 标准 的浏览器(不支持 IE8 及以下版本)。webpack 的 import() 和 require.ensure() 需要 Promise。如果你想要支持旧版本浏览器,在使用这些表达式之前,还需要 提前加载 polyfill。
Webpack 5 运行于 Node.js v10.13.0+ 的版本。
注意点:
webpack打包vue默认配置的是,app.xxx.js和app.xxx.css为项目我们开发的代码,chunk-wendors为引用的代码