在 hooks 文件夹中使用节点脚本时,cordova 插件安装问题

2024-05-17

Cordova 3.4 hooks 未在 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 [您的插件]”命令时,您最终会得到一堆同时执行的命令,并且它们在迭代已安装的插件列表时互相踩踏,并且重写文件(cordova_plugins.js)。如果你在命令中添加“--verbose”开关,你实际上可以看到这种情况发生(所以“cordova插件添加[你的插件] --verbose”。Node.js直到0.12才获得同步执行命令的能力(它是execSync 命令),截至撰写本文时,最新的稳定版本是 0.10。如果您在 2015 年使用 Cordova,您很可能已经使用了 0.10,因此您需要安装 shelljs 或 exec-sync 等软件包才能获得因此,使用 shelljs,在命令行上您将:

[sudo] npm install shelljs

在你的钩子脚本中替换所有这些:

// 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");
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 hooks 文件夹中使用节点脚本时,cordova 插件安装问题 的相关文章

随机推荐

  • 从 API 网关自定义授权方返回的 401 缺少“Access-Control-Allow-Origin”标头

    为了防止未登录的用户通过 AWS API Gateway 调用我的 lambda 函数 我使用自定义授权者 lambda 解决方案 如果请求被授权 200 并且我从被调用的 lambda 得到响应 一切正常并且我得到Access Contr
  • PHP解析xml文件错误

    我正在尝试使用 simpleXML 来获取数据http rates fxcm com RatesXML http rates fxcm com RatesXML Using simplexml load file 我有时会遇到错误 因为这个
  • 在 PHP 中将 CSV 写入不带括号的文件

    是否有本机函数或实体类 库用于将数组写入 CSV 文件中的一行而无需封装 fputcsv将默认为 如果没有为封装参数传入任何内容 谷歌让我失望了 返回一大堆有关的页面的结果 fputcsv PEAR 的库做的事情或多或少与fputcsv 工
  • React Image:createObjectURL 链接给出错误 404(未找到)

    我在 React with Typescript 中使用以下代码创建了一个 ImageUrl 它创建了一个 URL 但不显示图片图像 单击 URL 例如 http localhost 3003 0b4de100 d8eb 49a7 b43a
  • 使用 rspec 测试嵌套路由

    我正在尝试使用 rspec 测试路由 以下给出了 预期块返回真值 的错误 我不确定我错过了什么 通过浏览器我可以发布到这个网址并且成功 有任何想法吗 谢谢 Routes resources forum topics do resources
  • Google Play Beta:“应用程序不适用于此帐户”消息

    有没有人遇到过所有成员都遇到的问题谷歌测试组能够获得测试版 除了一个问题之外没有任何问题 这位拥有有效 Gmail 地址的用户已加入用于 Beta 测试的 Google Grouped 作为管理员 我可以看到他们的状态是member 当他们
  • 关于加拿大短信网关提供商的建议[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我很好奇 如果我能够接受传入的短信到某个号码 然后将其传递给 PHP 中的服务器端应用程序 会带来多少麻烦 金钱 我最终会通过电子邮件地址发回短信 有
  • 如何在非 CSS3 浏览器上制作圆角?

    我知道在这种情况下我必须使用图像 每个角一个 例如 如果我需要给定元素周围有一个 4px 的纯蓝色边框 边框半径为 8px 我相应地设计了四幅图像 左上角 png 右上角 png 左下角 png 右下角 png 如果可能的话 我应该如何实现
  • 仅动态包含 javascript 文件一次

    我正在编写一个 javascript 函数 该函数用于包含外部 JS 文件 但仅一次 我需要这样一个函数的原因是 当通过 AJAX 加载某些内容时会调用它 并且我需要对该内容运行特定于页面的代码 不 只需使用 live不会覆盖它 这是我的尝
  • 使用 Stripe checkout.js 编辑信用卡

    Checkout from Stripe有一个很好的方法来添加信用卡进行交易 只需调用StripeCheckout open 是否可以使用 open to 编辑卡片 传入卡token 另外 哪里可以下载非压缩版本checkout js看到
  • 重新启动应用程序时出现异常 SIGKILL

    我在 iPhone 模拟器中构建并运行一个项目 我通过按主页按钮将其发送到后台 然后我双击主页按钮在后台找到我的应用程序并点击它 它变得活跃并且应用程序继续运行 在这里 无论我重复多少次 我都没有问题 然后我通过点击应用程序图标上的红色小减
  • 日志中的“时间”字段到底表示什么?

    我在一台存在一些性能问题的服务器上研究了 IIS 7 5 中的 W3C 格式日志文件一段时间 在我看来 与MSDN 文档 http technet microsoft com en us library cc754702 28WS 10 2
  • Windows-1252 编码 - 显示不正确的字符

    我有一个缓冲区 其中包含以 Windows 1252 编码的字符 然而 当我使用适当的编码创建一个新的字符串时 我经常得到询问标记 而不是预期的结果 例如 byte tmps new byte byte 0xfb System out pr
  • iOS 上的 OpenCV - VideoCapture 属性始终返回 1

    我一直在尝试构建一个简单的 OpenCV iOS 应用程序 该应用程序从捆绑包中加载视频并查询其帧数 持续时间等 然后它将尝试从中获取各个帧 不幸的是 当我使用VideoCapture类中 所有属性返回值 1 然后我尝试导航到frame 1
  • 如何 XML 序列化 DateTimeOffset 属性?

    The DateTimeOffset当数据表示为 Xml 时 我在此类中拥有的属性不会呈现 我需要做什么来告诉 Xml 序列化将其正确呈现为DateTime or DateTimeOffset XmlRoot playersConnecte
  • 使用元类的 __call__ 方法而不是 __new__?

    在讨论元类时 the docs http docs python org reference datamodel html state 您当然也可以重写其他类方法 或添加新的 方法 例如定义一个自定义 call 方法中的 元类允许在调用类时
  • Google Apps 脚本:比较日期

    我在比较 Google Apps 脚本中的日期时遇到了一个奇怪的问题 为此 我的工作表在 cell getValue 中有一个日期 所以 e range setNote cell getValue startDate 行中 注释显示两个看起
  • MongoDB:如果使用 $addToSet 或 $push,是否应该预先分配文档?

    我一直在研究 MongoDB 我知道强烈建议在插入时完全构建 预分配 文档结构 这样将来对该文档的更改不需要移动该文档磁盘周围 这在使用 addToSet 或 push 时适用吗 例如 假设我有以下文档 id rsMH4GxtduZZfxQ
  • LC3 LEA指令和存储的值

    我对这个问题感到困惑 指令后寄存器0中存储的值是多少 LEA R0 A 被处决了吗 为什么答案是x370C 我认为应该将A的地址加载到R0中 如果是这样我们怎么知道地址 有人可以帮忙吗 非常感谢 ORIG X3700 LEA R0 A LD
  • 在 hooks 文件夹中使用节点脚本时,cordova 插件安装问题

    Cordova 3 4 hooks 未在 iOS 中正确安装提到的插件 我正在添加install plugins js进入文件夹project project root hooks after platform add其中有以下代码 usr