gpt4 book ai didi

javascript - 依赖node.js模块状态可以吗?

转载 作者:行者123 更新时间:2023-12-03 07:59:15 26 4
gpt4 key购买 nike

首先,我对 Node.js 没有那么丰富的经验。我对 Node.js 模块的理解是,它们的行为与 Python 的模块非常相似。我的意思是只执行一次代码并维护内部状态。直到我读过this article :

But you might not realize (I sure didn't!) that if your project is based on npm modules that both require the "shared" module as a dependency, like this:

node_modules/one/index.js:  
var shared = require('shared');

node_modules/two/index.js:
var shared = require('shared');

... And you install their dependencies with npm, there will be two copies of "shared/index.js" hanging about:

node_modules/one/node_modules/shared/index.js
node_modules/two/node_modules/shared/index.js

读完后,我不确定是否可以依赖模块的内部状态,因为一个模块可能存在于不同的路径上,因此缓存中可能有同一模块的两个或多个实例。这至少意味着“通过 native 模块机制不再有单例”。同时,我还没有听说过Python中有这样的问题。

这是否意味着几乎所有模块都必须仅返回函数/构造函数(例如 express.js 应用程序创建流程)并避免内部状态?

最佳答案

仅当从不同路径加载这些模块时, Node 模块上的内部状态才会有所不同,因此这在某种程度上取决于您使用的 NPM 版本以及如何管理依赖项。

这实际上更像是一个 NPM 问题,因为您可能会使用它来管理您的依赖项。

NPM 2 采用更加嵌套的方法来安装依赖项,这意味着与使用 NPM 3 安装相比,您会希望拥有更多的单个模块副本。

示例。假设您安装了模块 A 和模块 B,它们都依赖于模块 C 的 1.4 版本,您将获得 NPM 2:

+- Module A
| |
| + Module C v 1.4
|
+- Module B
|
+ Module C v 1.4

这意味着模块 A 和 B 将加载完全不同版本的模块 C。

如果您运行npm dedupe,它应该将该树理想化为:

+- Module A
|
+- Module C v 1.4
|
+- Module B

这棵更扁平的树也是 NPM 3 试图创建的。

在我们尝试依赖现有共享模块的固有单实例的系统上工作过之后,我建议不要这样做。 NPM 2 重复数据删除 也存在不少问题,而 NPM 3 仍然存在一些性能问题。

关于javascript - 依赖node.js模块状态可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34661566/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com