【问题标题】:How to update npm modules, ignoring a git repo如何更新 npm 模块,忽略 git repo
【发布时间】:2015-02-06 01:04:34
【问题描述】:

我 fork 了一个 npm 模块,现在它是一个 git repo。

所以我的 package.json:

"dependencies": {
    "some-module": "git+https://github.com/my-name/some-module.git",
}

通过获取上游和合并来同步分叉存储库。 但是当我尝试更新其他 npm 模块时,它给出了错误:

npm ERR! git Appears to be a git repo or submodule.
npm ERR! git     /Users/.../node_modules/some-module
npm ERR! git Refusing to remove it. Update manually,
npm ERR! git or move it out of the way first.

npm ERR! System Darwin 13.4.0
npm ERR! command "node" "/usr/local/bin/npm" "update"
npm ERR! cwd /Users/...
npm ERR! node -v v0.10.32
npm ERR! npm -v 1.4.28
npm ERR! path /Users/.../node_modules/some-module
npm ERR! code EISGIT
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/.../npm-debug.log
npm ERR! not ok code 0

更新时有什么方法可以忽略 git repo 吗?还是跳过这个错误?

【问题讨论】:

    标签: git npm


    【解决方案1】:

    npm 检查所有目录是否存在.git 目录,如果存在则抛出EISGIT 错误,因此无法忽略或跳过它。

    code 会检查它是否是链接:

    mod.parent && !mod.isLink && [checkGit, mod.realpath],
    

    所以我能够通过将模块符号链接到 node_modules 来使其工作。

    $ ln -s ../some-module node_modules
    

    【讨论】:

    • 以下任一方法在 Windows 中对我有用:mklink /D "node_modules/some-module" "../some-module"mklink /J "node_modules/some-module" "../some-module"
    • 在我的例子中,我使用 Watchman Links (WML) 来模拟 git 托管库和 React Native 项目之间的符号链接。我只是从 WML 链接中排除了 .git 文件夹,并从 RN 项目的 node_modules 中的 lib 中删除了 .git。 Npm 安装/更新按预期工作。
    • 我也尝试将我的模块文件夹符号链接到 node_modules 目录,但是当我尝试安装新模块时仍然出现错误:enoent ENOENT: no such file or directory, stat '/Volumes/Web-项目/_intern/marten/my-project/node_modules/my-module'
    • 你现在是我的个人英雄 ln -s 完美地完成了这项工作
    • 很高兴阅读该代码,谢谢! @MartenZander 您在应用程序根文件夹中创建了符号。移入 node_modules,然后在 ln -s 中使用相对路径。
    【解决方案2】:

    是的,有一种方法可以跳过错误。

    1) 打开文件“C:\Program Files\nodejs\node_modules\npm\node_modules\npm-install-checks\index.js”
    2)在最底部注释掉这段代码:

    if (!er && s.isDirectory()) {
      var e = new Error(folder + ': Appears to be a git repo or submodule.')
      e.path = folder
      e.code = 'EISGIT'
      return cb(e)
    }
    

    完成。

    背景

    来自另一个长期对这个错误感到沮丧的开发人员;由于各种系统的限制,建议的解决方案都不适用于我的情况。

    建议:NPM 使用符号链接,因此从 node_modules 创建模块的符号链接到您的库 repo 文件夹。
    问题:那么Watchman没有扫描里面的JS文件。

    建议:执行“npm publish”和“npm install”。每一个。单身的。时间。
    问题:快速开发测试/周期很糟糕,并且在 npm 目录中发送了数百个从未使用过的版本。

    建议:使用 Watchman 链接 (WML)。 (即文件更改时目录自动复制)
    问题:对于我机器上包含的所有存储库,必须始终运行一个后台程序。此外,这意味着我无法直接在 node_modules 文件夹中打开文件以进行快速更改;相反,我每次都必须去图书馆的源代码库。这通常很好,但有时最好在程序仓库中进行更改,并将其反映在库仓库中,反之亦然。

    我的解决方案

    是的,通过上述更改,我可以使用库目录的硬链接克隆并避免上述问题。

    我用它来创建目录级硬链接克隆:http://schinagl.priv.at/nt/hardlinkshellext/linkshellextension.html#hardlinkclones

    这种方法的一个问题是,每当我在库中添加或删除文件时,我都必须重新运行硬链接克隆。但至少在现有文件中进行更改时,我不必做任何事情。 (这要痛苦得多)

    【讨论】:

      【解决方案3】:

      我在执行 npm install library 时也遇到了这个问题,我能够通过从错误消息中提到的相应 library_name 中删除 .git 目录(隐藏在 node_modules/library_name 中)来解决它。

      还要确保不要从项目根目录中删除 .git directory,因为如果从项目根目录中删除 .git 目录,您将丢失与 git 相关的信息,例如分支信息等

      感谢bolav 提供了有关如何引发 EISGIT 错误的详细说明。

      【讨论】:

      • 你拯救了我的一天。这行得通。对于不知道如何删除的其他人,请键入以下代码: rm -rf .git 确保您在正确的模块文件夹中。
      • 我的模块中有.github repo、.gitattributes.gitignore。但我没有.git。我应该删除其中提到的任何内容吗?
      • 检查了 node_modules/liberary 名称中的 .git 文件吗?它可能是一个隐藏文件......不要删除任何其他文件,只删除节点模块/库名称中的.git文件......
      【解决方案4】:

      KISHOREs-MBP:dummyReactNativeProject simpro$ npm install --save react-native-gesture-handler npm 错误!路径 /Users/simpro/Desktop/Kishore/dummyReactNativeProject/node_modules/react-native-safe-area-view npm 错误!代码 EISGIT npm 错误! git /Users/simpro/Desktop/Kishore/dummyReactNativeProject/node_modules/react-native-safe-area-view:似乎是一个 git repo 或子模块。 npm 错误! git /Users/simpro/Desktop/Kishore/dummyReactNativeProject/node_modules/react-native-safe-area-view npm 错误! git 拒绝删除它。手动更新, npm 错误! git 或者先把它移开。

      npm 错误!可以在以下位置找到此运行的完整日志: npm 错误! /Users/simpro/.npm/_logs/2019-05-10T10_29_18_510Z-debug.log KISHOREs-MBP:dummyReactNativeProject simpro$ rm -rf .git KISHOREs-MBP:dummyReactNativeProject simpro$ npm install --save react-native-gesture-handler npm 错误!路径 /Users/simpro/Desktop/Kishore/dummyReactNativeProject/node_modules/react-native-safe-area-view npm 错误!代码 EISGIT npm 错误! git /Users/simpro/Desktop/Kishore/dummyReactNativeProject/node_modules/react-native-safe-area-view:似乎是一个 git repo 或子模块。 npm 错误! git /Users/simpro/Desktop/Kishore/dummyReactNativeProject/node_modules/react-native-safe-area-view npm 错误! git 拒绝删除它。手动更新, npm 错误! git 或者先把它移开。

      npm 错误!可以在以下位置找到此运行的完整日志: npm 错误! /Users/simpro/.npm/_logs/2019-05-10T10_33_07_251Z-debug.log

      我在安装 react-native-gesture-handler 时也遇到了同样的问题。 然后我从节点模块中删除了 react-native-safe-area-view(这是给出问题的文件夹)并安装了 react-native-gesture-handler 并为我工作。

      原因:由于 git

      【讨论】:

        【解决方案5】:
        rm -rf node_modules/*/.git/
        

        试试这个

        【讨论】:

          猜你喜欢
          • 2016-03-25
          • 2014-06-15
          • 2013-01-03
          • 2017-08-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-13
          • 2020-12-20
          相关资源
          最近更新 更多