gpt4 book ai didi

javascript - require ('atom' ) 如何工作?

转载 作者:行者123 更新时间:2023-11-29 21:24:20 26 4
gpt4 key购买 nike

Atom 公开了一些您可以从 require('atom')

访问的全局 API

这在功能上是如何工作的? Atom 包没有明确地将 atom 作为依赖项,但它们仍然可以这样做。此外,如何在我自己的 Electron 应用程序中使用我自己的全局包执行此操作?

最佳答案

我亲自检查并分析了 Atom 的源代码以确定这是如何发生的,这就是我得出的结论。

使用 normal node require 需要 Atom 包.然而,根据apm自述文件:

The other major difference is that Atom packages are installed to ~/.atom/packages instead of a local node_modules folder...

因此 require('atom') 包不像普通 Node 模块那样从父 node_modules 目录中检索。相反,Atom 覆盖模块加载器以稍微改变行为。

更具体地说,它们会覆盖 Module._resolveFilename像这样:

Module = require 'module'

Module._resolveFilename = (relativePath, parentModule) ->
resolvedPath = resolveModulePath(relativePath, parentModule)
resolvedPath ?= resolveFilePath(relativePath, parentModule)
resolvedPath ? originalResolveFilename(relativePath, parentModule)

在默认为正常行为之前,它会尝试使用自己的模块缓存逻辑解析模块的路径。据我所知,这样做有几个原因。

  1. 它允许他们对内置模块(如 'atom')的路径进行硬编码,即使正常行为永远找不到它。
  2. 当包与兼容版本具有相同的依赖关系时,它可以防止加载包依赖关系两次。如果 packageA 加载 lodash@4.x.x 并且稍后 packageB 尝试加载 lodash@>=3,那么 Atom 介入并为 packageB 提供 packageA 加载的 lodash。

关于javascript - require ('atom' ) 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37892524/

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