Кордова 7 - config.xml или package.json?

Я успешно создал и выпустил приложение на Кордове, поэтому я не новичок в платформе, но это было не без его икоты и разочарований.

С Cordova 7 у нас теперь есть config.xml и package.json, в основном содержащие ту же информацию.

Если я хочу изменить, скажем, номер версии или заголовок, который я редактирую, и как я затем обновляю другой файл?

Ничто из того, что я пробовал, похоже, работает, и кажется, что излишне делать изменения дважды?

Ответ 1

Из того, что я могу прочитать в примечаниях к выпуску Cordova 7, package.json всегда будет создан для зеркалирования config.xml всякий раз, когда вы запускаете cordova prepare, если она не существует. Если package.json действительно существует, он будет иметь предпочтение (но только для определенных в нем вещей, таких как плагины и платформы, для других опций конфигурации config.xml прежнему будет использоваться).

Таким образом, это может быть решением для вас сохранить ваши настройки в файле config.xml и всегда удалять package.json перед cordova prepare, возможно, с помощью специального сценария npm.

Ответ 2

Как развитие этого вопроса, похоже, что Cordova 9.0.0 решила прекратить синхронизацию файлов config.xml и package.json. Таким образом, package.json является основным местом для информации о платформе/плагине, что кажется очень странным для любого, кто имеет значительный опыт работы с Cordova.

Я не видел, чтобы это было объявлено нигде очевидным, но наткнулся на это при использовании 9.0.0 и подтвердил ниже:

Изменения включают в себя: GH-750 Удалить сохранение платформ/плагинов в config.xml

Ответ 3

Для номера версии вы можете сохранить его в package.json и добавить скрипт npm с именем "version" который соответствующим образом обновляет config.xml. Тогда всегда используйте npm version вместо изменения номера версии вручную.

Из блога Масимпло:

package.json

  "scripts": {
    ...
    "version": "./bin/update-config-version.sh",
    ...
  },

update-config-version.sh

#!/bin/bash

CONFIG='config.xml'
NEW_VERSION=${npm_package_version}

if [ -e $CONFIG ]; then
    # sed to replace version in config.xml
    sed -i '' "s/\(widget.*version=\"\)\([0-9,.]*\)\"/\1$NEW_VERSION\"/" $CONFIG
    git add $CONFIG
    echo "Updated $CONFIG with version $NEW_VERSION"
else
    echo 'Could not find config.xml'
    exit 1
fi

Там также пакет npm. Там всегда пакет npm. Используйте вот так:

npm install --save-dev cordova-set-version

package.json

  "scripts": {
    ...
    "version": "cordova-set-version --version ${npm_package_version} && git add config.xml",
    ...
  },

Это не исправляет большую часть дублирования, но делает его немного более терпимым. Редактировать: cordova-set-version также переформатирует ваш config.xml и удалит из него все комментарии. Я подал вопрос.