在 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);
});
});