从npm缓存需要NPM模块

时间:2016-12-03 22:22:17

标签: node.js npm npm-install yarnpkg

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

1 个答案:

答案 0 :(得分:1)

我一直在问自己同样的问题。如果我有一个package.json包含我需要的所有依赖项以及我需要的所有开发依赖项,那么为什么我要再次这样做并且让自己感到困惑并且得到配置疲劳'? 有一种方式,我确定,但每当我尝试使用package.jsonwebpack.config.js从我建造的任何地方而不是预定的位置访问时,它无论是部分还是根本不起作用。

此外,樱桃挑选你的node_modules文件夹的内容可能会导致奇怪的问题,所以我不会把它弄得一团糟。

只需使用:

  

npm install [依赖项,开发工具,以及你需要的任何东西]

你应该很甜蜜。

无需传递最佳配置 - 只需随身携带npm安装命令即可随意复制和粘贴。