使用npm + package.json管理cordova插件

59
我们有一个使用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"
]

除此之外,我们找不到任何方法让第二个开发者通过npm安装这些插件 - 相反,他必须逐个运行命令,这会在package.json中添加重复的行,使代码库变得混乱。我们确定一定有一种命令可以安装这些插件,但是找不到它。有人能够提供帮助吗?

就目前而言,我们正在使用gulp-cordova从package.json中读取上述配置的修改版本。如果这是解决方案,赏金期结束后将发布完整的解决方案。 - Unpossible
当您运行Cordova构建时,它不会安装吗? - Luke Page
cordova plugin add cordova-* 会在 package.json 文件的 cordovaPlugins 部分添加一行。 - Unpossible
3个回答

90

问题的根源

我们最初使用了这个Ionic + Cordova + Grunt种子项目来创建我们的初始应用程序。该项目包括许多Cordova hooks,它们在运行相应的命令时(即cordova plugin add cordova-plugin-media添加一行到cordovaPlugins),会对相关的cordovaPlatformscordovaPlugins部分在package.json中进行添加和删除等操作。

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

正确管理Cordova插件

事实证明,Ionic CLI使用package.json来管理Cordova应用程序状态,以便在平台和插件方面进行管理(截至1.3.19版本,似乎是这样的)。

通过在package.json中填充两个部分cordovaPlatformscordovaPlugins,我们可以简单地使用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"
  ]
}

简述:

在你的package.json中添加以上内容后,你可以通过使用ionic state restore命令(v1.3.19+)来确保你的本地环境处于正确状态,该命令将读取package.json文件并根据需要安装平台和插件。


你找到一种安装 ionic 正在保存的“状态”中插件的方法了吗?如果有,我很想看看。 - jaker
1
由于这是问题的实际答案,因此在上面的回答中添加“离子状态恢复”可能是有意义的。 - SomeCallMeTim
2
如果你看到“state is not a valid task”,那是因为你的ionic-cli版本过旧。state命令在1.3.9版本中才可用。要解决这个问题,只需像这样更新ionic:npm update -g ionic-cli,然后ionic state restore就可以正常工作了。 - alexkb
2
这个安装的是相同的版本,还是只是拉取插件的最新版本?我觉得很奇怪的是JSON中没有一个版本号。 - sdude
1
@SDude,我已经在答案中添加了版本信息。 - Unpossible
显示剩余3条评论

13

你可以添加一个postinstall命令。请看下面

{
  "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


1
也许有点晚了,但这是我的postinstall脚本。
    "postinstall": "bower i && gulp && ionic state reset && ionic config build"
  • 它安装了Bower依赖,例如Ionic库
  • 它恢复了Cordova插件
  • 它重新构建了您通过ionic config命令执行的配置

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接