Node.js / npm - 无论如何,判断一个包是否是纯JS

Node.js / npm - anyway to tell if a package is pure JS or not?

本文关键字:一个 是否是 JS npm js 无论如何 判断 Node      更新时间:2023-09-26

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

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

所以,我的问题是:是否有任何过滤器/依赖关系跟踪可以让您查看包除了节点核心之外是否还有其他依赖项?因为对我来说,node的魅力在于"Javascript中的所有内容",而这种东西非常不愉快地消除了这种错觉。事实上,尽管我所做的不仅仅是我使用 C/C++ 的时间,但这些天每当我看到需要"制造"一些东西时,我通常会尖叫着朝另一个方向跑。:)

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

find node_modules/ | grep binding.gyp || echo pure

注意 package.json 中的 "scripts" 字段。

如果它包含类似的东西

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

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

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

也就是说,许多模块已经更新为安装,无需在Windows上构建,快速。但是,不能保证所有软件包。

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

Node

不是"一切 javascript",因为扩展 Node 核心的一种方法是编写 C/C++ 插件。

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

例如,你怎么能用纯javascript编写高效的数据库驱动程序?这是可能的,但很慢。

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