`
乱蓬头199303
  • 浏览: 81738 次
文章分类
社区版块
存档分类
最新评论

前端应用能从 Node.js 学到什么

阅读更多

摘要: Will Binns-Smith是一位热爱JavaScript的全栈工程师,喜欢通过技术来解决实际问题。他开发了Bonobos.com的前端购物车功能。Will喜欢与设计师一对一工作,将PC网站转换为针对更小的触摸设备的站点。

Will Binns-Smith是一位热爱JavaScript的全栈工程师,喜欢通过技术来解决实际问题。他开发了Bonobos.com的前端购物车功能。Will喜欢与设计师一对一工作,将PC网站转换为针对更小的触摸设备的站点。近日,Will撰写了一篇文章,谈到了Node.js有哪些做法和特性值得前端应用学习。

在Web平台能从Node.js学到什么这篇文章中,我们探索了由开发者为开发者所创建的小范围抽象所带来的好处。在这篇文章中,我们来了解如何以及为何应该将这种开发风格引入到你自己的Web前端中。

选择你自己的方式

作为小模块的用户,如果你不接受依赖所做的变动,那么你可以换另一个依赖。也许应用会使用某个模块的新版本(比如说2.x),而应用的另一个依赖使 用的却是老版本(比如说1.x)。在Node中,由于依赖的查找是从邻近的node_modules目录开始,然后沿着文件系统逐级向上,即便需要不同版 本号的相同模块,这种方式也是可以满足需求的。如果版本匹配,那么只会使用一个副本。

浏览器中的npm模块?这难道不是Node的事情?

你可能想知道如何能在不使用成百上千个script标签或是不在RequireJS配置文件中使用那么多条目的情况下维护如此多的依赖。也许你还想知道如何在浏览器中使用来自于npm的模块轻松创建SVG元素。诸如Browserify与Webpack等现代工具让这件事成为了可能,他们会通过Node所用的相同的CommonJS require语句来追踪应用的依赖图。他们使得一个大型包文件中的模块彼此可见,而你在页面中则可以通过单个script标签将其引入进来。

另一个常见问题就是这么做会不会增加向浏览器传送的JavaScript文件大小。在新版的npm中,这种模块树采用了扁平形式,同时又会向应用中 的每个依赖提供所需的版本。借助于这种方式,你不会传递任何不需要的库的副本,同时又能满足每个模块的要求。此外,还有一个名为rollup的更加新颖的包管理器,它使用了ES2015模块格式,只打包你所导入的模块的子集。

我所认识的很多人都对将多个jQuery版本放到浏览器中这个想法感到惊讶。没错,这么做确实有些恐怖,虽然做了精简与gzip压缩,但 jQuery依然会有30KB的大小。不过,传输2个、3个、甚至4个2KB大小的库的副本相比起来却是微不足道的,特别是这么做能够避免手工解析依赖和 升级jQuery以及安装的那些插件。即便如此,你也只应该在应用中包含了很多模块,并且这些模块又依赖于很多不兼容模块的情况下才这么做,因为npm 3在默认情况下会尽可能打平模块目录。你可以通过简单的安装随意使用npm注册的100,000多个模块。

界限在哪里

我们先来了解一些术语:包指的是可以发布到npm注册中心或是通过git仓库使用的单元。不过在CommonJS中,模块与文件是一一对应的。因此,一个包可以包含多个模块,不过通常情况下,一个npm包本身就是一个模块。

定义包的职责是最困难的一件事。如果包的范围过大,那么就会出现破坏性的改变,其后果就是破坏了生态圈。与之类似,如果一个包有很多依赖,那么破坏性的改变与Bug就会导致整个系统出现级联更新,无论开源还是内部使用都是如此。在设计包的范围时,一个好的原则就是软件组件的内聚性。本质上,如果几个组件会一同变化,那么他们就应该属于同一个包。如果不是,那就请抽取出来!

请记住,借助于npm与大多数包管理器,一个包不一定需要一个专门的仓库。如果过多的Pull Request的负担阻碍了发布新模块的流程,那就请考虑创建新的仓库,同时发布每一个包。Babel是个开源的JavaScript编译器,它通过这种 方式在单个仓库中维护了100多个包,极大地提升了效率,同时又将每个包发布到了npm中。

值得注意的是,Bower(另一个JavaScript包管理器)的一个限制是它使用Git仓库(或是tarballs)作为接收模块代码的方式,因此它需要为每个包都创建一个仓库。我的建议则是使用npm。

​​​​​​​

原文链接

分享到:
评论

相关推荐

    前端 - node.js 16.12.0

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者能够在服务器端使用 JavaScript,极大地推动了前端开发的进步。版本 16.12.0 是 Node.js 的一个重要更新,包含了多项性能优化和新特性的引入,...

    node.js 安装包 10.16.3-x64

    Node.js 是一个开源、跨平台的JavaScript运行环境,它允许开发者在服务器端执行JavaScript代码,极大地拓宽了JavaScript的应用领域。10.16.3-x64 版本是 Node.js 的一个稳定版本,适用于64位操作系统。下面将详细...

    node.js win7版本12.8.0

    鸿蒙OS作为新兴的移动和物联网操作系统,可能已经或者计划通过社区支持或官方适配来确保Node.js的兼容性,以便开发者能利用Node.js的强大功能进行应用开发。 压缩包中的文件 "node-v12.8.0-x64.msi" 是适用于...

    Web前端模块化开发教程(ES6+Node.js+Webpack)_源代码.zip

    本教程主要围绕Web前端的模块化开发展开,利用ES6的语法特性、Node.js环境以及Webpack工具进行深入探讨。在现代Web开发中,模块化已经成为不可或缺的一部分,它有助于提高代码的可读性、可维护性和复用性。下面将...

    Node.js-LiveNode.js超简单的前端跨域前后端分离解决方案

    `LiveNode.js`是一个针对这种趋势而设计的轻量级Node.js服务,它专为了解决前端开发中的关键问题——本地跨域限制、实时代码刷新以及单页应用(SPA)的前后端分离。本文将深入探讨`LiveNode.js`的核心功能和应用场景...

    前端学习笔记-Node.js

    在黑马程序员的Node.js笔记中,你还可以通过实际项目来巩固所学知识,例如开发一个Web API服务,或者构建一个实时聊天应用,这些都将帮助你更好地理解和应用Node.js技术。 总的来说,这是一份全面覆盖Node.js基础...

    Node.js(node-v21.6.0.tar.xz)

    Node.js是一个基于V8引擎的开源、跨平台的JavaScript运行环境,用于执行JavaScript代码。它允许开发者使用JavaScript编写服务器端应用程序,使得前后端语言统一,提高开发效率。Node.js提供了一个非阻塞I/O模型,使...

    新时期的node.js入门-李锴-书中示例代码

    总的来说,《新时期的Node.js入门》是一本全面介绍Node.js基础与实践的书籍,通过李锴精心编写的实例代码,读者不仅能学习到Node.js的基本语法,还能掌握实际开发中的各种技巧,为步入Node.js的世界打下坚实基础。

    Node.js解析ajax参数Demo

    在这个“Node.js解析Ajax参数Demo”中,我们将深入探讨如何使用Node.js作为服务器端,处理由前端Ajax发送过来的参数。 首先,Ajax的核心在于XMLHttpRequest对象,它允许JavaScript在不刷新整个页面的情况下与服务器...

    node.js时钟案例

    Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它允许我们在服务器端编写JavaScript代码,实现强大的网络应用功能。结合CSS和前端技术,我们可以创建出动态且交互式的时钟界面。 首先,我们需要了解Node.js...

    node-v10.14.0-x64_Node.js_源码

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者能够在服务器端使用 JavaScript 进行编程,极大地推动了前后端一体化的开发模式。Node.js 使用了一个事件驱动、非阻塞I/O模型,使其轻量又高效...

    Node.js-基于node.jsMongodb构建的后台系统

    这些功能通常涉及到前端技术如HTML、CSS和JavaScript,配合Node.js的Express框架可以快速构建RESTful API,提供数据接口给前端应用。 后台管理接口则更多地关注于系统的维护和运营,可能包括管理员登录、商品管理...

    基于Vue.js-Node.js-Mongodb 的本人本科毕业设计.zip

    在本科毕业设计中,MongoDB可能作为主要的数据存储解决方案,用于存储和管理Vue.js前端应用程序与Node.js后端服务器交互的数据。 【本科毕业设计】 本科毕业设计是高等教育阶段的一个重要组成部分,学生需要结合所...

    源码&笔记_Node.js_node.js相关_前端学习_

    在 Node.js 中,Express.js 是最常用的 web 开发框架,它简化了路由、中间件和模板引擎的使用,让开发者能快速搭建 web 应用。 8. **MongoDB 集成** Node.js 可以通过 Mongoose 或其它库与 MongoDB 数据库进行...

    node.js学习资料

    4. **API后端**:对于前端重度依赖的项目,Node.js作为后端提供API接口,与前端JavaScript代码无缝对接。 **三、Node.js环境搭建** 1. **下载与安装**:访问Node.js官网,根据操作系统下载对应版本的安装包,按照...

    Node.js-基于Electron的一个Node.js安装器

    Node.js是一种开源、跨平台的JavaScript运行环境,它允许开发者在服务器端运行JavaScript代码,极大地扩展了JavaScript的应用范围。 Electron是GitHub推出的一款开源框架,它允许开发者使用Web技术(如HTML、CSS和...

    Vue 3 + Node.js 全栈项目.zip

    Vue 3 + Node.js 全栈项目,自实现 web 终端 + 命令系统,支持使用输入命令的方式来操作,前端使用vue3,vite2,AntDesign Vue3 组件库,Pinia2 状态管理,TS类型控制,Eslint登,后端使用Node.js,Express等 ...

Global site tag (gtag.js) - Google Analytics