npm Windows全局安装会导致npm ERR!外来的


121

我是新来的咕unt和npm。所以我想一些“菜谱,例如”网站“上http://tech.pro/tutorial/1190/package-managers-an-introductory-guide-for-the-uninitiated-front-end-developer#front_end_developers ” 。您不必现在就去那里,但我认为共享该站点可能会很好。到目前为止,到目前为止,它还涉及到全局安装。(好吧,我必须弄清楚一些错误,但是现在我可以使用npm了)。

说到试图在全球范围内安装某些东西的问题,我陷入了困境。

到目前为止,我为在全球范围内安装某些软件包进行了测试:

  1. 创建的测试目录 grunttest

  2. 在该目录内:

    npm install -g jshint

输出我可以看到:

 npm http GET https://registry.npmjs.org/jshint
 npm http 304 https://registry.npmjs.org/jshint
 ...
 npm http 304 https://registry.npmjs.org/string_decoder
 C:\Program Files\nodejs\node_modules\npm\jshint -> C:\Program Files\nodejs\node_modules\npm\node_modules\jshinnt
 jshint@2.4.4 C:\Program Files\nodejs\node_modules\npm\node_modules\jshint
 ├── console-browserify@0.1.6
 ├── exit@0.1.2
 ├── underscore@1.4.4
 ├── shelljs@0.1.4
 ├── minimatch@0.2.14 (sigmund@1.0.0, lru-cache@2.5.0)
 ├── cli@0.4.5 (glob@3.2.9)
 └── htmlparser2@3.3.0 (domelementtype@1.1.1, domutils@1.1.6, domhandler@2.1.0, readable-stream@1.0.26-2)

我刚刚意识到304,应该可以,因为只是说自上次安装(几分钟前)以来未对资源进行修改。

检查jshint是否存在:

`npm -global list`

输出:

npm@1.4.3 C:\Program Files\nodejs\node_modules\npm
├── abbrev@1.0.4
├── ansi@0.2.1
├─...
├──
├── graceful-fs@2.0.2
├── inherits@2.0.1
├── ini@1.1.0
├─┬ init-package-json@0.0.14
│ └── promzard@0.2.1
├─┬ jshint@2.4.4 extraneous
│ ├─┬ cli@0.4.5
│ │ └─┬ glob@3.2.9
│ │   └── inherits@2.0.1
│ ├── console-browserify@0.1.6
│ ├── exit@0.1.2
│ ├─┬ htmlparser2@3.3.0
│ │ ├── domelementtype@1.1.1
│ │ ├── domhandler@2.1.0
│ │ ├── domutils@1.1.6
│ │ └─┬ readable-stream@1.0.26-2
│ │   └─... ├── text-table@0.2.0
├── uid-number@0.0.3
└── which@1.0.5

**npm ERR! extraneous: jshint@2.4.4 C:\Program Files\nodejs\node_modules\npm\node_modules\jshint npm**

问题:

  1. 为什么我会收到npm ERR!外来的...?
  2. 这是什么意思?
  3. 我该如何解决这个问题?

信息:

我在Windows机器Windows 7上,使用cygwin作为外壳。尝试仅使用jshint(jshint someTestfile.js)当然是行不通的。

在此先感谢Meru

Answers:


208

npm ERR! extraneous表示已安装软件包,但未在项目的中列出package.json

由于您列出的是已全局安装的软件包,因此会给您带来很多无关的错误,这些错误可以被忽略,因为大多数全局安装的东西都不会出现在您项目的中package.json


1
嗨!感谢你的回答。这是否也意味着我应该能够执行“ jshint”,对吗?
Meru 2014年

正确。运行jshint myfile.js应在上运行jshint myfile.js
凯尔·罗宾逊

1
啊,我明白了。有了Grunt,一切都会完成任务。您将在中加载并配置grunt-contrib-jshint任务Gruntfile.js。全局安装的唯一一件事就是npm i grunt-cli -g使您可以运行grunt命令来运行Gruntfile.js。有关更多信息,请参见本指南:gruntjs.com/getting-started
凯尔·罗宾逊Young

8
如果您有多余的库保存在本地(不是全局),则可以npm prune删除它们。
krx

2
@KyleRobinsonYoung:在回答中提到这个怎么样。您可以使用npm prune --your-env
geek_guy 2015年

21

1和2:这意味着您的项目的package.json文件中没有列出jshint,但它已全局安装。因此,这不是一个大问题。

3:为避免此无关的错误,您可以使用选项运行或重新运行安装--save。这将自动更新您的package.json文件:

npm install -g jshint --save

或需要手动更新您的package.json文件 "dependencies": {...}


在ma情况下仅适用于本地,而没有全局重复
BG BRUNO 2015年

2
--save与不能一起使用-g。全局软件包列表中没有package.json。
Guido Bouman

5

我通过npm update在父程序包的文件夹中执行一个操作来解决此问题,该程序从列表中删除了一些无关的程序包,然后npm uninstall <package>对其余的一些程序做了。

似乎奏效了,因为这样做后我没有收到任何错误。


3

我通过结合所有答案解决了它。首先,我在全球范围内安装了该软件包。

npm install -g packagename --save

由于npm也在全球范围内安装了此打包文件,但没有将其添加到本地的package.json文件中,因此我不得不对此做一些事情。

我选择了删除本地解决方案然后在全局安装的解决方案。

npm uninstall packagename
npm install -g packagename

这样,我不再有警告,也不会弄乱package.json文件。


加100。我必须在本地卸载并在全局安装。
Collin Peters

1

我的情况是,我看到了这个'npm ERR!当我执行“ npm ls”时,在我的Cygwin终端中显示了“无关”消息。我认为这是经过大量修补后的某种全球损坏的设置。我在这里了解以下观察:

  • 根据您当前的文件夹位置,'npm ls'提供不同的输出。
  • 'npm ls'尝试检测当前文件夹位置中是否存在'node_modules'文件夹,并列出其中的内容。不是全球的!
  • 此外,如果当前包含“ node_modules”的文件夹中还有一个package.json文件,其中包含的模块数在此处列出,那么该错误就会显示出来。

我'rm package.json'和'npm ls'不再显示错误消息。因此,我要说,总是检查当前位置是否存在“ node_modules”文件夹和package.json文件,因为它们在检查中排在第一位,如果丢失,检查将继续到父文件夹,依此类推,如果您修改了很多代码片段,那么您可能分散在很多node_modules文件夹和package.json文件中。与在进行J2EE Java开发/ eclipse IDE时或必须使用regedit更改Windows中的设置时所经历的体验不同,这里没有任何损坏。


1

在我的情况下,这是因为其package.json文件中的软件包名称package.json与从属模块的列出的依赖名称不同。我的错误,因为这是我创建的新模块,但很难发现,因为npm无法提供任何线索。

这在使用dependencies: { "my-module": "file:local-modules/mymodule" }语法时发生,在名称“ my-module”中有错字。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.