gpt4 book ai didi

node.js - 如果您指向符号链接(symbolic link),则 require 会变得困惑

转载 作者:太空宇宙 更新时间:2023-11-04 02:34:44 25 4
gpt4 key购买 nike

我正在尝试在我的nodejs项目中创建一个插件文件夹。

/
--/plugins
----index.js

插件文件夹有一个index.js 文件,它将动态“加载”该目录中的所有插件。

我创建了一个 foo 模块

/
--/plugins
----index.js
----/foo (foo plugin stuff all in this dir)

这一切都运行良好。现在我想将 foo 插件移动到另一个 git 存储库中。想法是,当您 pull 核心项目时,默认情况下您不会获得任何插件。但您可以通过将所需内容放入插件目录来“安装”它们。

所以我在 git 中将插件目录留空,我在与 core 不同的目录中 checkout 插件(因此 git 不会将其视为更改)。然后我将插件符号链接(symbolic link)到插件目录中。

这就是我开始遇到问题的地方。如果我从我的 foo 插件引用位于我的核心项目中的模块:

var someCoreModule = require('../core/someModule');

如果它来自“/plugins/foo/someFoo.js”,并且它会上升一个目录,该目录会从插件在文件系统上实际存在的位置上升一个目录,而不是从符号链接(symbolic link)所在的位置上升一个目录。从 Nodejs 的角度来看,这似乎是正确的结果。

问题是我如何将一些东西放入我的插件目录中,该目录本身就是一个 git 存储库,但不让主服务器存储库跟踪“插件”存储库?

我想我可以用 gitignore 做一些事情,但想知道对于这种类型的简单插件架构是否有更优雅的解决方案。

最佳答案

我在 Node 中实现插件模式的方法是使用 peer-dependencies package.json 中的字段。这允许我将核心包与插件包一起发布到 npm,这些插件包将核心包列为对等依赖项。

对等依赖项必须并行安装,而不是嵌套在包的 node_modules 目录中。不确定这是否对您的具体情况有帮助,但我认为它比符号链接(symbolic link)或 git 子模块等更优雅。You can list github repos as dependencies as well如果您不想发布到 npm。

看看我的shotgun-client包的 package.json 文件。它列出了我的核心shotgun模块作为对等依赖项。如果用户运行 npm install shotgun-client,他们还将同时安装 shotgun。所以,而不是这个:

/
--/node_modules
----/shotgun-client
------/node_modules
--------/shotgun

你最终会得到这样的结果:

/
--/node_modules
----/shotgun-client
----/shotgun

通过这样做,您始终可以确定目录结构。您只需向上一级进入安装它们的 node_modules 文件夹,然后返回到您的核心包或任何插件包。

另外,npm install some-plugingit clone some-plugin-repo-url 更酷,然后必须将其符号链接(symbolic link)到 plugins 目录。我想说前者更直观:)

此外,消除对符号链接(symbolic link)的需要将使您的包可以毫无问题地在 Windows 上运行。

关于node.js - 如果您指向符号链接(symbolic link),则 require 会变得困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23477036/

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