gpt4 book ai didi

javascript - 在VSCode中解决工作区中的npm依赖关系?

转载 作者:行者123 更新时间:2023-11-30 06:12:46 30 4
gpt4 key购买 nike

我来自Java世界,并且曾经使用Maven和Eclipse进行编码,因为IDE + M2Eclipse插件能够resolve dependencies from the workspace,因此使用本地依赖项非常容易。

现在,我正在使用NPM和VS Code在JavaScript中进行开发,我发现您必须使用手动选项(例如npm link + npm build --watchnpm pack + npm install <path>)来处理本地依赖项。

我正在开发一个Angular应用程序,其代码库分为不同的Git项目和npm软件包,因此我们浪费大量时间测试本地依赖项,而且它容易出错。

我猜这是由JavaScript和Npm的不同性质引起的,但是,是否有任何插件或选项可以简化VS Code中的本地开发?

编辑:我看过this article about Yarn Workspaces,它看起来像我在寻找... npm中有任何相似之处吗?我看到Lerna是一个选项,但是仅对于monorepos,我为每个库分离了Git repos。

EDIT2:为澄清问题,可以说我正在开发两个Angular库,每个库都在不同的Angular工作区中。库A依赖于库B。我使用VS Code工作区同时打开这两个Angular工作区并一起编辑它们。如果更改库B,则必须对其进行构建和链接,以便在发布前可以在库A中本地测试更改。这就是“从工作空间中解决依赖关系”在Java的Eclipse + M2Eclipse中解决的问题,IDE只是将项目构建并链接在一起。那就是我在Angular的VS Code + NPM中寻找的东西。

最佳答案

您是否考虑过使用NPM收缩包装?
https://docs.npmjs.com/cli/shrinkwrap

这可以简化依赖性测试,并消除由于软件包版本更改而导致的错误,因为除非您希望更改,否则它们不会更改。

编辑
根据附加信息进行更新,并详细说明为什么NPM收缩包装可能是答案。

当您没有收缩包装打包的依赖项时,您可能已经锁定了直接依赖项的版本,但是这些依赖项通常会拥有自己的依赖项,并且这些依赖项通常是依赖项范围。

我已经看到一些接近1000个软件包/版本依赖项组合的软件包。

因此,NPM将必须访问Internet以检查所有这些子依赖项范围,以查看是否有仍符合范围要求的新版本,然后下载并安装它们。

如果您在npm install时收缩了项目,则不必执行此版本检查可能的1000个依赖项和子依赖项,因为您可能已经在机器上安装了一次,因此所需的所有软件包都已放入其中。 NPM缓存,因此将不会下载任何内容。

因此,要做的工作少于拥有本地Maven存储库的工作量,并且每个软件包/版本组合都比Maven本地存储库快。

简短答案
与您的Maven解决方案最接近的等效方法是运行您自己的NPM注册表。

正如我之前评论的那样,NPM是基于服务(数据库)的存储库模型,而Maven是基于文件系统(远程或本地)的模型。

虽然设置您自己的注册表并不难,但是使用Maven则要困难得多(我已经在企业环境中设置并维护了NPM,Nuget和Maven本地存储库)。但是,很难但并非不可能的是将软件包从NPM的注册表导入到您自己的注册表中,除非您出于其他原因在企业环境中进行操作,否则这是不值得的。

可能的其他选项
创建一个本地工作区npmrc配置文件。

然后,您可以设置诸如offlineprefer-offline(https://docs.npmjs.com/misc/config)之类的选项来限制网络操作,并更多地依赖NPM缓存。

收缩包装的其他好处
如果不使用每个子依赖项版本进行锁定,则可能会使用可能未在您的直接依赖项中发现的错误来更新某个版本,这可能会破坏您的功能。

如果您具有单独的开发,测试和部署环境,则有可能不会测试开发的内容,甚至可能会部署未经测试的版本。

关于javascript - 在VSCode中解决工作区中的npm依赖关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57934018/

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