6

我注意到,在尝试使用 npm 安装看似简单的节点包(例如,神经,一个“微框架”)时,我经常遇到某种形式的依赖问题。经过一番挖掘,我找到了bcrypt模块的神经问题,该模块显然是用 C/C++ 编写的,并且必须在包管理器下载后进行编译。

不幸的是,如果您希望它在 Windows 上运行,答案似乎是(来自 bcrypt 问题线程之一)“安装 Linux VM”。所以今天早些时候我就这样做了,并开始遇到其他依赖项(尽管安装了 GCC,但在考虑构建之前,您需要安装某些未命名的 apt 包),然后最终看到另一个 C 编译器错误(关于某些包或我认为其他找不到“Arrays.c”),我实际上放弃了,并从神经转为表达。具有讽刺意味的是,在 Linux 和 Windows 上使用 npm 进行更大、更复杂的快速安装没有任何问题。

所以,我的问题是:是否有任何可用的过滤器/依赖项跟踪可让您查看包是否具有除节点核心之外的其他依赖项?因为对我来说,node 的魅力是“Javascript 中的一切”,而这种东西非常令人不快地消除了这种错觉。事实上,尽管我在使用 C/C++ 方面所做的工作已经超过了我的时间,但现在每当我看到需要“制作”某些东西时,我通常都会尖叫着朝另一个方向跑去。:)

4

3 回答 3

15

第一个解决方案不会告诉您依赖项是否使包不纯。搜索 gyp 生成的输出要好得多:

find node_modules/ | grep binding.gyp || echo pure
于 2016-07-01T13:14:14.960 回答
3

请注意 package.json 中的“脚本”字段。

如果它包含类似

 "scripts": {
    "install": "make build",
 }

和根目录中的 Makefile,包很可能有一些必须编译和构建的本机模块。许多软件包包含一个仅用于编译测试的 Makefile。

对包文档的检查并不排除必须编译和构建某些依赖项的可能性。这意味着对 package.json 中的每个依赖项、它们的依赖项等重复此过程。

也就是说,许多模块已更新为安装,无需在 Windows 上构建,仅此而已。然而,这不能保证所有的包。

使用 Linux VM 似乎是最好的选择。在 Window 上开发 Node.js 应用程序为您提供了有关安装 VM、Node.js 和 Express 的分步说明。

于 2012-05-11T03:11:07.243 回答
3

Node 不是“所有 javascript”,因为扩展节点核心的一种方法是编写 c/c++ 插件。

所以 Node 更像是一个使用 V8 围绕 c/c++ 模块的 javascript 包装器。

例如,您如何用纯 javascript 编写高效的数据库驱动程序?这将是可能的,但速度很慢。

至于过滤器,由作者来记录他的包。没有自动过滤器。

于 2012-05-10T16:57:24.017 回答