Node.js依赖性过大


10

最近,我开始玩node.js。

现在,每个节点教程都指出您应该从

npm init

然后,说您想要一些标准的服务器框架,说您选择express:

npm install express

但是您会想要从ASP.NET这样的世界中获得更多习惯。

我谈论模板引擎(Jade)和样式表预处理器(SASS)。

然后他们告诉您“安装gulp / grunt!这样您就可以自动最小化和丑化并运行服务器以及许多其他东西!”

这意味着安装gulp,node-sass和gulp-sass和gulp-uglify,以及一些更酷的东西(tsd或babel,markdown等)...

但是所有这些都在您的磁盘和项目上很繁重。不要浪费时间,您可以轻松地找到该项目的100MB +磁盘大小(甚至还没有开始!),更不用说10000+个文件了,因为每个节点模块都具有自己的依赖性,无论相同依赖关系被另一个模块使用。移动到任何地方都是一件非常困难的事情,更不用说Web服务器了。

我想念什么吗?我认为,在存在如此明显的缺陷的同时,对节点环境给予如此多的赞扬是不可能的。我是否期望太多(毕竟我确实曾经尝试过一次使用许多工具),Node退伍军人知道有什么琐碎的事情可以绕过它吗?


2
完全同意,我很惊奇看到一些前端项目的npm树。我想在.net世界中,您拥有相同的东西,但是它们都被编译为二进制文件,因此您不会注意到
Ewan 2016年

2
不幸的是,这并不是一个具体且可以回答的问题,因此可能很快就会解决。我可以告诉您的是:1)虽然所有这些附加工具都对某事有用,但微型项目根本不需要它们中的大多数; 2)具有相似功能的所有其他编程框架也将包含相似数量的内容(只是看起来在JRE或.NET下载),唯一的区别是多少,你需要的是“默认”的发行版的一部分,有多少你必须去寻找其他包3),100 MB您的开发机器上什么
Ixrec

1
@Ixrec当然是可以回答的,您只是(或尝试):)。但是,然后,我可能会争辩您的主张:1)这不必是一个很小的项目-考虑一个具有多个视图且带有自己的js文件和样式表的项目。这足以使您想拥有sass,cssnano和uglify。也足以使您想要表达,玉和更多。2)我有一个不错的.net项目,它没有那么沉重(并且没有那么多文件)。3)也许现代的开发机器可以轻松地做到这一点,但这也给服务器带来了沉重的负担,这还需要更多考虑。我错了吗?
或Yaniv

2
@OrYaniv的确,您确实证明了我的观点:这是可以讨论的问题,但无法回答,因为它涉及面太广,在很大程度上取决于您正在执行的项目以及所依赖的对象需要。顺便说一句,讨论完全可以在聊天中进行。或在Quora上。
Ixrec

3
欢迎来到node.js异常膨胀的“全有或全无”的世界,它实际上并不比您以前使用的要容易和更好。
Traubenfuchs

Answers:


4

最近出现的左手问题是Node中这种趋势的主要示例。当您依赖太多东西时,所有这些东西都容易出现问题,使您的项目更难以调试,并且对于新手来说,更难掌握语言的工作原理。

现在,优秀的Node.js程序员知道编写依赖关系的简约应用程序。您所依赖的东西越少越好。是否需要在左侧填充字符串?在一个助手中对其进行编码,它是11行代码,带有空格。需要对字符串行进行编号吗?进行编码,少于100行代码。

即使对于诸如项目管理之类的更复杂的任务,我还是建议您在项目足够简单的情况下坚持使用Makefiles-grunt和gulp对于需要大量工作的大型项目确实非常有用。但是对于您的SPA博客?编写一个Makefile,它需要5分钟,您知道如何工作的。

每当您需要编写3行代码时,只浏览npm的诱惑是巨大的,但是在合理的情况下,应该避免使用它。如果您有3种DOM操作,请不要包含jQuery,不要在该静态促销页面中使用angular,不要在简单的服务器上使用express。但是您正在编写CMS吗?您必须疯了,不使用jQuery,下划线之类的软件包,而不要使用诸如此类的软件包。使用10种收集类型,3个数据库并始终对其进行查询?不使用下划线和其他一些符号会很疯狂。只是想想“我是否通过安装此软件包节省了足够的时间?” 或“我不能在半个小时左右内编写代码吗?”


2
另外,在字符串中添加行号是否真的需要100行Java代码
罗伯特·哈维

哈哈哈,我还没有真正考虑过现实的行号实现,因为...我真的没有看到需要这种东西的存在,更不用说打包了。
BorisStoyanovv '16

您可以仅凭自以为是就可以将行的内容减半。这确实是一个简单的问题。(这是一种使用方案之类的语言编写的班轮,现在我想到的可能是python)
Shayne
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.