是否更新了生产应用程序上不推荐的npm依赖项?

时间:2017-08-13 04:17:21

标签: node.js npm

我最近开始探索npm并安装了一个github repo yoonic/nicistore

但是当我尝试构建它失败时。

我的问题是,如果我开始在节点之上构建东西,我看到有来自不同供应商的太多依赖关系,我是否完全受各自软件包开发人员的支配?

我已经看到大多数基于节点的github repos在第一次尝试时无法构建。如果我通过运行控制台命令更新其中一个模块,是否可能会破坏所有应用程序?

如果确实如此,那么它是否会证明node.js是一个不可靠且不稳定的开发平台?

1 个答案:

答案 0 :(得分:1)

将其视为大多数其他语言的反面。

您正在使用Java编写应用程序。 你想使用LibA,LibB和LibC。

因此,您尝试使用LibC 2.4,并且只要您这样做,您的经理就会向您抛出各种错误。 为什么呢?

因为LibB正在使用LibC 1.9

所以现在你有什么选择? 删除所有要使用的LibC新API的调用... ...或者希望LibB是开源的,你可以为它的新版本贡献一个更新,这样你就可以使用最新版本的LibC(并希望不会' t更新)。

所以现在你已经做到了......但是现在你已经打破了你的LibA,因为它想要旧的LibB。

你甚至没有想要 LibA,你只需要让你的应用程序对你的框架感到满意,而你实际上做的库想要使用(B和C)。 LibA是封闭源代码,不再维护。倒霉。如果你只能在新版本的LibC中使用你的框架,那么回到过去的方式,忘记生活会有多好。或者开始祈祷你的框架进行了重大改写,摆脱了LibA的依赖......然后找出你必须处理的新内容,只是为了让LibC工作。

这真的比Node好吗? 允许您执行的节点是安装依赖项,这些依赖项的版本与依赖项所使用的库不同。

并不是说你也不能用Java做到这一点......但整个社区已经决定它不会尝试这样做,因此在工具级别将其取缔

接下来,您会看到太多让您受到太多供应商摆布的事情...... 回到Java(或C ++,或几乎任何主流语言),查看Java本身,Sun Microsystems或James Gosling制作了多少个库?

此外,如果你想把它简化,建议只使用一个巨大的,总体框架(如Spring MVC)并且不使用任何其他类型的库(比如JodaTime),那么Spring本身有多少个库靠近,为什么他们不关心你,即使你只是使用编译的VM字节码?

事实上,一个强有力的论据可能会对编译的二进制文件更加警惕,在传统的语言中看到强大的,像GNU GPL那样的复制左侧许可......在这个领域,你打开自己起因于疯狂 相比之下,大多数节点的东西都是简单的免费软件。即使它不是,它也可以快速更换,因为大多数都是微型库。

我建议更新服务器所依赖的Node包,通过CLI比完全成熟的Java项目更新危险,如果你的目标是再次编译你的项目,下周某个时候,但有更新的修复/功能......

...但如果您正在谈论一个全面的生产应用程序,那么无论如何,您还需要了解您在代码库方面所做的工作。

至于为什么第一次尝试不为你构建的东西,假设你是在非Windows平台上,并且你的环境是最新的,我不知道。 我克隆的大多数C / C ++项目都没有为我构建,首先尝试。我经常会忘记一些事情,或者有一些记录不完整的文章,或者实际的项目是为了对其运作的系统做出不公平的假设。

这是否意味着C ++是一个不可靠/不稳定的开发平台? 或者在企业环境中设置Eclipse所花费的时间/天数,以及各种疯狂的公司特定项目和项目设置?

这听起来像一个糟糕的设计,比什么都重要。

然后,我现在的大多数项目都包含在Docker容器中。它们都在相同的环境中运行,无论它们是在Windows,Mac还是在服务器上运行。无论代码使用何种语言,或者他们正在运行什么VM /处理器,这都会使构建项目失去兴趣。

您还应该使用NPM shrinkwrap文件或Yarn Lockfiles来保存构建配置,以及已知工作版本的库。您应该进行单元和集成测试,以确保更改库版本对您的系统没有明显的影响。

相关问题