gpt4 book ai didi

ios - 在 hooks 文件夹中使用节点脚本时出现 cordova 插件安装问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:00:26 24 4
gpt4 key购买 nike

Cordova 3.4 Hook 未在 iOS 中正确安装提到的插件。我正在将 install_plugins.js 添加到文件夹 project/project_root/hooks/after_platform_add 中,其中包含以下代码:

#!/usr/bin/env node

//this hook installs all your plugins

// add your plugins to this list--either the identifier, the filesystem location or the URL
// It can also be git url like "https://github.com/chrisekelley/AppPreferences/"
var pluginlist = [
"org.apache.cordova.camera",
"org.apache.cordova.console",
"org.apache.cordova.contacts",
"org.apache.cordova.device",
"org.apache.cordova.dialogs",
"org.apache.cordova.file",
"org.apache.cordova.file-transfer",
"org.apache.cordova.geolocation",
"org.apache.cordova.globalization",
"org.apache.cordova.media",
"org.apache.cordova.media-capture",
"org.apache.cordova.network-information",
"org.apache.cordova.splashscreen",
"org.apache.cordova.statusbar"
];

// no need to configure below

var fs = require('fs');
var path = require('path');
var sys = require('sys')
var exec = require('child_process').exec;

function puts(error, stdout, stderr) {
sys.puts(stdout)
}

pluginlist.forEach(function(plug) {
exec("cordova plugin add " + plug, puts);
});

因此,当我使用命令 cordova platform add ios 添加平台时,所有插件都已正确安装。

在使用命令 cordova build ios 构建项目后,我得到的日志是 ** BUILD SUCCEEDED **

但是当我在 Xcode 中运行我的项目时出现以下错误

2014-07-22 11:42:00.960 Totter[2788:90b] CDVPlugin class CDVDevice (pluginName: Device) does not exist.
2014-07-22 11:42:00.961 Totter[2788:90b] ERROR: Plugin 'Device' not found, or is not a CDVPlugin. Check your plugin mapping in config.xml.
2014-07-22 11:42:00.963 Totter[2788:90b] -[CDVCommandQueue executePending] [Line 158] FAILED pluginJSON = [
"Device1460086973",
"Device",
"getDeviceInfo",
[

]
]
2014-07-22 11:42:00.964 Totter[2788:90b] CDVPlugin class CDVConnection (pluginName: NetworkStatus) does not exist.
2014-07-22 11:42:00.965 Totter[2788:90b] ERROR: Plugin 'NetworkStatus' not found, or is not a CDVPlugin. Check your plugin mapping in config.xml.
2014-07-22 11:42:00.965 Totter[2788:90b] -[CDVCommandQueue executePending] [Line 158] FAILED pluginJSON = [
"NetworkStatus1460086974",
"NetworkStatus",
"getConnectionInfo",
[

]
]

请帮我解决这个问题

最佳答案

这个问题也让我很头疼,但我终于找到了解决办法;这是交易。问题是 node.js 默认情况下异步执行命令。非常适合 Web 服务器,但不适合 shell 脚本!因此,当您一个接一个地发出“cordova plugin add [your plugin]”命令时,您最终会同时执行一堆命令,并且在遍历已安装插件列表时它们会相互踩踏,重写文件 (cordova_plugins.js)。如果您将“--verbose”开关添加到您的命令(因此“cordova plugin add [your plugin] --verbose”),您实际上可以看到这种情况发生。Node.js 直到 0.12 才具备同步执行命令的能力(它是execSync 命令),在撰写本文时,最新的稳定版本是 0.10。如果你在 2015 年使用 Cordova,你很可能得到 0.10,所以你需要安装一个包,如 shelljs 或 exec-sync 来获得该功能。因此,在命令行中使用 shelljs,您将:

[sudo] npm install shelljs

然后在你的钩子(Hook)脚本中替换所有这些:

// no need to configure below

var fs = require('fs');
var path = require('path');
var sys = require('sys')
var exec = require('child_process').exec;

function puts(error, stdout, stderr) {
sys.puts(stdout)
}

pluginlist.forEach(function(plug) {
exec("cordova plugin add " + plug, puts);
});

有了这个:

var execSync = require("shelljs").exec;
pluginlist.forEach(function(plugin) {
execSync("cordova plugin add " + plugin + " --verbose");
});

关于ios - 在 hooks 文件夹中使用节点脚本时出现 cordova 插件安装问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24880197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com