Javascript Node.js/npm-无论如何,要判断包是否为纯js?

Javascript Node.js/npm-无论如何,要判断包是否为纯js?,javascript,node.js,dependencies,npm,Javascript,Node.js,Dependencies,Npm,我注意到,在尝试使用npm(例如“微框架”)安装看似简单的节点包时,我经常会遇到某种形式的依赖性问题。经过一番挖掘,我找到了nerve模块的问题,该模块显然是用C/C++编写的,必须在包管理器下载后进行编译 不幸的是,如果你想让它在Windows上运行,答案是(从一个bcrypt问题线程中)“安装一个Linux虚拟机”。所以今天早些时候我就这么做了,并开始运行其他依赖项(尽管安装了GCC,但在考虑构建之前,您需要先安装),然后在看到另一个C编译器错误后(我认为某些包或其他包无法找到“Arrays

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

不幸的是,如果你想让它在Windows上运行,答案是(从一个bcrypt问题线程中)“安装一个Linux虚拟机”。所以今天早些时候我就这么做了,并开始运行其他依赖项(尽管安装了GCC,但在考虑构建之前,您需要先安装),然后在看到另一个C编译器错误后(我认为某些包或其他包无法找到“Arrays.C”),我实际上放弃了,然后从“神经”改为“表达”。具有讽刺意味的是,更大、更复杂的express在Linux和Windows上安装npm时没有出现任何问题

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

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

所以Node更像是使用V8的c/c++模块的javascript包装器

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

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

查看package.json中的“scripts”字段

如果它包含以下内容

 "scripts": {
    "install": "make build",
 }
在根目录中有一个Makefile,这个包很可能有一些本机模块,需要编译和构建。许多包包含一个Makefile,仅用于编译测试

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

也就是说,许多模块已经更新为安装,而不需要在Windows上构建express for one。然而,这并不能保证所有的包


使用Linux虚拟机似乎是最好的选择。提供有关安装VM、Node.js和Express的分步说明。

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

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

正如我所说的,这是可能的(编写纯js数据库驱动程序),但是您确实测试了这个包吗?是的,我刚刚发现了这个比较纯JS实现和libmysql实现的基准页面:它看起来和链接到mysql库的页面一样快。这一点也不让我感到惊讶——当然,这些东西的瓶颈将是网络和数据库CPU/I/O,而不是客户端本身?这并不能回答问题,最好作为评论发布。Bence的回答提供了一种寻找C/C++依赖关系的方法。Dave,我感觉到了你的痛苦,但有时我们因为优化和资源需求而被迫使用C/C++。在处理了几个本机节点模块并尝试不重复任何操作和使用合理的依赖项之后,我遇到了许多问题。也许最合理的节点模块是那些调用或执行本机代码而不是编译和链接本机代码的模块。是的,它确实提供了一个答案,在这种情况下,它甚至与第一个答案不同。你无法从“make-build”中分辨出它的功能。它可能会构建一些非纯脚本的东西,但它可能不会。这个答案也不会检查任何依赖性。唯一正确的答案是搜索节点gyp的任何证据,即构建任何不纯的东西。
find node\u modules-name binding.gyp
将是使用find的更自然的方法。这不可靠。。。如果存在
binding.gyp
文件,npm/Thread将自动构建本机代码,这就是我所知道的每个本机模块的处理方式。这也不能告诉您是将
make
用于C/C++还是用于JS(有些软件包是这样做的)。