提问者:小点点

本地NPM模块未正确安装


本地NPM模块不再在我的项目节点\u modules dir中为我正确安装。这才刚刚开始。

我用package.json设置了一个测试dir:

{
    "name": "test",
    "version": "0.0.0"
}

然后运行以下命令:

npm install grunt --save-dev

这是我在node_modules dir中得到的:

打开grunt目录,您可以看到没有节点\u模块:

根目录中出现的一些NPM模块似乎是属于grunt NPM模块的NPM模块,有些我不知道它们来自哪里?例如abbrev、esprima、优雅的fs等。

我过去常常这样:

project
│
└───node_modules
|   │
|   └───grunt
|
└───package.json

我已尝试完全删除节点。我的机器(Mac OS X 10.10.5)中的js和NPM按照以下说明进行操作。然后在Homebrew之外重新安装它(它以前安装的地方),这并没有改变任何东西。然后完全移除节点。再次使用js和NPM并用自制软件重新安装,但这次我应用了这个。同样,这并没有解决任何问题。

不知道发生了什么事?


共1个答案

匿名用户

这是预期行为。当你安装grunt时,npm会递归地安装它的所有依赖项。这些可以放在咕噜声/node_modules,或者可以放在与咕噜声相同的级别(直接在顶级node_modules)。这两个选项都可以工作,这是因为节点的工作方式:如果grunt需要一些包(例如颜色),而节点在grunt的node_modules目录中找不到它,节点会尝试在父目录中找到包,然后在祖父母目录中找到包,以此类推...

在这两个选项中,较旧的npm版本更喜欢第一个选项,较新的版本更喜欢第二个选项(即更扁平的依赖关系树),这正是您的情况。

在您的例子中,“async”或“colors”等包是grunt依赖项(请查看其package.json),“abbrev”不是grunt的直接依赖项,但可能是其他依赖项的依赖项。

更多阅读:

https://docs.npmjs.com/cli/dedupe

https://github.com/alexanderGugel/ied

https://docs.npmjs.com/cli/shrinkwrap