【发布时间】: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