2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

npm versionでCordova config.xmlのversionも更新する

Last updated at Posted at 2017-01-27

#動機

  • Cordovaのconfig.xmlのversionは手で書き換える必要がありめんどくさい&更新をよく忘れる(でGoogle Playのアップロード時とかに怒られる)
  • 一方package.jsonのversionはCLI(npm version)で更新できる上、major/minor/patchの指定で自動的に採番してくれたりgitのtagを作ってくれたりと便利

というわけでnpm versionで一緒にconfig.xmlも更新できたらいいなと思って調べてみました。

#調べたこと

##npm側

scripts | npm Documentation
npmには様々なタイミングでpackage.jsonのscriptsに書かれたコマンドを実行する機能があります。
npm versionではpreversion, version, postversionが実行されるようになっているので、ここに何かしらを書けばできそうな気がします。

これらの実行タイミングについては以下の記事が参考になりました。
npm version, preversion, postversionの使い分け

preversion → package.json更新 → version → コミット&タグ → postversionという流れのようなので、更新されたバージョン番号を使って別のファイルを更新または生成し、package.jsonと一緒にコミットしたいという場合はversionに書くのが適当なようです。

##Cordova側

version更新のためにconfig.xmlをいじる必要があるのですが、そんなときに便利なのがconfig.xmlの値を取得したり設定したりといったことができるcordova-commonパッケージのConfigParser
プラグインのフック(インストール後にconfig.xmlに設定を加えたりとか)などで使われているようです。

setVersion()という見事に今回の需要にマッチしたメソッドもあるので今回はこれを使用することにします。

#やってみる

実行した環境は以下の通り

  • node.js v6.5.0
  • npm v3.10.7
  • cordova v6.5.0

##必要なものをインストール

$ npm i -D cordova-common

##config.xml更新スクリプト

scripts/update_config_xml_version.js
var path = require('path');
var ConfigParser = require('cordova-common').ConfigParser;
var configXml = new ConfigParser(path.resolve(__dirname, '../config.xml'));
var packageJson = require(path.resolve(__dirname, '../package.json'));

configXml.setVersion(packageJson.version);
configXml.write(); // 上書き保存。setVersionだけではファイルは更新されない

config.xmlやpackage.jsonへのパスは置き場所に応じて適宜調整してください。

##npm-scripts

package.json
{
  "scripts": {
    "version": "node scripts/update_config_xml_version.js && git add config.xml"
  }
}

スクリプト中でGit管理対象のファイルの更新/追加が行われる場合はgit addをお忘れなく。

##実行

$ npm version major
v1.0.0

> project@1.0.0 version /path/to/project
> node scripts/update_config_xml_version.js && git add config.xml

$ cat config.xml | sed '2!d'
<widget id="com.example.project" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">

できた!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?