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

为什么 CommonJS 会使你的程序变大

由于 2010 年代初期,浏览器缺乏标准化的模块系统,CommonJS 成为了 JavaScript 客户端库流行的模块格式。 CommonJS 是怎样影响最终大小的?...他们构建时分析你的程序,尝试尽可能多地删除那些没有用到的代码。 例如在上面的代码段,最终的应该只包含 add 函数,因为这是你从utils.js 中导入到 index.js 的的唯一符号。...调用 webpack之后,如果我们查看输出 的大小,将会看到类似以下的内容: $ cd dist && ls -lah 625K Apr 13 13:04 out.js 请注意,输出的为 625...要注意,即使 index.js 中用了 ES2015 规则,但是如果你用的模块是 CommonJS 模块,则打包后的大小会受到影响。 为什么 CommonJS 使你的程序更大?...该插件将所有模块的作用域合并为一个闭,并使你的代码浏览器执行的更快。

92030

【干货】2017年值得关注的JavaScript框架与主题

Lodash: 一个非常好用的、模块清晰的JavaScript辅助工具,其遵循了很多函数式编程的理念,你可以通过 lodash/fp导入。...Babel: 能够将ES6代码编译到ES5使之能够兼容老版本浏览器。...ESLint: ESLint能够帮助开发者更快地发现语法错误与样式问题,Code Review与TDD之后这是个不错的减少Bug的方法。...这种单向数据流与当时以Angular 1 / Knockout为代表的双向数据绑定形成对比,双向数据绑定如果发现绑定的数据发生变化则会立刻触发重渲染,而无论当前是否处于渲染流程,这一点也就导致了Reflows...虽然我个人非常喜欢RxJS,但是如果你想在工程中使用RxJS的话还是需要考虑下,因为其内置了很多的Operators,其增加你的体尺寸。

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

AngularJS7那些不得不说的事故

更不要说npm的升级直接升级了@angular/cli本身。   ...当然这在工作碰到上面说的依赖失维的问题,建议常用的功能,平常自己就留意保留一些吧。...AngularJS7使用JQuery.js/Bootstrap等第三方功能库   这几个使用传统html页面的时候常用的,JQuery.js很多的框架已经不建议使用了,而是使用框架的组件或组件通讯类功能来完成相似的功能.../jslib/lists';   使用的时候,跟原来js引用完全一致。通常说,比上面介绍的引用JQuery.js之类的引用更容易。.../some_angular_dir/jslib   这会编译jslib的所有文件,文件夹结构保留,所以编译完成,直接用生成的jslib替换原来的文件夹。

1.5K10

Webpack 打包优化之体积篇

从产品层来讲,如何使得构建的体积小、运行快,这有必要不断摸索实践,提炼升级,使之臻于最佳。..., webpack可以处理使之不参与打包,而依旧可以代码通过CMD、AMD或者window/global全局的方式访问。...让每个第三“引有所值” 确定引入的必要性 前端发展到如今时期,倘若项目采用了 MVVM模式框架,数据双向绑定,那么像 jQuery 这般类库,不能说没有丝毫引入的必要,至少可以说确实没有引入的必要。...如此能够非常有效的抑制 Javascript 过大,同时使得资源的利用更加合理化。...在此提醒广大笔友,及时备份数据并确认,这很重要?。在此预告下一篇 《Webpack 打包优化之速度篇》,当然,此文扔在完善。 深圳.南山 @17-08-04.

1.9K40

Top JavaScript Frameworks & Topics to Learn in 2017

Lodash: 一个伟大的,模块化的JavaScript实用程序工具,包含功能编程的好东西。从 lodash/fp 导入 data-last 功能模块。...npm: JavaScript语言的标准开源代存储库 git & GitHub: 分布式版本管理器 - 随时查看你源码的修改。 Babel: 用于编译 ES6 以旧版浏览器上工作。...事件处理阶段 - 渲染 DOM 之后,React 侦听和事件,将事件委托给其 DOM 树根(为了更好的性能)的单个事件侦听器。 你可以监听这些事件并更新响应的数据。...使用双向绑定, DOM 渲染过程(称为 Angular 1的摘要循环)对 DOM的 更改可能会在绘制完成之前重新触发绘图阶段,从而导致回流和重绘 - 从而降低性能。...,React 有一个非常明显的机会,使 代替 Angular 成为主导的前端框架。

2.2K00

webpack原理(2):ES6 moduleWebpack如何Tree-shaking构建

这样的好处是:减少程序体积减少程序执行时间便于将来对程序架构进行优化而所谓 Dead Code 主要包括:程序没有执行的代码 (如不可能进入的分支,return 之后的语句等)导致 dead variable...基于ES6的静态引用,tree shaking 通过扫描所有 ES6 的export,找出被import 的内容并添加到最终代码。...使用 ES6 Module:不仅是项目本身,引入的库最好也是 es 版本,比如用 lodash-es 代替 lodash。...你应该避免将整个库导入到单个 JavaScript 对象。当你这样做时,你是告诉 Webpack 你需要整个库, Webpack 就不会摇它。以流行的库 Lodash 为例。...把本来“每个模块包裹在一个闭里”的情况,优化成“所有模块都包裹在同一个闭里”的情况。本身对于代码缩小体积有很大的提升,这里能侧面解决副作用的问题。

68410

type=module 你了解,但 type=importmap 你知道吗

请注意, import map 中出现并不意味着它一定会被浏览器加载。任何没有被页面上的 script 使用的模块都不会被浏览器加载,即使它存在于import map。...将指定者映射到整个 除了将一个指定器映射到一个模块,你可以将一个指定器映射到一个包含多个模块的。这是通过使用指定器键和以尾部斜线结尾的路径来实现的。...即使NPM上的不是为ES模块系统和本地浏览器导入行为设计的,像Skypack和ESM这样的服务可以将它们转化为可在导入地图中使用的。...可以使用Skypack主页上的搜索栏来寻找浏览器优化的NPM,这些可以立即使用,而无需摆弄构建步骤。...@1.3.0/dist/es-module-shims.js"> 包括polyfill之后,可能会在你的控制台中得到一个JavaScript TypeError。

3.3K20

【Webpack】320- Webpack4 入门手册(共 18 章)(下)

// webpack 生产环境配置文件 + ├─webpack.dev.js // webpack 开发环境配置文件 由于我们文件调整了,所以 package.json ,打包命令需要调整...安装 babel-loader 安装 babel-loader 是为了将 ES6 及以上版本的 JS 代码转换成 ES5。...调整 webpack.prod.js 同样对于生产环境的配置,我们需要用 merge-webpack 插件进行配置合并: // webpack.prod.js const path = require...stats: "errors-only" ,// 只显示的错误 open:true, // 启用“打开”后,dev服务器将打开浏览器。..._' }, 再打包以后,可以看到 lodash.js 已经不在里面了: 并且打包后的文件,能正常运行: 更多参数介绍,可访问中文官网的介绍: 《webpack-bundle-analyzer》https

2.3K20

React 16 加载性能优化指南(上)

把抓到的内容写入 html,这样即使没有做服务器端渲染,能达到跟服务器端渲染几乎相同的作用(不考虑动态数据的话) plugins: [  new PrerenderSpaPlugin(    path.join...比如 React 16 的代码依赖了 ES6 的 Map/Set 对象,使用时需要你自己加入 polyfill,但目前几个完备的 Map/Set 的 polyfill 体积都比较大,打包进来增大很多体积...angular, componentC chunk-d angular, componentD 显然在这里,react、react-dom、angular 这些公用的模块没有被抽出成为独立的,存在进一步优化的空间...cube(x) {  return x * x * x } 然后你另一个模块用了它: // index.js import { cube } from '....' // 下面没有用到 yourModule 这一点对于 lodash、underscore 这样的工具库来说尤其重要,开启了这个特性之后,你现在可以无心理负担地这样写了: import { capitalize

1.7K50

2020前端性能优化清单(三)

它对 浏览器的支持非常出色[37],并且随着 JavaScript 和 WASM 之间的函数调用变得越来越快[38],使它最近变得切实可行。另外,它甚至 Fastly 的边缘云中受支持[39]。...由于 ES2015 现代浏览器得到了很好的支持[49],因此我们可以使用 babel-preset-env 只转换你的代码现代浏览器不支持的 ES2015+ 部分。...基本上,通过告诉浏览器需要加载的内容使浏览器长时间网络往返过程不会被任何事情阻碍,这是最大化使用带宽的一种好方法。...对于 lodash,使用 babel-plugin-lodash[54] 只加载你源代码中使用的模块。...为了避免以上问题,请考虑使用 webpack-libs-optimizations[78] 构建过程删除未使用的方法和 polyfills。 审核添加到你的日常工作流程

2K10

2020前端性能优化清单(三)

它对 浏览器的支持非常出色[37],并且随着 JavaScript 和 WASM 之间的函数调用变得越来越快[38],使它最近变得切实可行。另外,它甚至 Fastly 的边缘云中受支持[39]。...由于 ES2015 现代浏览器得到了很好的支持[49],因此我们可以使用 babel-preset-env 只转换你的代码现代浏览器不支持的 ES2015+ 部分。...基本上,通过告诉浏览器需要加载的内容使浏览器长时间网络往返过程不会被任何事情阻碍,这是最大化使用带宽的一种好方法。...对于 lodash,使用 babel-plugin-lodash[54] 只加载你源代码中使用的模块。...为了避免以上问题,请考虑使用 webpack-libs-optimizations[78] 构建过程删除未使用的方法和 polyfills。 审核添加到你的日常工作流程

2.1K20

2017年前端框架、类库、工具大比拼

类库能够使将开发时间缩短20%,开发者不必担心细节实现。...优点: 小而简单 良好的文档易于学习 与大多数类库和框架兼容 不扩展内置对象 可以客户端或服务器上使用 缺点: 有些方法只ES2015及更高版本的JavaScript可用。...Angular 4.0于2017年3月发布。 Angular 2.x与v1版本截然不同,不与其它版本兼容 - 也许Google应该给项目起一个不同的名字!...它在单个实现模板化、数据绑定和类库。...jQuery虽然现在并不十分流行,技术新闻很少会被提到,但不可否认它是积极开发的,同时也是网站和应用程序的有力工具。jQuery具有平缓的学习曲线,全球许多开发人员能够很好地理解。

2.3K10

2016 JavaScript 技术栈展望

Redux ,大多数的组件都是纯函数式的组件,只有一个集中的存储和资源中心。Redux 的实例方法负责整个数据的操作和维护。相比 Flux 来说,Redux 的思路更加清晰。...与 Ruby 的 Bundler 有所不同,NPM 使用了通配符检索文件,且第三方可以代码开发以及项目发布前做任意修改。...Lodash JavaScript 并没有一个类似 Java 或 .NET 的核心工具库,所以开发者大都会从外部引用一个外部工具库。 目前来说,Lodash 是此类工具的佼佼者。... 4.x 版本Lodash 为偏爱函数式编程的开发者提供了一个“函数式开发”模式。 如果你熟悉函数式编程,你可以了解一下 Ramda。...我建议使用 isomorphic-fetch 各个浏览器和服务端保持功能的一致性。 当然可以其他优秀的第三方库异步获取数据,但我觉得 fetch 已经够用了

2.1K40

你可能已经忽略的git commit规范

但是日常工作,大多数同学对于 log 信息都是简单写写,没有很好的重视,这对于项目的管理和维护来说,无疑是不友好的。...git 提交信息模板 如果你的团队对提交信息有格式要求,可以系统上创建一个文件,并配置 git 把它作为默认的模板,这样可以更加容易地使提交信息遵循格式。..." ] }, 当然如果你想单独对 commitlint 进行配置的话,需要建立校验文件 commitlint.config.js,不然校验失败 为了可以每次 commit 时执行 commitlint...可以 git hook 的各个阶段执行我们 package.json 配置好的 npm script。...表情的出现让我们与朋友之间的沟通变得更加有趣。如果能在 git 提交 commit 时用到表情( ? ),岂不是使每次的 commit 能够更加直观,维护起来更加方便。

1.2K30

Vite2.0 依赖关系预捆绑

转换CommonJS依赖时,Vite执行智能导入分析,这样即使导出被动态分配(例如React),命名的导入像预期的那样工作: // works as expected import React,...一些将它们的ES模块构建作为许多单独的文件相互导入。例如,lodash-es有超过600个内部模块!当我们从'lodash-es'导入{debounce}时,浏览器会同时发出600多个HTTP请求!...尽管服务器处理这些请求时没有问题,但大量的请求会在浏览器端造成网络拥塞,导致页面加载明显变慢。 通过将lodash-es预绑定到单个模块,我们现在只需要一个HTTP请求!...服务器已经启动之后,如果在缓存没有遇到新的依赖项导入,Vite将重新运行dep绑定进程并重新加载页面。...如果安装了不同的版本(反映在包管理器的lockfile),则附加的版本查询自动使它们失效。

2.5K20

Webpack 4教程 - 第七部分 减少打包体积与Tree Shaking

本次Webpack 4教程,我们更进一步讲述项目优化。我们学习什么是tree shaking以及如何使用它。...你可以简单设置modules: false来解决此问题,.babalrc或者webpack.config.js设置都可以。...有了它,Webpack会在你的打包产出里添加额外的像是/* unused harmony export */之类的注释,UglifyJsPlugin之后会使用到它们。...当使用import _ from 'lodash'时,这无法避免。但不要担心!有人已经思考过此问题,并创建了一个叫做lodash-es。它以ES6模块的形式提供了lodash库。...总结 为了使tree shaking起作用,需要满足许多条件。它是个很有用的特性,当然值得学习。希望你通过本文了解如何使用它,让打包后的体积大幅减小。

86020

为生产环境编译 Angular 2 应用

为生产环境编译 Angular 2 应用 Angular 2 已经发布了 2.1.2 版本, 相信很多人已经使用(试用)了, 相比 AngularJS 1.x , Angular 2 性能上有了长足的进步..., 同时 Angular 2 变得非常的庞大, 动辄几兆的脚本, 如何部署到生产环境?...接下来就介绍如何为生产环境编译 Angular 2 应用, 本文中, 我们将 Angular 2 官方文档的 Hello Angular 应用编译到 50K 以下, 以用于生产环境。.../node_modules" ], "types": [ ] }, "files": [ "app/main-aot.ts" ] } Angular2 应用..., 包含了一个即时编辑器 (JIT) , 预编译好的应用不是必需的, 使用 Angular2 的 AOT 编译可以移除即时编译器 (JIT) , 因此需要先安装 Angular 的编译器: npm

1.2K30
领券