热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

webpack打包后引用cdn的js_Webpack的简单讲解

自前端模块化以来,webpack和babel逐渐成为前端开发者的标配。Babel主要将es6或者ES7的语法进行转移。webpack则起到前端模块化打包的功能。本质上

自前端模块化以来,webpack和babel逐渐成为前端开发者的标配。Babel主要将es6或者ES7的语法进行转移。webpack则起到前端模块化打包的功能。

本质上来讲,webpack是现代Javascript应用程序的静态模块打包器(module bundler)。当webpack处理应用程序的时候,它会递归的构建一个依赖关系,其中就包含了应用程序需要的每个模块,然后将所有这些模块打包成一个bundle或者多个bundle(按需加载)。

13038c59628580e573220ed916c4308c.png

例如,我们举个栗子:

fdead16b86c303e54c2727799daf5953.png

如上图所示,entry是入口文件,引用了utils1.js和utils2.js。而utils1.js又调用了utils2.js

打包的代码块如下所示:

/******/ ([
/* 0 */ //模块id
/***/ function(module, exports, __webpack_require__) {__webpack_require__(1); //require资源文件id__webpack_require__(2);/***/ },
/* 1 */
/***/ function(module, exports, __webpack_require__) {//util1.js文件__webpack_require__(2);var util1=1;exports.util1=util1;/***/ },
/* 2 */
/***/ function(module, exports) {//util2.js文件var util2=1;exports.util2=util2;/***/ }
...
...
/******/ ]);

bundle.js是以模块id为记号,通过函数把各个文件依赖封装达到分割的效果,以上代码id为0表示entry需要的依赖,1表示utils1需要的依赖。

require资源文件id表示该文件需要加载的各个模块,如_webpack_require__(1)表示 需要加载util1.js 模块。

简单的说,webpack打包后会形成一个立即执行的函数,而各个模块则会成为这个立即执行函数的参数。主函数通过模块的唯一id来对这行参数进行调用。

接下来,我们尝试再本地构建一份webpack。

1,上文已经说过,webpack其实是基于node的打包应用。那么,我们就可以通过npm init构建一个node应用,生成package.json文件。

2,npm install webpack,下载webpack依赖到node_modules中。

3,手动生成webpack.config.js文件。这个文件主要配置webpack的入口,出口文件,以及loader转化,babel转化用的。

module.exports={entry:'./index.js',output:{filename:'./test.js'}
}

如此简单的一个配置就 可以对index.js进行打包了,打包后的文件输出到test.js中。

由于webpack4以后将webpack-cli拆分了出来,所以,直接输入webpack命令并不会执行,全局安装webpack-cli或者再运行node_modules中的webpack可以启动打包程序。

4,再webpack中还可以配置许多loader(css-loader),plugin,babel等操作。比如webpack.config.js中有个resolve配置项,这个是配置webpack模块规则用的。

resolve: {extensions: ['.js', '.vue', '.json'],alias: {'@': resolve('src'),}},

alias配置项是别名的意思。用@指向src文件夹以后,我们引入模块就可以‘@XXX’来代替复杂的‘../’文件引用了。



推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • Node.js学习笔记(一)package.json及cnpm
    本文介绍了Node.js中包的概念,以及如何使用包来统一管理具有相互依赖关系的模块。同时还介绍了NPM(Node Package Manager)的基本介绍和使用方法,以及如何通过NPM下载第三方模块。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • document .ready中的函数怎么被按钮调用? ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • React项目中运用React技巧解决实际问题的总结
    本文总结了在React项目中如何运用React技巧解决一些实际问题,包括取消请求和页面卸载的关联,利用useEffect和AbortController等技术实现请求的取消。文章中的代码是简化后的例子,但思想是相通的。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 1.脚本功能1)自动替换jar包中的配置文件。2)自动备份老版本的Jar包3)自动判断是初次启动还是更新服务2.脚本准备进入ho ... [详细]
author-avatar
yuguiping123
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有