【问题标题】:Manage cordova plugins with npm + package.json使用 npm + package.json 管理 cordova 插件
【发布时间】:2015-07-14 14:19:40
【问题描述】:

我们有一个 Angular + Ionic + Cordova 项目,其中包含多个开发人员,我们希望为其管理 Cordova 插件依赖项。我们正在使用Cordova CLI 5+,当手动运行安装命令(例如cordova plugin add cordova-plugin-camera)时,package.json 文件的cordovaPlugins 部分会添加一个新行。这是成品的样子:

"cordovaPlugins": [
  "cordova-plugin-camera",
  "cordova-plugin-console",
  "cordova-plugin-contacts",
  "cordova-plugin-device",
  "cordova-plugin-dialogs",
  "cordova-plugin-file",
  "cordova-plugin-geolocation",
  "cordova-plugin-media",
  "cordova-plugin-media-capture",
  "cordova-plugin-network-information",
  "cordova-plugin-splashscreen",
  "cordova-plugin-statusbar",
  "cordova-plugin-vibration",
  "com.ionic.keyboard"
]

这一切都很好,除了我们找不到任何方法让 dev #2 安装这些插件 - 相反,他必须单独运行命令,然后将重复的行添加到 package.json,从而弄脏存储库。我们确信必须有一个命令来安装这些,但找不到它。有人能解释一下吗?

【问题讨论】:

  • FWIW,现在我们正在使用 gulp-cordova 从 package.json 中读取上述配置的修改版本。一旦赏金期到期,将发布完整的解决方案,如果结果证明是解决方案。
  • 运行 cordova build 时不会安装吗?
  • cordova plugin add cordova-*package.json 文件的cordovaPlugins 部分添加一行。

标签: npm cordova-plugins


【解决方案1】:

您可以添加安装后命令。往下看

{
  "cordovaPlugins": [
    "com.ionic.keyboard@1.0.4",
  ],
  "cordovaPlatforms": [
    "android@4.1.1",
  ],
  "scripts": {
    "postinstall": "ionic state restore",
    "clean": "ionic platform remove android; ionic platform remove ios; ionic platform remove browser; git checkout package.json"
  }
}

奖励:使用npm run clean,后跟npm install,如果你想开始清理,即重新安装所有平台

【讨论】:

    【解决方案2】:

    可能有点晚了,但这是我的安装后脚本

        "postinstall": "bower i && gulp && ionic state reset && ionic config build"
    
    • 它会安装 bower 依赖项,例如离子库
    • 它恢复了 Cordova 插件
    • 它会重新构建您通过 ionic config 命令所做的配置

    【讨论】:

      【解决方案3】:

      是什么导致了我们的问题

      我们最初使用这个Ionic + Cordova + Grunt seed project 来生成我们的初始应用程序。 project includesCordova hooks 的数量,除其他外,当您运行相应的命令时,在 package.json 中的相关 cordovaPlatformscordovaPlugins 部分添加和删除平台和插件(即 cordova plugin add cordova-plugin-media 添加一个转至cordovaPlugins)。

      为了更好地支持本地测试(例如,尝试新版本的插件)并防止跨开发依赖问题,我们禁用了种子项目挂钩,现在根据需要手工制作 package.json

      正确管理 Cordova 插件

      事实证明,Ionic CLI 使用 package.json 在平台和插件方面管理 Cordova 应用程序状态(从 version 1.3.19 开始,它出现了)。

      cordovaPlatformscordovaPlugins 这两个部分填充package.json 使我们能够执行一个简单的ionic state restore 以使Cordova 环境成型以进行仿真、构建等。

      指定版本

      为了进一步锁定我们应用的状态和开发环境,我们还通过添加版本号来指定我们正在使用的 Cordova 平台和插件的目标版本。这是我们使用的:

      {
        ...
        "cordovaPlatforms": [
          "android@4.0.2",
          "ios@3.8.0"
        ],
        "cordovaPlugins": [
          "cordova-plugin-camera@1.1.0",
          "cordova-plugin-contacts@1.1.0",
          "cordova-plugin-device@1.0.1",
          "cordova-plugin-file@2.1.0",
          "cordova-plugin-media@1.0.1",
          "cordova-plugin-media-capture@1.0.1",
          "cordova-plugin-network-information@1.0.1",
          "cordova-plugin-splashscreen@2.1.0",
          "cordova-plugin-statusbar@1.0.1",
          "cordova-plugin-vibration@1.2.0",
          "com.ionic.keyboard@1.0.5"
        ]
      }
      

      tl;dr

      一旦您的package.json 中包含上述内容,您就可以通过ionic state restore (v1.3.19+) 确保您的本地环境处于正确状态,这将通过package.json 并安装平台和插件为需要。

      【讨论】:

      • 您是否找到了一种方法来从 ionic 正在保存的这种“状态”安装插件?如果是这样,我很乐意看到它。
      • 在上面的答案中添加“离子状态恢复”可能是有意义的,因为这是问题的实际答案。
      • 如果您看到“状态不是有效任务”,那是因为您的 ionic-cli 版本过时。 state 命令在 1.3.9 版本中可用。要修复,只需像这样更新 ionic npm update -g ionic-cli 然后ionic state restore 就可以了。
      • 这是否安装相同的版本或者只是拉取最新版本的插件?我觉得奇怪的是 json 中没有出现一个版本号
      • @SDude 我已将版本信息添加到答案中。
      猜你喜欢
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 2018-09-11
      • 2017-03-07
      • 2019-09-05
      • 2015-04-06
      • 2016-07-26
      相关资源
      最近更新 更多