Кордова 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
и удалит из него все комментарии. Я подал вопрос.