【问题标题】:requiring NPM module from npm cache需要来自 npm 缓存的 NPM 模块
【发布时间】:2023-03-05 15:37:01
【问题描述】:

在 OSX/*nix 上,~/.npm 目录包含 npm 缓存,其结构似乎如下:

foo/
  0.1.2/
  1.0.01/
  1.3.34/
  2.0.1/
bar/
  0.3.8/
  2.1.1/
baz/
  3.2.1/
  4.1.7/

我想知道我们是否可以要求此目录中的模块目录。我确信这完全违背了 NPM 理念,但只是想知道最简单的方法是什么。

我想更改 NODE_PATH 以使用 ~/.npm 目录是可能的,但 ~/.npm 目录似乎有不同的结构,所以不确定require() 是否可以使用。

我们看到像Yarn 这样的新包管理器正在努力改进NPM。在我看来,直到今天我仍然很困惑为什么 NPM 不只是使用 .npm 缓存来引用依赖项(为什么要在项目目录中本地重写它们?),但也许有人可以解决这个问题。

我的最终目标是找到一种方法,将 Babel、Istanbul 等巨大的依赖项放在磁盘上的一个位置,并在任何地方引用该位置(至少对于同一用户而言)。使用 NVM 之类的工具,全局模块位置 (npm root -g) 会发生变化,因此最好使用 $HOME 目录中的内容,并且由于 .npm 缓存已经存在,它提供了一种可能性。

除了操纵 NODE_PATH 以使用 ~/.npm 目录(我刚刚尝试过, ~/.npm 的目录结构似乎排除了这一点),另一种解决方案可能是以编程方式使用 npm。

类似这样的:

const npm = require('npm');
npm.load({
    loaded: false
}, function (err) {
  // catch errors
  npm.commands.install(['babel','istanbul'], function (er, data) {
    // log the error or data
  });
  npm.on('log', function (message) {
    // log the progress of the installation
    console.log(message);
  });
});

【问题讨论】:

  • 如果你有一个projects/ 目录,你可以在该目录的node_modules 和每个包含require() 的子目录中安装东西到父node_modules 中的模块应该 能够访问它(参见the Node docs)。这是否接近您的需要,还是您特别希望缓存成为源?

标签: node.js npm npm-install yarnpkg


【解决方案1】:

我一直在问自己同样的问题。如果我有一个package.json,其中包含我需要的所有依赖项以及我需要的所有开发依赖项,那么我为什么要再次这样做并让自己感到困惑并获得“配置疲劳”? 有一种方法,我敢肯定,但每次我尝试使用package.jsonwebpack.config.js 从我构建它时的预期位置以外的任何地方访问时,它都部分或根本不起作用。

另外,从node_modules 文件夹的内容中挑选出你的node_modules 文件夹的内容可能会导致奇怪的问题,所以我不会亲自处理它。

只需使用:

npm install [依赖项、开发工具和您需要的任何东西]

你应该很可爱。

无需传递您的最佳配置 - 只需将您的 npm install 命令放在手边即可随意复制和粘贴。

【讨论】:

  • 您的第一个答案做得很好!我刚刚对格式进行了一些调整,并删除了一些有点切线的 cmets,但除此之外,这是一个有趣的解释。请务必查看我所做的更改,以便了解网站上的预期内容,以便其他人能够很好地接受您的问题。
猜你喜欢
  • 1970-01-01
  • 2017-09-04
  • 2013-03-20
  • 2016-08-02
  • 2015-11-20
  • 2015-12-09
  • 1970-01-01
  • 1970-01-01
  • 2011-09-21
相关资源
最近更新 更多