传奇新开网站,建站用帝国还是wordpress,营销策划方案的主要内容有哪些,品牌网站设计地址1. webpack基本概念
webpack#xff1a; JavaScript 应用程序的静态模块打包器#xff0c;是目前最为流行的JavaScript打包工具之一。webpack会以一个或多个js文件为入口#xff0c;递归检查每个js模块的依赖#xff0c;从而构建一个依赖关系图#xff0c;然后依据该关系…1. webpack基本概念
webpack JavaScript 应用程序的静态模块打包器是目前最为流行的JavaScript打包工具之一。webpack会以一个或多个js文件为入口递归检查每个js模块的依赖从而构建一个依赖关系图然后依据该关系图将整个应用程序打包成一个或多个bundle。webpack是用nodejs编写所以它依赖的运行环境就是nodejs。也正因为这一点webpack只能识别JavaScript所有非JavaScript包括HTMLCSSTypescript等编写的文件都需要经过处理这是借助对应的loader实现的。webpack使用的是nodejs默认的模块系统commonjs借助nodejs提供的API来操作待打包项目的源文件如fs模块、path模块等。webpack将这些文件整合压缩后输出到一个特定的目录下通常是dist。处理过的dist一般会被直接上传到静态资源服务器使用。
2. 使用webpack原因
未打包的项目通常体积庞大文件数量众多。如果将其直接上传到服务器用户访问网站时浏览器会发送大量的http请求来下载这些文件这会给服务器带来很大的压力同时客户端的体验也非常不好。浏览器本身不支持任何模块系统。因此使用模块系统开发出的JavaScript代码无法直接在浏览器中运行而模块系统对现代JavaScript开发是非常重要的。这样我们需要有一个工具将模块系统编写出的代码转化为浏览器所能识别的代码。webpack就可以完成这一任务。大多数情况下我们不希望源代码暴露给用户即使是保密性要求不那么高的前端代码。我们知道PC端浏览器通常都提供开发者工具可以方便地查看和调试前端代码这在开发环境下意义重大。但对于生产环境暴露源代码不仅没有太大意义反而存在安全隐患如果黑客比你更先发现代码中的bug你可能面临严重损失。因此我们可以借助webpack重组和混淆源代码增加黑客阅读源代码的难度以提升系统的安全性。借助webpack提供的dev-server可以实现前后端分离。dev-server本质上就是一个node服务。当通过命令行启用dev-server时webpack会在本地启动一个node服务将打包后的文件作为静态资源注入该服务这样就可以在不依赖后台这种说法并不完全准确实际上webpack是通过node为你提供后台服务的情况下进行前端开发了。
配置对象中包含四个核心参数
入口entry出口output加载器loader插件plugin
入口 webpack的打包入口也就是webpack从哪个js开始打包。一个应用程序可以有一个或多个入口由entry属性指定通常是一个对象。
module.exports {entry: {main: ./src/main.js}
}
// 可以简写为:entry: ./src/main.js应用程序可以有多个打包入口多页面应用配置
entry: {app: ./src/app.js,main: ./src/main.js
}
//允许这么写entry: [./src/main1.js, ./src/main2.js]//要求webpack分别以app.js和main.js为打包入口独立构建依赖关系图。
//最终项目代码和第三方代码将被独立打包出来。
//构建多页应用时也是分别为每个页面提供一个入口文件独立构建依赖图。出口output 单页面应用打包输出
module.exports {entry: {main: ./src/main.js},output: {filename: bundle.js, //文件名path: path.resolve(__dirname /dist) //打包输出的文件路径}
}多页面应用打包产生的输出结果也会有很多个
{entry: {app: ./src/app.js,main: ./src/main.js},output: {filename: [name].js, //使用占位符[]定义文件名path: path.resolve(__dirname /dist)//filename: [name].[hash].js, //使用热更新HMR的配置,有助于热更新检测到输出文件变化//使用splitChunk进行代码分割时被分割出来的代码默认命名为chunk.[hash].js}
}
// 打包路径将输出app.js和main.js两个文件加载器loader webpack的运行环境是nodejs因此它只能识别JavaScript。但是我们的项目中可能存在大量的非JavaScript文件如HTML、CSS、Typescript、txt图片文件等,他们可能就被js文件依赖这时候就很难打包上他们。 解决这个问题我们需要一些额外的代码帮助webpack识别js文件中的嵌套依赖。一个加载器loader实际上就是一个将特定的字符串转化成JavaScript代码的函数。
//配置css-loader和style-loader
module.exports {module: {rules: [{ test: /\.css$/, use: [style-loader, css-loader] //webpack将依次从后向前执行每个loader//因为webpack采用的是流式处理所以loader的书写顺序非常重要最先需要执行的loader必须放在数组的最后。// 执行步骤//1. 使用nodejs的fs模块读取index.css将读取到的字符串交给css-loader。//2.执行css-loader。它是一个函数将原始字符串进行一定的处理输出一个新的字符串。//3.将上一步输出的字符串交给style-loader进行第二步处理最终仍然输出一个字符串。//4.由webpack解析最终的处理结果。 },]}
};插件plugin
//在webpack配置文件中使用插件
const ConsoleLogOnBuildWebpackPlugin require(ConsoleLogOnBuildWebpackPlugin)
module.exports {...plugins: [new ConsoleLogOnBuildWebpackPlugin()]
}3. 热更新原理 nodejs使用一个清单文件来记录当前所有的资源文件这个清单文件也正是热更新模块的监测对象。 热更新模块监测到文件名变化后会通过websocket将这个新的文件发送到浏览器浏览器重新执行该文件完成局部更新。由于只通过websocket发送了单个模块所以页面既不会重载也不会大面积刷新。