我是grunt和npm的新手 . 所以我在网站'http://tech.pro/tutorial/1190/package-managers-an-introductory-guide-for-the-uninitiated-front-end-developer#front_end_developers'上尝试了一些"cookbook-example" . 您现在不必看那里,但我认为分享网站可能会很好 . 到目前为止一直很好,直到全球安装 . (好吧,我必须弄清楚一些错误,但现在我已经工作了npm) .
当谈到尝试在全球范围内安装某些东西时,我会陷入困境 .
到目前为止我为测试全局安装一些软件包做了什么:
-
创建了测试目录
grunttest
-
在该目录中:
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,应该没问题,因为刚才说上次安装后资源没有被修改(几分钟前) .
Checking if the jshint exists with:
`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**
Questions:
-
为什么我得到npm ERR!无关的......?
-
这是什么意思?
-
如何解决此问题?
Information:
我在Windows 7机器上,使用cygwin作为shell . 试图只是jshint( jshint someTestfile.js
)当然不起作用 .
Meru,提前谢谢
7 回答
我通过结合所有答案解决了这个问题 . 起初我在全球安装了这个包 .
由于npm安装了这个打包全局但没有将它添加到我的本地package.json文件,我不得不做一些事情 .
我选择了删除本地解决方案然后全局安装的解决方案 .
这样我没有更多的警告,也不会搞砸package.json文件 .
这是因为您的包不在package.json中 . 如果你添加它,问题就会解决,请看下面的图片:
我的情况,我看到这个'npm ERR!当我做'npm ls'时,在我的cygwin终端中发出了无关的信息 . 我认为这是一种全局损坏的设置,经过大量的修补 . 我在这里了解到以下观察:
'npm ls'根据您当前的文件夹位置提供不同的输出 .
'npm ls'尝试检测当前文件夹位置中是否存在'node_modules'文件夹,并列出这些内容 . 不是全球性的!
此外,如果包含'node_modules'的当前文件夹也包含此处列出的较少模块的package.json文件,则会显示错误 .
我是'package.json'和'npm ls'不再显示错误信息 . 所以我说,总是检查当前位置是否存在'node_modules'文件夹和package.json文件,因为这些文件在检查中优先排序,如果缺少这些文件,则检查继续到父文件夹,依此类推,如果你已经修改了很多代码片段,那么你可能已经分散了很多很多的node_modules文件夹和package.json文件 . 这里没有任何东西真正被破坏,不像我们在进行J2EE Java开发/ eclipse IDE时所经历的那些经历,或者在我们必须使用regedit来更改Windows中的设置时 .
1和2:这意味着您没有在项目的package.json文件中列出jshint,但它是全局安装的 . 所以这不是一个大问题 .
3:为避免此 extraneous 错误,您可以使用选项
--save
运行或重新运行安装 . 这将自动更新package.json文件:或者需要使用
"dependencies": {...}
手动更新package.json文件我通过在父包的文件夹中执行
npm update
来解决这个问题,该文件夹从列表中删除了一些无关的包,然后为剩下的几个包做了npm uninstall <package>
.似乎有效,因为我这样做后没有错误 .
npm ERR! extraneous
表示已安装软件包,但未在项目的package.json
中列出 .既然你会给你很多无关的错误,可以简单地忽略,因为全局安装的大多数东西都不会出现在你的项目中
package.json
.在我的情况下,这是因为其
package.json
文件中的包名称与依赖模块的package.json
中列出的依赖项名称不同 . 我的错误,因为它提供了任何线索 .这种情况发生在使用
dependencies: { "my-module": "file:local-modules/mymodule" }
语法时,名称为"my-module"的拼写错误 .