【问题标题】:npm ERR! code ENOENT when adding cordova plugins (cordova deletes the file it's looking for)npm 错误!添加科尔多瓦插件时的代码ENOENT(科尔多瓦删除它正在寻找的文件)
【发布时间】:2017-11-10 00:52:45
【问题描述】:

我被困在一个有点无限循环的斗争中!请帮忙xD

无论我运行什么phonegap 或cordova cli 命令,cordova 似乎都会在查找之前删除它正在查找的文件。

这里只是一些已知的触发错误的命令:

$ cordova plugin add <plugin name>

$ phonegap plugin add <plugin name>

$ cordova platform update <platform name>

$ phonegap platform update <platform name>

$ cordova platform remove <platform name>

$ phonegap platform remove <platform name>

见下面的终端输出,它显示了我在运行这些命令时得到的输出。我真的不确定为什么cordova在尝试重命名之前会删除它试图重命名的文件。很郁闷!

第 1 步(检查以确保我们有一个干净的 git 头并且我们的工作集没有变化)

apple@Child-2:~/projects/infiniteinternet/prodmode/prodmode-client-mobile-builds/phonegap * feature-barcode-scanner$ git status
# On branch feature-barcode-scanner
nothing to commit, working directory clean

第 2 步(尝试添加插件)

apple@Child-2:~/projects/infiniteinternet/prodmode/prodmode-client-mobile-builds/phonegap * feature-barcode-scanner$ cordova plugin add phonegap-plugin-barcodescanner --variable CAMERA_USAGE_DESCRIPTION="To scan barcodes"
Unmet project requirements for latest version of phonegap-plugin-barcodescanner:
cordova-android (6.2.3 in project, >=6.3.0 required)
Fetching highest version of phonegap-plugin-barcodescanner that this project supports: 6.0.8 (latest is 7.0.0)
Error: Failed to fetch plugin phonegap-plugin-barcodescanner@6.0.8 via registry.
Probably this is either a connection problem, or plugin spec is incorrect.
Check your connection and plugin name/version/URL.
Error: npm: Command failed with exit code 254 Error output:
npm WARN cordova-plugin-file-transfer@1.5.1 requires a peer of cordova-plugin-file@^3.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN cordova-plugin-media-capture@1.2.0 requires a peer of cordova-plugin-file@^3.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN com.prodmod.mobileclient@1.0.0 No repository field.
npm WARN com.prodmod.mobileclient@1.0.0 No license field.

npm ERR! path prodmode-client-mobile-builds/phonegap/node_modules/cordova-ios/node_modules/simple-plist/node_modules/base64-js
npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall rename
npm ERR! enoent ENOENT: no such file or directory, rename 'prodmode-client-mobile-builds/phonegap/node_modules/cordova-ios/node_modules/simple-plist/node_modules/base64-js' -> 'prodmode-client-mobile-builds/phonegap/node_modules/cordova-ios/node_modules/simple-plist/node_modules/.base64-js.DELETE'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent 

┌──────────────────────────────────────────────────────────┐
│                 npm update check failed                  │
│           Try running with sudo or get access            │
│           to the local update config store via           │
│ sudo chown -R $USER:$(id -gn $USER) /Users/apple/.config │
└──────────────────────────────────────────────────────────┘

npm ERR! A complete log of this run can be found in:
npm ERR! .npm/_logs/2017-11-10T00_23_21_467Z-debug.log

第 3 步(检查第 2 步中的命令引起的 git 更改)

好的,所以失败了。让我们找出假定丢失的文件发生了什么。好吧,显然cordova 在查找之前删除了该文件?

apple@Child-2:~/projects/infiniteinternet/prodmode/prodmode-client-mobile-builds/phonegap * feature-barcode-scanner$ git status
# On branch feature-barcode-scanner
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/base64-js/.npmignore
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/base64-js/.travis.yml
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/base64-js/LICENSE.MIT
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/base64-js/README.md
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/base64-js/base64js.min.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/base64-js/bower.json
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/base64-js/lib/b64.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/base64-js/package.json
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/base64-js/test/big-data.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/base64-js/test/convert.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/base64-js/test/url-safe.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/plist/.jshintrc
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/plist/.travis.yml
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/plist/History.md
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/plist/LICENSE
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/plist/Makefile
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/plist/README.md
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/plist/dist/plist-build.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/plist/dist/plist-parse.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/plist/dist/plist.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/plist/examples/browser/index.html
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/plist/index.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/plist/lib/build.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/plist/lib/parse.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/plist/package.json
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/xmlbuilder/.npmignore
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/xmlbuilder/CHANGELOG.md
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/xmlbuilder/LICENSE
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/xmlbuilder/README.md
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/xmlbuilder/lib/Utility.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/xmlbuilder/lib/XMLAttribute.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/xmlbuilder/lib/XMLCData.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/xmlbuilder/lib/XMLComment.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/xmlbuilder/lib/XMLDTDAttList.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/xmlbuilder/lib/XMLDTDElement.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/xmlbuilder/lib/XMLDTDEntity.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/xmlbuilder/lib/XMLDTDNotation.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/xmlbuilder/lib/XMLDeclaration.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/xmlbuilder/lib/XMLDocType.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/xmlbuilder/lib/XMLDocument.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/xmlbuilder/lib/XMLDocumentCB.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/xmlbuilder/lib/XMLElement.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/xmlbuilder/lib/XMLNode.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/xmlbuilder/lib/XMLProcessingInstruction.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/xmlbuilder/lib/XMLRaw.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/xmlbuilder/lib/XMLStreamWriter.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/xmlbuilder/lib/XMLStringWriter.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/xmlbuilder/lib/XMLStringifier.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/xmlbuilder/lib/XMLText.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/xmlbuilder/lib/XMLWriterBase.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/xmlbuilder/lib/index.js
#   deleted:    node_modules/cordova-ios/node_modules/simple-plist/node_modules/xmlbuilder/package.json
#
no changes added to commit (use "git add" and/or "git commit -a")

如果有人对如何解决此问题有任何建议,我将不胜感激。我不确定是什么原因造成的,也不知道它何时生效,但我已经有几个星期无法将插件添加到我的项目中了。

提前致谢!

编辑: 环境设置:

apple@Child-2:/ $ cordova --version
7.0.1


┌──────────────────────────────────────────┐
│ Update available: 7.1.0 (current: 7.0.1) │
│ Run npm install -g cordova to update.    │
└──────────────────────────────────────────┘

apple@Child-2:/ $ phonegap --version
7.1.1
apple@Child-2:/ $ node --version
v6.11.1
apple@Child-2:/ $ npm --version
5.4.2

【问题讨论】:

  • 请贴出你的环境设置:npm版本、cordova版本等
  • @MaximShoustin 环境设置已添加。如果我错过了任何内容,请告诉我。
  • 尝试删除 node_modules、插件和平台文件夹并运行 cordova prepare。它应该恢复您在 config.xml 和/或 package.json 中拥有的平台和插件
  • @DrewT 您是否尝试过清除 npm 缓存,然后尝试删除 ios 平台并重新添加它?
  • @jcesarmobile 是的,我试过了,结果还是一样的错误,没有插件。

标签: cordova cordova-plugins phonegap phonegap-cli cordova-cli


【解决方案1】:

我真的不知道您的项目哪里出了问题,但是当我升级 cordova 版本并将我的项目从 Eclipse 迁移到 Android Studio 时,我遇到了类似的行为。

添加一些插件会导致多次删除和我的所有项目不起作用

我尝试了很多方法来修复它但都失败了,每次都出现其他异常。


所以我通过从头开始创建新项目来解决它。将所有插件一一添加,从旧项目中复制所有www文件夹。

我花了大约 30 分钟,但值得。


提示: 我会将node_modules 文件夹放到.gitignore 文件中。您不需要将所有依赖项推送到 git。用户可以克隆项目并从根项目运行$ npm install

【讨论】:

  • 这绝对是我接下来要尝试的。幸运的是我得到了它的工作:o
  • @DrewT 很高兴听到 :)
【解决方案2】:

嗯,所以我能够解决这个问题。线程中的讨论有助于在没有实际解决的情况下引导我找到正确的答案。

这就是我所做的:

第一步: 更新cordova

$ sudo npm install -g cordova

Phonegap 已经更新到最新版本,但我的 Cordova 没有。

第二步更新节点和npm

显然,在更新这 2 个组件后,我的应用程序中的所有内容都再次运行良好。此时,它将使用phonegap plugin add &lt;plugin name&gt; 安装到/plugins,但在我切换Maven 存储库的位置之前,它不会将插件代码传播到Android。

第三步: 在 build.gradle 中更新 Maven 仓库位置

这与我的问题并没有真正的关系,但是只要我更改了&lt;app root&gt;/phonegap/platforms/android/build.gradle 中的 Maven 存储库位置,我就能够构建 apk 权限

这是我在 build.gradle 中所做的更改...

我原来的 build.gradle 设置:

buildscript {
    repositories {
        mavenCentral()
        jcenter()
    }

    // Switch the Android Gradle plugin version requirement depending on the
    // installed version of Gradle. This dependency is documented at
    // http://tools.android.com/tech-docs/new-build-system/version-compatibility
    // and https://issues.apache.org/jira/browse/CB-8143
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0'
    }
}

// Allow plugins to declare Maven dependencies via build-extras.gradle.
allprojects {
    repositories {
        mavenCentral()
        jcenter()
    }
} 

我改成了:

buildscript {
    repositories {
        jcenter()
        maven { url 'https://maven.google.com' }
    }

    // Switch the Android Gradle plugin version requirement depending on the
    // installed version of Gradle. This dependency is documented at
    // http://tools.android.com/tech-docs/new-build-system/version-compatibility
   // and https://issues.apache.org/jira/browse/CB-8143
   dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0'
   }
}

// Allow plugins to declare Maven dependencies via build-extras.gradle.
allprojects {
    repositories {
        jcenter()
        maven { url 'https://maven.google.com' }
    }
}

之后,我能够使用正确的插件权限构建我的 APK 并使用我添加的插件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 2015-08-13
    相关资源
    最近更新 更多