使用npm和x2B管理cordova插件;package.json

使用npm和x2B管理cordova插件;package.json,npm,cordova-plugins,Npm,Cordova Plugins,我们有一个Angular+Ionic+Cordova项目,其中有多个开发人员,我们希望管理Cordova插件的依赖关系。我们正在使用,并且在手动运行安装命令时(例如,cordova plugin add cordova plugin camera),会在package.json文件的cordova plugins部分添加一行新行。以下是成品的外观: "cordovaPlugins": [ "cordova-plugin-camera", "cordova-plugin-console",

我们有一个Angular+Ionic+Cordova项目,其中有多个开发人员,我们希望管理Cordova插件的依赖关系。我们正在使用,并且在手动运行安装命令时(例如,
cordova plugin add cordova plugin camera
),会在
package.json
文件的
cordova plugins
部分添加一行新行。以下是成品的外观:

"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
中添加一行重复的代码,弄脏了存储库。我们确信必须有一个命令来安装这些,但找不到它。有人能解释一下吗?

是什么导致了我们的问题


我们最初使用它来生成我们的初始应用程序。在运行相应的命令时(即,
cordova plugin add cordova plugin media
cordova plugins
添加一行代码),可以从
package.json中的相关
cordova platforms
cordova plugins
部分添加和删除平台和插件

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

正确管理Cordova插件

事实证明,它使用
package.json
来管理Cordova应用程序在平台和插件方面的状态(看起来是从)

用两个部分填充
package.json
CordovaPlatform
cordovaPlugins
使我们能够执行一个简单的
离子状态恢复
,以使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
,并根据需要安装平台和插件。

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

{
  "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": "bower i && gulp && ionic state reset && ionic config build"
  • 它安装bower依赖项,例如ionic lib
  • 它可以恢复Cordova插件
  • 它重新构建了您通过离子配置命令所做的配置

FWIW,现在我们使用gulp cordova从package.json中读取上述配置的修改版本。将发布完整的解决方案,如果这是解决方案,一旦赏金期到期。运行cordova build时是否未安装它?
cordova plugin add cordova-*
package.json
文件的
cordova plugins
部分添加一行。您是否找到了从ionic正在保存的“状态”安装插件的方法?如果是这样的话,我很想看看。在上面的答案中添加“ionic state restore”可能是有意义的,因为这是问题的实际答案。如果您看到“state is not a valid task”,那是因为您有一个过时的ionic cli版本。state命令在1.3.9版中可用。要修复此问题,只需更新ionic,如so
npm update-g ionic cli
,然后
ionic state restore
即可。此插件是否安装了相同的版本?是否只需拉取最新版本的插件?我觉得奇怪的是,没有一个版本号出现在json@SDude我在答案中添加了版本控制信息。