使用npm + package.jsonpipe理cordova插件

我们有一个Angular + Ionic + Cordova项目和多个开发者,我们想要pipe理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" ] 

这一切都很好,除了我们无法find开发#2到npm安装这些插件的任何方式 – 相反,他必须单独运行这些命令,然后将一个重复的行添加到package.json ,污染存储库。 我们确定必须有一个命令来安装这些,但无法find它。 任何人都可以点亮一下吗?

是什么引起了我们的问题

我们最初使用这个离子+cordova+ Grunt种子项目产卵我们最初的应用程序。 该项目包括一些Cordova钩子 ,其中包括在运行相应的命令时,从package.json的相关cordovaPlatformscordovaPlugins部分添加和删除平台和插件(即: cordova plugin add cordova-plugin-media添加一行cordovaPlugins )。

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

正确pipe理cordova插件

事实上, Ionic CLI使用package.json来pipe理平台和插件方面的Cordova应用程序状态(从1.3.19版本开始出现)。

使用两个部分cordovaPlatforms package.jsoncordovaPlatformscordovaPlugins已经允许我们做一个简单的ionic state restore以获得Cordova环境的模拟,build筑等。

指定版本

为了进一步locking我们应用程序的状态和开发环境,我们还通过添加版本号来指定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;博士

一旦你在package.json获得了上述内容,就可以通过ionic state restore (v1.3.19 +)来确保你的本地环境处于正确的状态,这将通过package.json咀嚼,并根据需要安装平台和插件。

您可以添加一个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

可能会有点晚,但是这是我的postinstall脚本

  "postinstall": "bower i && gulp && ionic state reset && ionic config build" 
  • 它会安装鲍尔依赖关系,例如离子库
  • 它恢复cordova插件
  • 它通过ionic config命令重新构build你所做的configuration