3

使用 cordova 构建时出现错误。

Error: Source and destination must not be the same.

构建系统:

Ionic:
  ionic (cli):        4.10.1
  ionic framework:    ionic-angular 3.9.2
  @ionic/app-scripts: 3.1.11

Cordova:
  cordova (cli):      8.1.2 (cordova-lib@8.1.1)
  platforms:          "cordova-android": "8.0.0"

System:
  Android SDK Tools:  26.1.1
  NodeJS:             10.15.3
  npm:                6.4.1
  OS:                 Windows 10

命令:

ionic cordova build android

或者

cordova build --release

错误详情:

Error: Source and destination must not be the same.
    at checkPaths (C:\Jenkins\workspace\%PROJECTNAME%\node_modules\fs-extra\lib\copy-sync\copy-sync.js:185:11)
    at Object.copySync (C:\Jenkins\workspace\%PROJECTNAME%\node_modules\fs-extra\lib\copy-sync\copy-sync.js:25:20)
    at updatePathWithStats (C:\Jenkins\workspace\%PROJECTNAME%\node_modules\cordova-common\src\FileUpdater.js:103:24)
    at C:\Jenkins\workspace\%PROJECTNAME%\node_modules\cordova-common\src\FileUpdater.js:298:19
    at Array.forEach (<anonymous>)
    at Object.mergeAndUpdateDir (C:\Jenkins\workspace\%PROJECTNAME%\node_modules\cordova-common\src\FileUpdater.js:296:33)
    at updateWww (C:\Jenkins\workspace\%PROJECTNAME%\platforms\android\cordova\lib\prepare.js:157:17)
    at Api.module.exports.prepare (C:\Jenkins\workspace\%PROJECTNAME%\platforms\android\cordova\lib\prepare.js:56:19)
    at Api.prepare (C:\Jenkins\workspace\%PROJECTNAME%\platforms\android\cordova\Api.js:177:45)
    at C:\Jenkins\workspace\%PROJECTNAME%\node_modules\cordova\node_modules\cordova-lib\src\cordova\prepare.js:105:36

有没有人面临同样的错误或知道出了什么问题?

附加信息:我总是将 git 存储库签出到一个空文件夹。这意味着:每次构建都是硬清理。没有node_modules也没有平台等(rm平台等没用)

4

4 回答 4

2

问题是fs-extra复制操作的 checkPaths 方法。检查节点 fs 的 state.ino(inode),它被评估为数字。Bigint 也受支持但未启用。这就是比较可能失败的原因。因为 JavaScript 中的 max-safe-integer 是 53 位的。也许也是一个符号链接问题。

查看/加入: https ://github.com/jprichardson/node-fs-extra/issues/657

为什么选择 Cordova-Android 8.0.0?因为https://github.com/apache/cordova-common/blob/master/RELEASENOTES.md。fs-extra 在这个版本中是新的。

于 2019-03-19T15:18:40.390 回答
2

我不知道这是否是正确的答案,但它可能是cordova build.json 中的错误设置(如果你有的话)。

由于您使用的是 Jenkins,因此您可能有一些错误的设置,例如缺少依赖项或类似的东西。

您也可以尝试删除平台并重新添加以获取最新版本和兼容性。

cordova platform remove android
cordova platform add android@8.0.0

您可以检查是否有过时的 fs-extra(尽管我认为这不是问题)并更新 Ionic。

您可以尝试恢复您的 node_modules。

我希望这些步骤之一有所帮助。

于 2019-03-13T04:47:48.777 回答
2

首先,手动删除:

node_modules文件夹

package-lock.json文件

platform > android文件夹

在此处输入图像描述

在此处输入图像描述

然后使用这个推荐:

1 => npm rm -rf node_modules package-lock.json
2 => npm cache clear --force
3 => ionic cordova platform add android@8.0.0
4 => ionic cordova prepare android
5 => ionic cordova run android
于 2019-03-14T19:53:06.600 回答
2

就我而言,它发生在再次删除/添加 android 以确保更新某些插件时。

此解决方案解决了我在此处引用的问题

cordova clean android
于 2020-08-16T12:59:08.280 回答