【问题标题】:npm windows install globally results in npm ERR! extraneousnpm windows install global 导致 npm ERR!无关的
【发布时间】:2014-05-02 10:56:43
【问题描述】:

我是 grunt 和 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 作为 shell。 尝试只使用 jshint (jshint someTestfile.js) 当然是行不通的。

提前致谢,梅鲁

【问题讨论】:

    标签: windows gruntjs npm


    【解决方案1】:

    npm ERR! extraneous 表示安装了一个包,但未在项目的package.json 中列出。

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

    【讨论】:

    • 嗨!感谢您的回答。这是否也意味着我应该能够执行“jshint”,对吗?
    • 正确。运行 jshint myfile.js 应该在 myfile.js 上运行 jshint。
    • 啊,我明白了。使用 Grunt,一切都通过任务进行。您将在Gruntfile.js 中加载和配置grunt-contrib-jshint 任务。全局安装的唯一东西是npm i grunt-cli -g,它允许您运行grunt 命令来运行Gruntfile.js。有关更多信息,请参阅本指南:gruntjs.com/getting-started
    • 如果您在本地(不是全局)保存了无关的库,您可以运行 npm prune 来删除它们。
    • @KyleRobinsonYoung:在回答中提到这个怎么样。您可以使用 npm prune --your-env 删除所有未使用的包
    【解决方案2】:

    1 & 2:这意味着您的项目的 package.json 文件中没有列出 jshint,但它是全局安装的。所以问题不大。

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

    npm install -g jshint --save
    

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

    【讨论】:

    • 在 ma 情况下仅适用于本地,没有全局重复
    • --save 不能与 -g 一起使用。全局包列表没有 package.json。
    【解决方案3】:

    我通过在父包的文件夹中执行npm update 解决了这个问题,该文件夹从列表中删除了一些无关的包,然后为剩余的几个执行了npm uninstall <package>

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

    【讨论】:

      【解决方案4】:

      我通过结合所有答案解决了这个问题。起初我在全球范围内安装了这个包。

      npm install -g packagename --save
      

      由于 npm 也在全球范围内安装了这个打包文件,但没有将它添加到我的本地 package.json 文件中,我不得不对其进行一些处理。

      我选择的解决方案是去掉本地的,然后全局安装。

      npm uninstall packagename
      npm install -g packagename
      

      这样我就没有更多的警告,也不会弄乱 package.json 文件。

      【讨论】:

      • Plus 100。我必须在本地卸载并全局安装。
      【解决方案5】:

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

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

      我的“rm package.json”和“npm ls”不再显示错误消息。所以我说,总是检查当前位置是否存在 'node_modules' 文件夹和 package.json 文件,因为这些在检查中优先考虑,如果这些缺失,检查将继续到父文件夹,依此类推,如果你已经修改了很多代码 sn-ps,那么你可能已经分散了很多 node_modules 文件夹和 package.json 文件。与我们在进行 J2EE Java 开发/eclipse IDE 或我们必须使用 regedit 更改 Windows 中的设置时所拥有的经验不同,这里没有真正损坏。

      【讨论】:

        【解决方案6】:

        这是因为你的包不在你的 package.json 中。如果添加了,问题就解决了,请看下图:

        【讨论】:

          【解决方案7】:

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

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

          【讨论】:

            猜你喜欢
            • 2021-07-29
            • 1970-01-01
            • 1970-01-01
            • 2021-06-29
            • 2019-07-28
            • 1970-01-01
            • 1970-01-01
            • 2019-04-21
            • 1970-01-01
            相关资源
            最近更新 更多