当前位置: 首页 > 知识库问答 >
问题:

javascript - 在实际开发中怎么才能在vendor下这样进行"软连接"一个开源的三方库?

西门飞星
2024-07-17

我们在GitHub经常看到有这样的结构:
在三方库下面依赖一个三方库:
image.png

我们可以看到这里就像一个软连接一样加载的三方库(还指定了版本)

请问我们在实际开发中如何这样做到呢?
比如,在VSCode中我怎么才能在vendor下这样进行"软连接"一个开源的三方库?
这个叫什么操作呢(应该有一个专业名词来描述此功能)?

共有3个答案

余靖
2024-07-17

这个在git上是 submodule,你找下相关资料,可以在你自己的仓库下添加别的库作为自己的子module

尉迟阳煦
2024-07-17

你可以了解一下git submodule项目子模块 你可以看一下相关文档
https://blog.csdn.net/u013013938/article/details/130662112

那铭
2024-07-17

在实际开发中,将开源的三方库“软连接”到项目的vendor目录(或者任何自定义的目录)通常指的是使用某种形式的符号链接(在Unix/Linux系统中)或者类似的功能(在Windows系统中)。然而,在现代的Go语言项目中,更常见的做法是使用依赖管理工具(如depglidegovendorgo modules等)来管理项目的依赖。

从Go 1.11版本开始,官方推荐使用go modules来管理依赖。go modules允许你定义项目的依赖项,并将它们存储在项目的go.modgo.sum文件中,而不是将它们复制到vendor目录。但是,如果你确实需要将依赖项复制到vendor目录,你可以使用go mod vendor命令。

但是,你的问题中的描述似乎指的是某种版本的软连接,这在Go中并不直接支持。不过,你可以通过以下步骤来模拟这种行为:

  1. 使用go get安装或更新依赖项

    go get github.com/someuser/somepackage@v1.2.3

    这将下载并安装指定版本的包到Go的GOPATHGOBIN目录下的pkg/mod目录中。

  2. 创建vendor目录(如果尚未存在):

    mkdir -p vendor
  3. 使用ln -s(在Unix/Linux系统上)创建符号链接
    由于Go不支持在vendor目录下直接创建对pkg/mod中包的符号链接,你需要手动复制或创建占位符文件,并可能需要在构建过程中进行特殊处理。但是,如果你只是想在文件系统级别模拟这种行为,你可以这样做(注意,这通常不推荐用于Go项目,因为它可能不会被Go的构建系统识别):

    ln -s $GOPATH/pkg/mod/github.com/someuser/somepackage@v1.2.3 vendor/github.com/someuser/somepackage

    但是,请注意,$GOPATH/pkg/mod的结构可能会随着Go的版本和依赖管理工具的不同而有所变化,因此上述路径可能需要根据实际情况进行调整。

  4. 在Windows上模拟符号链接
    在Windows上,你可以使用mklink命令来创建符号链接或目录链接(类似于Unix/Linux的ln -s)。但是,请注意,Windows的文件系统对符号链接有一些限制,并且可能需要管理员权限来创建它们。

专业名词

  • 在Unix/Linux系统中,这种链接通常被称为符号链接(Symbolic Link)或软链接(Soft Link)。
  • 在Windows系统中,类似的功能是通过目录链接(Directory Junction)或符号链接(Symbolic Link)来实现的。
  • 在Go的上下文中,使用go mod vendor将依赖项复制到vendor目录的行为被称为vendoring。但是,这不是软连接,而是物理复制。

最后,再次强调,对于Go项目,通常建议使用go modules来管理依赖项,而不是手动创建符号链接或复制文件到vendor目录。

 类似资料:
  • 有什么方法可以简化这段代码吗?我正好有一个白色的一块,想要得到它的位置 代码: 瓦片类: 件类:

  • https://app.betatiktok.com/ (需要墙才能打开) 我下载下来是一个和tiktok一模一样的app,甚至里面的数据都和tiktok是同步的,问题是这是一个单独独立的app,他是怎么做到和现在的tiktok数据同步的?是tiktok有相应的接口,还是什么?有人知道吗?

  • 输入: 第一行:两个空间分隔的整数N和Q,分别表示数组A中的元素数和查询数 第二行:N个表示数组元素的分隔整数

  • 我对Android比较陌生。我对Android中用于网络通信的2个API的功能有一个非常基本的困惑。 打开连接() 连接() 从 conn.connect() 中可以看出,连接 () 是实际创建连接的内容。 来自url时。openConnection()看起来openConnection实际上创建了连接。 在围绕SO主题的一些讨论中,conn.connect()支持前者,其中4张赞成票表示答案wh

  • 使超链接在 中可单击是微不足道的。您只需在IB的视图上设置“检测链接”复选框,它就会检测HTTP链接并将其转换为超链接。 然而,这仍然意味着用户看到的是“原始”链接。RTF文件和HTML都允许你设置一个用户可读的字符串,在它的“后面”有一个链接。 将属性化文本安装到文本视图(或或,就此而言。)但是,当属性化文本包含链接时,它是不可单击的。 有没有办法让用户可读的文本可以在、或中单击? SO上的标记