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

Pau*_*ega 57 npm cordova-plugins

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

"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"
]
Run Code Online (Sandbox Code Playgroud)

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

Pau*_*ega 89

是什么导致了我们的问题

我们最初使用这个Ionic + Cordova + Grunt种子项目来生成我们的初始应用程序.该项目包括许多Cordova钩子,其中包括在运行相应命令时添加和删​​除相关cordovaPlatformscordovaPlugins部分中的平台和插件package.json(即cordova plugin add cordova-plugin-media添加一行cordovaPlugins).

为了更好地支持本地测试(例如尝试新版本的插件),并防止交叉开发人员依赖性问题,我们禁用了种子项目挂钩,现在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"
  ]
}
Run Code Online (Sandbox Code Playgroud)

TL;博士

完成上述操作之后package.json,您可以通过ionic state restore(v1.3.19 +)确保您的本地环境处于正确状态,这将package.json根据需要咀嚼并安装平台和插件.

  • 如果你看到"状态不是一个有效的任务",那是因为你有一个过时版本的ionic-cli.状态命令在1.3.9版中可用.要修复,只需更新离子就像这样`npm update -g ionic-cli`然后`离子状态恢复'将起作用. (2认同)
  • 这是否安装相同的版本o只是拉出最新版本的插件?我觉得奇怪的是,json中没有出现单个版本号 (2认同)

aWe*_*per 12

您可以添加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"
  }
}
Run Code Online (Sandbox Code Playgroud)

奖励:如果您希望开始清洁,请使用,npm run clean然后npm install重新安装所有平台