`node cordova/lib/copy-www-build-step.js`在构建阶段时出现cordova构建错误

Posted

技术标签:

【中文标题】`node cordova/lib/copy-www-build-step.js`在构建阶段时出现cordova构建错误【英文标题】:cordova build error when `node cordova/lib/copy-www-build-step.js` in build phase 【发布时间】:2019-04-09 14:24:58 【问题描述】:

我是一名没有 ios 开发经验的 Web 开发人员。现在我正在使用 Cordova 构建 iOS 应用程序。因为我对iOS或Xcode一无所知,所以对我来说很难。当我内置 Xcode 或内置命令行时,我总是收到类似以下输出的错误。

    Xcode 构建中的错误信息:
Run custome shell script 'Copy www directory'

PhaseScriptExecution Copy\ www\ directory /Users/jyjin/Library/Developer/Xcode/DerivedData/myios-auhioanpfinvvvcrnvoaioslreyr/Build/Intermediates.noindex/myios.build/Debug-iphonesimulator/myios.build/Script-304B58A110DAC018002A0835.sh (in target: myios)
    cd /Users/jyjin/workspace/gitProject/Cordova/FirstProject/platforms/ios
    /bin/sh -c /Users/jyjin/Library/Developer/Xcode/DerivedData/myios-auhioanpfinvvvcrnvoaioslreyr/Build/Intermediates.noindex/myios.build/Debug-iphonesimulator/myios.build/Script-304B58A110DAC018002A0835.sh

/Users/jyjin/Library/Developer/Xcode/DerivedData/myios-auhioanpfinvvvcrnvoaioslreyr/Build/Intermediates.noindex/myios.build/Debug-iphonesimulator/myios.build/Script-304B58A110DAC018002A0835.sh: line 2: 27158 Segmentation fault: 11  node cordova/lib/copy-www-build-step.js
Command PhaseScriptExecution failed with a nonzero exit code

    命令行构建中的错误信息:
** BUILD FAILED **


The following build commands failed:
        PhaseScriptExecution Copy\ www\ directory /Users/jyjin/Library/Developer/Xcode/DerivedData/myios-auhioanpfinvvvcrnvoaioslreyr/Build/Intermediates.noindex/myios.build/Debug-iphonesimulator/myios.build/Script-304B58A110DAC018002A0835.sh
(1 failure)
xcodebuild: Command failed with exit code 65

看了很多网站上的解决方案,最后发现build阶段有一些脚本:

NODEJS_PATH=/usr/local/bin; NVM_NODE_PATH=~/.nvm/versions/node/`nvm version 2>/dev/null`/bin; N_NODE_PATH=`find /usr/local/n/versions/node/* -maxdepth 0 -type d 2>/dev/null | tail -1`/bin; XCODE_NODE_PATH=`xcode-select --print-path`/usr/share/xcs/Node/bin; PATH=$NODEJS_PATH:$NVM_NODE_PATH:$N_NODE_PATH:$XCODE_NODE_PATH:$PATH && node cordova/lib/copy-www-build-step.js

在多次检查错误消息后,我尝试在Build Phases中删除&& node cordova/lib/copy-www-build-step.js,它构建成功,但html中没有预期的页面效果(我认为没有复制www资源)。

我试图在copy-www-build-step.js 中检查一些环境路径值,所以我在copy-www-build-step.js 中编写了一些日志代码,但不知道如何在 Xcode 中打印 js 日志。然后我找到了cordova-plugin-console,但是 npm doc 说它是重复的,并且包含了 Cordova 的最新版本,而我的也是最新的。

哦,天哪!一周过去了……我只想构建一个 iOS 应用程序。太难玩了。鬼知道我经历了什么:配置证书、配置文件、从零开始构建一个 Cordova 应用,甚至花 99 美元买了一个苹果开发者账号……

只是想在空闲时间自己玩一个iOS应用...希望有人可以帮助我~~

     -- From a desperate Chinese boy !

【问题讨论】:

【参考方案1】:

只需将cordova-ios 更新到最新版本:

npm i cordova-ios@latest

你可以在这个 PR 中看到这个问题正在解决:#600,他们将脚本从 javascript 更改为旧的 shell 版本并修复了问题。

不更新库的解决方法

Build Phases选项卡中输入xCode,点击“Copy www directory”阶段,将脚本改为:

$SRCROOT/__PROJECT_NAME__/Scripts/copy-www-build-step.sh

“__PROJECT_NAME__”是 xCode 项目的名称。

在此之后下载copy-www-build-step.sh 脚本并将其放在“__PROJECT_NAME__/Scripts/”路径中。

参考文献

https://github.com/apache/cordova-ios/issues/540 https://github.com/apache/cordova-ios/pull/600/files https://github.com/apache/cordova-ios/pull/146/files

【讨论】:

【参考方案2】:

哦!我已经修好了~

首先,检查脚本:

NODEJS_PATH=/usr/local/bin; NVM_NODE_PATH=~/.nvm/versions/node/`nvm version 2>/dev/null`/bin; N_NODE_PATH=`find /usr/local/n/versions/node/* -maxdepth 0 -type d 2>/dev/null | tail -1`/bin; XCODE_NODE_PATH=`xcode-select --print-path`/usr/share/xcs/Node/bin; PATH=$NODEJS_PATH:$NVM_NODE_PATH:$N_NODE_PATH:$XCODE_NODE_PATH:$PATH && node cordova/lib/copy-www-build-step.js

当前错误是xcodebuild: Command failed with exit code 65。这是第一个错误,在mac中运行时&&应该是&

然后,错误变为Command /bin/sh failed with exit code 127。我发现xcode错误消息:node: command not found

所以我在命令行中运行find /usr/local/n/versions/node/* -maxdepth 0 -type d 2>/dev/null | tail -1。并获取节点结果路径/usr/local/n/versions/node/11.12.0

运行

node -v // v10.15.3

所以我删除了 build_phases 中的所有脚本,并为我的真实 nvm 节点路径提供节点路径,如下更改 build_phases:

/Users/jyjin/.nvm/versions/node/v10.15.3/bin/node cordova/lib/copy-www-build-step.js

构建成功!

总结! cordova auto build_phases 脚本可能不适合您的环境,请确保构建阶段可以获取您的节点路径!

【讨论】:

以上是关于`node cordova/lib/copy-www-build-step.js`在构建阶段时出现cordova构建错误的主要内容,如果未能解决你的问题,请参考以下文章

关于node,node-sass,sass-loader版本

Node.js 入门

Node学习—运行node服务demo

10.DOM

node.js教程基础:node.js命令行选项

bindings.node' 是针对不同的 Node.js 版本使用 NODE_MODULE_VERSION 93 编译的。此版本的 Node.js 需要 NODE_MODULE_VERSION 89