首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

三大主流模块打包工具对比

从最初简单文件合并,到AMD 模块具名化并合并,再到browserify将CommonJS 模块转换成为浏览器端可运行代码,打包器做事情越来越复杂,角色也越来越重要。...开发时RequireJS 模块往往是一个个单独文件,RequireJS 从入口文件开始,递归地进行静态分析,找出所有直接或间接被依赖(require)模块,然后进行转换与合并,结果大致如下(未压缩...① 对CommonJS 规范(Node.js 模块所采用规范)模块代码进行转换与包装。...(由模块加载器事先定义),使得工厂方法执行时机可控,也就变相模拟出了同步局 部require,因而AMD 模块可以不经转换地直接在浏览器执行。...原因在于模块打包工具在打包前需要通过静态分析获取整个应用依赖关系,如果传入require 方法moduleId 是个含变量表达式,其值需要在执行期才能确定,那么静态分析就无法确认依赖到底是哪个模块

1.7K80
您找到你想要的搜索结果了吗?
是的
没有找到

图解串一串 webpack 历史和核心功能

比如你有两个模块依赖了一个公共模块: 可以这样来指定分成 3 个 bundle: 运行时就有 3 个 js 文件: 那个时代就是用 gulp 组织编译任务,用 browserify 来做 js...比如 css modules: 源码在 js 模块引入 css: 编译后会给 css 和在 js 里用 className 上加上 hash: 这样自然就做到了 css 局部化,这就是 css...webpack 编译流程是这样: 从入口模块开始解析依赖,分别用对应 loader 来做模块编译,然后生成模块依赖图 ModuleGraph,这个阶段叫做 make。...css-loader:把 css 文件内容变为 js 变量导出 style-loader:把 css 设置到 html style 标签 这些 loader 在转换代码之外做了一些额外事情,其余...js 和 css 紧密关联,出现了 css modules 这种根据 js 模块和 css 关联关系 css 模块化方案。

18120

前端入门22-讲讲模块

虽然我没用过这种工具,但我觉得它局限还是有很多,其实就是将开发人员本来需要手动书写在 HTML 文档里 代码换成写在 JS 文件,不同 JS 文件之间依赖关系仍旧需要按照前后顺序手动维护...getWx 接口 }); //其他不依赖模块代码 最后也最重要一步,在 html 声明 require.js 和 入口 js main.js 加载关系 <script src="js/...此时,可以用 <em>Browserify</em> 编译打包 js,进行再次<em>转换</em>。...WebStrom <em>的</em> <em>Browserify</em> 配置 步骤跟上述很类似,区别仅在于一个下载 babel,这里下载<em>的</em>是 <em>browserify</em>,以及<em>转换</em><em>的</em>命令不同而已: 新建项目 通过 npm 初始化项目 打开终端...-g 执行命令<em>转换</em> <em>browserify</em> js/src/main.js -o js/dist/main.js --debug -o 前是原文件,后面是<em>转换</em>后<em>的</em>目标文件 (可选)如果嫌每次执行<em>的</em>命令太过复杂

39610

前端构建这十年

常用搭配就是 browserify + Grunt,使用Gruntbrowserify插件来构建模块化代码,并对代码进行压缩转换等处理。...· webpack 在说webpack之前,先放一下阮一峰老师吐槽 webpack1支持CommonJs和AMD模块化系统,优化依赖关系,支持分包,支持多种类型 script、image、file、...webpack4也开始支持tree-shaking,但是因为历史原因,有太多基于CommonJS代码,需要额外配置。...-> transform(转换代码) -> generate(生成代码),在这个过程收集到依赖,编译完结果写入缓存 编译依赖文件,重复第 4 步开始 createBundleTree 创建依赖树,替换...◆ 基于浏览器 ES 模块构建工具 browserify、webpack、rollup、parcel这些工具思想都是递归循环依赖,然后组装成依赖树,优化完依赖树后生成代码。

92210

如何从广度与深度衡量打包工具好坏

「代码编译打包」是如今前端工程化绕不开一环,这项功能依赖于「打包工具」。 最常见、受众最广打包工具当属webpack。...其中,在浏览器环境,node一些核心库(events、stream、path...)会被打包成浏览器支持版本。 缺点:缺少ESM标准约束,在tree-shaking上存在天生劣势。...是否支持不同上下文 浏览器除了JS线程,还有worker线程(service worker、web worker)。 当使用了worker,打包工具是否会为不同上下文打包不同文件?...如何处理依赖文件(node_modules)CJS与ESM混用情况?...Non-JavaScript resources 非JS资源打包 典型web应用不仅仅包含JS代码,还包含HTML、CSS、图片、字体等。 如何在打包工具处理好这些资源之间依赖关系

94730

使用Gulp进行JavaScript自动化简易说明书

dependencies字段指定了项目运行所依赖模块。它们都指向一个对象。该对象各个成员,分别由模块名和对应版本要求组成,表示依赖模块及其版本范围。...您将可以在命令行中看到Gulp通知。 代码演练 我们已经为我们任务设置了一个watcher,而且只有3个额外代码行。也就是说这个watcher入门工具包与之前引导例子没有特别大差异。...要深入了解这个JavaScript自动化实现,我建议添加 gulp-notify ,当任务运行时通知你。此外,您可以创建一个单独任务来最小化生成CSS代码,并使“scss”任务作为依赖关系运行。...Browserify Browserify分析应用程序“require”调用并将其转换为捆绑JavaScript文件。另外,还有一个可以转换成浏览器代码npm软件包列表。...Webpack 与Browserify类似,Webpack旨在将具有依赖关系模块转换为静态文件。这一个就如何设置模块依赖关系给 了用户更多自由,而不是追求Node.js代码风格。

3.2K10

使用npm+gulp+browserify网页前端开发

本文目的在于使用npm进行js类库依赖管理,同时精简html繁杂导入。 目前类库加载器(requirejs/seajs等)可以解决script加载问题。...nodejsnpm等工具可以很好处理依赖,但它是为nodejs服务,它模块打包格式是CMD,而requirejs是AMD。seajs官方倒是推荐了spm,据说该项目已经终止维护了。...npm来管理CMD类库依赖browserify来进行CMD到AMD转换,gulp来管理browserify进行自动构建。...构建前是多个js,构建后会把编写代码js和依赖类库打包为一个js文件。这样,html只需要导入一个js文件就可以了。 注:这里没有类加载器事。 准备环境 从一个裸centos开始。...$ sudo cnpm install -g browserify 项目结构调整 构建过程,源码在src,构建后会保存到dist,html实际引入是dist

96130

JavaScript 是如何工作模块构建以及对应打包工具

与前面讨论模块模式相比,这种方法有两个明显好处: 避免全局命名空间污染 依赖关系更加明确 另外需要注意是,CommonJS 采用服务器优先方法并同步加载模块。...但是,如果你坚持使用浏览器无法解析非原生模块系统( CommonJS 或 AMD(甚至是原生 ES6模块格式)),则需要使用专门工具将模块转换为排列正确、浏览器可解析代码。...使用下面的命令,Browserify 以 main.js 为入口把所有依赖模块递归打包成一个文件: browserify main.js -o bundle.js Browserify 通过跳入文件分析每一个依赖...抽象语法树(AST),以便遍历项目的整个依赖关系图。...下面是几个在浏览器 构建/转换 ES6 模块方法,其中第一个是目前最常用方法: 使用转换器(例如 Babel 或 Traceur)以 CommonJS、AMD 或 UMD 格式将 ES6 代码转换

1.4K10

LsLoader——通用移动端Web App离线化方案

从简单全局变量分配,到RequireJS实现AMD模块方式,browserify/webpack实现静态引用方式。...前端构建层和LsLoader加工层互相隔离,业务代码不需要调整模块依赖方式,只需要原来构建流程模式上在外加个转换流程即可。...LsLoader转换过程会分析源码把模块文件依赖关系归纳成数组形式,在浏览器端缓存/加载后按顺序执行。 ?...同时依赖关系传递给LsLoader前端部分,让页面按照依赖关系加载运行webpackJSONP包。 ? 经过处理后,对应文件列表在浏览器端以数组方式运行/缓存,流程如下: ?...每个模块文件通过/combojs/注释来分割,支持各种格式前端包裹格式define、webpackJSONP。

1.7K170

前端程序员常用9大构建工具

在小型项目中,开发者往往手动调用构建过程,这样在大型项目中很不实用,在构建过程难以跟踪什么需要被构建、按照什么顺序构建以及项目中存在哪些依赖。使用自动化工具会使构建过程更为连续。...1:webpack https://webpack.js.org/ webpack是一个打包模块化JS工具,在webpack里一切文件都是模块,通过loader转换文件,通过plugin注入钩子,最后输出由多个模块组合成文件...3:browserify http://browserify.org/ Browserify 可以让你使用类似于 node require() 方式来组织浏览器端 Javascript 代码,...Grunt有大量现成插件封装了常见任务,也能管理任务之间依赖关系。 ?...6:babel https://babeljs.io Babel 是一个工具链,主要用于将 ECMAScript 2015+ 版本代码转换为向后兼容 JavaScript 语法,以便能够运行在当前和旧版本浏览器或其他环境

2.7K31

前端模块化详解(完整版)

这样做除了保证模块独立性,还使得模块之间依赖关系变得明显。 3. 模块好处 避免命名冲突(减少命名空间污染) 更好分离, 按需加载 更高复用性 高可维护性 4....引入多个 后出现出现问题 请求过多 首先我们要依赖多个模块,那样就会发送多个请求,导致请求过多 依赖模糊 我们不知道他们具体依赖关系是什么,也就是说很容易因为不了解他们之间依赖关系导致加载先后顺序出错...小结:通过两者比较,可以得出AMD模块定义方法非常清晰,不会污染全局环境,能够清楚地显示依赖关系。AMD模式可以用于浏览器环境,并且允许非同步加载模块,也可以根据需要动态加载模块。...4.ES6模块化 ES6 模块设计思想是尽量静态化,使得编译时就能确定模块依赖关系,以及输入和输出变量。CommonJS 和 AMD 模块,都只能在运行时确定这些东西。...CMD规范与AMD规范很相似,都用于浏览器编程,依赖就近,延迟执行,可以很容易在Node.js运行。

1.2K20

前端模块化详解(完整版)

这样做除了保证模块独立性,还使得模块之间依赖关系变得明显。 3. 模块好处 避免命名冲突(减少命名空间污染) 更好分离, 按需加载 更高复用性 高可维护性 4....引入多个 后出现出现问题 请求过多 首先我们要依赖多个模块,那样就会发送多个请求,导致请求过多 依赖模糊 我们不知道他们具体依赖关系是什么,也就是说很容易因为不了解他们之间依赖关系导致加载先后顺序出错...小结:通过两者比较,可以得出AMD模块定义方法非常清晰,不会污染全局环境,能够清楚地显示依赖关系。AMD模式可以用于浏览器环境,并且允许非同步加载模块,也可以根据需要动态加载模块。...4.ES6模块化 ES6 模块设计思想是尽量静态化,使得编译时就能确定模块依赖关系,以及输入和输出变量。CommonJS 和 AMD 模块,都只能在运行时确定这些东西。...将es6转换成es5所有插件打包) ③定义.babelrc文件 { "presets": ["es2015"] } ④定义模块代码 //module1.js文件 // 分别暴露 export

2.1K30

Node.js Stream - 实战篇

file: '/path/to/file', // 模块内容 source: '', // 模块依赖 deps: { // `require(expr)` expr: id,...在插件,可以修改b.pipeline任何一个环节。 因此,Browserify本身只保留了必要功能,其它都由插件去实现,watchify、factor-bundle等。...预处理是发生在deps阶段,当模块文件内容被读出来时,会经过这些Transform处理,然后才做依赖解析,babelify、envify。...Browserify定义了模块数据结构,提供了默认管道以处理这样数据流,而插件可用来修改管道结构,以定制处理行为。...当明确具体处理需求时,可以像Browserify那样,构造一个基本处理管道,以提供插件机制。 如果需要是实现任意功能管道,可以Gulp那样,只提供数据流抽象。

1.2K51

JavaScript资源大全中文版(Awesome最新版)

volo -从模板创建前端项目,添加依赖关系,并自动生成项目。...Duo -新一代软件包管理器将Component,Browserify和Go最佳创意融合在一起,使组织和编写前端代码变得更加轻松无痛。 yarn -快速,可靠和安全依赖关系管理。...modulejs -轻量级JavaScript模块系统。 Bundlers browserify -Browserify可以通过捆绑您所有依赖项在浏览器要求('模块')。...humane-js - 一个简单而现代浏览器通知系统。 smoke.js -框架不可知风格JavaScript提醒系统。 notie -简单通知和输入,无依赖关系。...Pikaday - 一个清爽JavaScript Datepicker - 轻量级,没有依赖关系模块CSS。 fullcalendar - 全尺寸拖放事件日历(jQuery插件)。

15.1K112

「沙里淘金」精选浏览器端JavaScript库资源推荐

browserify - 浏览器端require()node.js方式。 SeaJS - Web模块加载器。 HeadJS - HEAD唯一脚本。...modulejs - 轻量级JavaScript模块系统。 Bundlers browserify - Browserify允许您通过捆绑所有依赖项来在浏览器(“模块”)。...focusable - 设置聚焦于DOM元素聚光灯,将叠加层添加到页面的其余部分。 通知 iziToast - 优雅,响应灵活,轻量级通知插件,没有依赖关系。...humane-js - 一个简单,现代浏览器通知系统。 smoke.js - 针对JavaScript框架无关样式警报系统。 notie - 没有依赖关系简单通知和输入。...Pikaday - 一个令人耳目一新JavaScript Datepicker - 轻量级,无依赖关系模块化CSS。 fullcalendar - 全尺寸拖放事件日历(jQuery插件)。

5.8K20

前端模块化工具 Browserify

Browserify 是什么 Browserify 是一个浏览器端代码模块工具 为什么要使用 Browserify 浏览器端代码模块化有2个明显好处: 1)前端JS可以使用npm包...,所以需要浏览器端模块化工具支持,这样就相当于给浏览器端增加了 npm 库 2)模块化开发 现在前端JS代码越来越多,可以通过模块化,把一个大JS代码分割成不同模块,存储在不同文件,提高项目规范化...会对代码进行解析,整理出代码所有模块依赖关系,然后把相关模块代码都打包在一起,形成一个完整JS文件,这个文件不会存在 require 这类模块化语法,变成可以在浏览器运行普通JS...> bundle.js 和上个例子一样,还是输出到 bundle.js,刷新浏览器 test.html,就可以在 console 中看到输出:555 Debug Browserify 打包出来是混合代码...点击进来后,进入了原始 test.js 自动打包 在开发过程,频繁手动执行 browserify 命令也是挺麻烦,最好能在源文件变化后自动打包 watchify 可以实现这个需求,先安装

2.9K40

「首席架构师推荐」一系列很棒浏览器端JavaScript库资源

browserify - 浏览器端require()node.js方式。 SeaJS - Web模块加载器。 HeadJS - HEAD唯一脚本。...modulejs - 轻量级JavaScript模块系统。 Bundlers browserify - Browserify允许您通过捆绑所有依赖项来在浏览器(“模块”)。...focusable - 设置聚焦于DOM元素聚光灯,将叠加层添加到页面的其余部分。 通知 iziToast - 优雅,响应灵活,轻量级通知插件,没有依赖关系。...humane-js - 一个简单,现代浏览器通知系统。 smoke.js - 针对JavaScript框架无关样式警报系统。 notie - 没有依赖关系简单通知和输入。...Pikaday - 一个令人耳目一新JavaScript Datepicker - 轻量级,无依赖关系模块化CSS。 fullcalendar - 全尺寸拖放事件日历(jQuery插件)。

6.5K21

几个常见前端模块管理器

为了解决这个问题,前端模块管理器(package management)应运而生。它可以轻松管理各种JavaScript脚本依赖关系,自动加载各个模块,使得网页结构清晰合理。...所谓”安装”,就是将该模块(以及其依赖模块)下载到当前目录bower_components子目录。...$ bower uninstall jquery 注意,默认情况下,会连所依赖模块一起卸载。比如,如果卸载jquery-ui,会连jquery一起卸载,除非还有别的模块依赖jquery。...Browserify ? Browserify本身不是模块管理器,只是让服务器端CommonJS格式模块可以运行在浏览器端。这意味着通过它,我们可以使用Node.jsnpm模块管理器。... Browserify编译时候,会将脚本所依赖模块一起编译进去。这意味着,它可以将多个模块合并成一个文件。

73030
领券