electron-packagerのignoreオプションが余計なファイルを巻き込みすぎるのを何とかした

Electronのアプリを作成するelectron-packagerコマンドでは、
ignoreオプションでアプリに含めたくないファイルを除外できる。


最初のバージョン

最初はこのような感じでelectron-packagerコマンドを実行していた。

electron-packager . MYukkuriVoice --platform=darwin --arch=x64 --electronVersion=1.7.9 --icon=icns/myukkurivoice.icns \
  --overwrite --asar.unpackDir=vendor \
  --ignore="(\.gitignore|\.gitmodules|bin|docs|icns|test|README.md|vendor/aqk2k_mac|vendor/aqtk1-mac|vendor/aqtk2-mac|vendor/aqtk10-mac)"



でも、これは間違いだった。
ignoreオプションは、Regexpマッチでファイルを拾う。
このコマンド例では、ignoreオプションでbinとかtestとかdocsとかを指定していたので、
ファイルパスの一部にbinやtestやdocsが入っていたら、巻き込まれて作成するアプリから除外されてしまうのだ。
(そして、アプリが動かなくなった…)


どのように直せば良いか

electron-packagerのignoreオプションは複数指定できる。
そして、ignoreオプションのマッチングの仕組みは↓のようになっていて、
file変数にはパッケージのルートからのパス文字列が入っていた。

// node_modules/electron-packager/ignore.js
for (var i = 0; i < ignore.length; i++) {
  if (file.match(ignore[i])) {
    return false
  }
}



よって、次のようにignoreオプションを指定すれば、
余計なファイルを巻き込んで除外せずに済むようになる。

electron-packager . MYukkuriVoice --platform=darwin --arch=x64 --electronVersion=1.7.9 --icon=icns/myukkurivoice.icns \
  --overwrite --asar.unpackDir=vendor \
  --ignore="^/\.gitignore" \
  --ignore="^/\.gitmodules" \
  --ignore="^/bin" \
  --ignore="^/docs" \
  --ignore="^/icns" \
  --ignore="^/test" \
  --ignore="^/README.md" \
  --ignore="^/vendor/aqk2k_mac" \
  --ignore="^/vendor/aqtk1-mac" \
  --ignore="^/vendor/aqtk2-mac" \
  --ignore="^/vendor/aqtk10-mac"



でも、ちょっと待って

よく考えたら、使用しているnode_modulesの中に
テストコードとか、サンプルコードとか、ビルド用のファイルが含まれてる。
それらのファイルはアプリの実行に不要なのだから、除外すべきなのでは?
ドキュメントもasarに固めたら見えないし、要らないよね。


しかし、ignoreオプションで*の指定とかできないらしい(?)。


最終形はこうなりました(^_^;)

electron-packager . MYukkuriVoice --platform=darwin --arch=x64 --electronVersion=1.7.9 --icon=icns/myukkurivoice.icns \
  --overwrite --asar.unpackDir=vendor \
  --ignore="^/MYukkuriVoice-darwin-x64" \
  --ignore="^/README.md" \
  --ignore="^/.git" \
  --ignore="^/.gitignore" \
  --ignore="^/.gitmodules" \
  --ignore="^/bin" \
  --ignore="^/docs" \
  --ignore="^/icns" \
  --ignore="^/test" \
  --ignore="^/vendor/.gitignore" \
  --ignore="^/vendor/aqk2k_mac" \
  --ignore="^/vendor/aqtk1-mac" \
  --ignore="^/vendor/aqtk10-mac" \
  --ignore="^/vendor/aqtk2-mac" \
  --ignore=".DS_Store" \
  --ignore=".babelrc" \
  --ignore=".editorconfig" \
  --ignore=".eslintrc" \
  --ignore=".eslintrc.json" \
  --ignore=".jshintrc" \
  --ignore=".npmignore" \
  --ignore=".npmignore" \
  --ignore=".stylelintrc.json" \
  --ignore=".travis.yml" \
  --ignore="^/node_modules/about-window/LICENSE.txt" \
  --ignore="^/node_modules/about-window/README.md" \
  --ignore="^/node_modules/angular-input-highlight/README.md" \
  --ignore="^/node_modules/angular-input-highlight/test" \
  --ignore="^/node_modules/angular/LICENSE.md" \
  --ignore="^/node_modules/angular/README.md" \
  --ignore="^/node_modules/async/CHANGELOG.md" \
  --ignore="^/node_modules/async/LICENSE" \
  --ignore="^/node_modules/async/README.md" \
  --ignore="^/node_modules/audio-buffer-stream/README.md" \
  --ignore="^/node_modules/audio-buffer-stream/test" \
  --ignore="^/node_modules/balanced-match/LICENSE.md" \
  --ignore="^/node_modules/balanced-match/README.md" \
  --ignore="^/node_modules/bindings/README.md" \
  --ignore="^/node_modules/brace-expansion/README.md" \
  --ignore="^/node_modules/concat-map/LICENSE" \
  --ignore="^/node_modules/concat-map/README.markdown" \
  --ignore="^/node_modules/concat-map/example" \
  --ignore="^/node_modules/concat-map/test" \
  --ignore="^/node_modules/conf/license" \
  --ignore="^/node_modules/conf/readme.md" \
  --ignore="^/node_modules/core-util-is/LICENSE" \
  --ignore="^/node_modules/core-util-is/README.md" \
  --ignore="^/node_modules/core-util-is/test.js" \
  --ignore="^/node_modules/cryptico.js/README.md" \
  --ignore="^/node_modules/cryptico.js/sample" \
  --ignore="^/node_modules/debug/CHANGELOG.md" \
  --ignore="^/node_modules/debug/LICENSE" \
  --ignore="^/node_modules/debug/Makefile" \
  --ignore="^/node_modules/debug/README.md" \
  --ignore="^/node_modules/dot-prop/license" \
  --ignore="^/node_modules/dot-prop/readme.md" \
  --ignore="^/node_modules/electron-config/license" \
  --ignore="^/node_modules/electron-config/readme.md" \
  --ignore="^/node_modules/electron-is-accelerator/LICENSE" \
  --ignore="^/node_modules/electron-is-accelerator/README.md" \
  --ignore="^/node_modules/electron-is-accelerator/test.js" \
  --ignore="^/node_modules/electron-json-storage/CHANGELOG.md" \
  --ignore="^/node_modules/electron-json-storage/README.md" \
  --ignore="^/node_modules/electron-json-storage/doc" \
  --ignore="^/node_modules/electron-json-storage/tests" \
  --ignore="^/node_modules/electron-localshortcut/license" \
  --ignore="^/node_modules/electron-localshortcut/readme.md" \
  --ignore="^/node_modules/electron-log/LICENSE" \
  --ignore="^/node_modules/electron-log/README.md" \
  --ignore="^/node_modules/env-paths/license" \
  --ignore="^/node_modules/env-paths/readme.md" \
  --ignore="^/node_modules/exists-file/CHANGELOG.md" \
  --ignore="^/node_modules/exists-file/LICENSE.md" \
  --ignore="^/node_modules/ffi/CHANGELOG.md" \
  --ignore="^/node_modules/ffi/LICENSE" \
  --ignore="^/node_modules/ffi/README.md" \
  --ignore="^/node_modules/ffi/deps" \
  --ignore="^/node_modules/ffi/example" \
  --ignore="^/node_modules/ffi/src" \
  --ignore="^/node_modules/ffi/test" \
  --ignore="^/node_modules/find-up/license" \
  --ignore="^/node_modules/find-up/readme.md" \
  --ignore="^/node_modules/fs.realpath/LICENSE" \
  --ignore="^/node_modules/fs.realpath/README.md" \
  --ignore="^/node_modules/glob/LICENSE" \
  --ignore="^/node_modules/glob/README.md" \
  --ignore="^/node_modules/glob/changelog.md" \
  --ignore="^/node_modules/inflight/LICENSE" \
  --ignore="^/node_modules/inflight/README.md" \
  --ignore="^/node_modules/inherits/LICENSE" \
  --ignore="^/node_modules/inherits/README.md" \
  --ignore="^/node_modules/intro.js/CODE_OF_CONDUCT.md" \
  --ignore="^/node_modules/intro.js/CONTRIBUTING.md" \
  --ignore="^/node_modules/intro.js/Makefile" \
  --ignore="^/node_modules/intro.js/README.md" \
  --ignore="^/node_modules/intro.js/changelog.md" \
  --ignore="^/node_modules/intro.js/docs" \
  --ignore="^/node_modules/intro.js/example" \
  --ignore="^/node_modules/intro.js/license.md" \
  --ignore="^/node_modules/is-obj/license" \
  --ignore="^/node_modules/is-obj/readme.md" \
  --ignore="^/node_modules/isarray/README.md" \
  --ignore="^/node_modules/lodash/LICENSE" \
  --ignore="^/node_modules/lodash/README.md" \
  --ignore="^/node_modules/minimatch/LICENSE" \
  --ignore="^/node_modules/minimatch/README.md" \
  --ignore="^/node_modules/minimist/LICENSE" \
  --ignore="^/node_modules/minimist/example" \
  --ignore="^/node_modules/minimist/readme.markdown" \
  --ignore="^/node_modules/minimist/test" \
  --ignore="^/node_modules/mkdirp/LICENSE" \
  --ignore="^/node_modules/mkdirp/bin/usage.txt" \
  --ignore="^/node_modules/mkdirp/examples" \
  --ignore="^/node_modules/mkdirp/readme.markdown" \
  --ignore="^/node_modules/mkdirp/test" \
  --ignore="^/node_modules/ms/LICENSE.md" \
  --ignore="^/node_modules/ms/README.md" \
  --ignore="^/node_modules/nan/CHANGELOG.md" \
  --ignore="^/node_modules/nan/LICENSE.md" \
  --ignore="^/node_modules/nan/README.md" \
  --ignore="^/node_modules/nan/doc" \
  --ignore="^/node_modules/nan/nan.h" \
  --ignore="^/node_modules/nan/nan_callbacks.h" \
  --ignore="^/node_modules/nan/nan_callbacks_12_inl.h" \
  --ignore="^/node_modules/nan/nan_callbacks_pre_12_inl.h" \
  --ignore="^/node_modules/nan/nan_converters.h" \
  --ignore="^/node_modules/nan/nan_converters_43_inl.h" \
  --ignore="^/node_modules/nan/nan_converters_pre_43_inl.h" \
  --ignore="^/node_modules/nan/nan_implementation_12_inl.h" \
  --ignore="^/node_modules/nan/nan_implementation_pre_12_inl.h" \
  --ignore="^/node_modules/nan/nan_maybe_43_inl.h" \
  --ignore="^/node_modules/nan/nan_maybe_pre_43_inl.h" \
  --ignore="^/node_modules/nan/nan_new.h" \
  --ignore="^/node_modules/nan/nan_object_wrap.h" \
  --ignore="^/node_modules/nan/nan_persistent_12_inl.h" \
  --ignore="^/node_modules/nan/nan_persistent_pre_12_inl.h" \
  --ignore="^/node_modules/nan/nan_string_bytes.h" \
  --ignore="^/node_modules/nan/nan_typedarray_contents.h" \
  --ignore="^/node_modules/nan/nan_weak.h" \
  --ignore="^/node_modules/nan/tools/README.md" \
  --ignore="^/node_modules/once/LICENSE" \
  --ignore="^/node_modules/once/README.md" \
  --ignore="^/node_modules/os-tmpdir/license" \
  --ignore="^/node_modules/os-tmpdir/readme.md" \
  --ignore="^/node_modules/path-exists/license" \
  --ignore="^/node_modules/path-exists/readme.md" \
  --ignore="^/node_modules/path-is-absolute/license" \
  --ignore="^/node_modules/path-is-absolute/readme.md" \
  --ignore="^/node_modules/photon/CNAME" \
  --ignore="^/node_modules/photon/CONTRIBUTING.md" \
  --ignore="^/node_modules/photon/LICENSE" \
  --ignore="^/node_modules/photon/README.md" \
  --ignore="^/node_modules/photon/docs" \
  --ignore="^/node_modules/photon/sass" \
  --ignore="^/node_modules/pinkie-promise/license" \
  --ignore="^/node_modules/pinkie-promise/readme.md" \
  --ignore="^/node_modules/pinkie/license" \
  --ignore="^/node_modules/pinkie/readme.md" \
  --ignore="^/node_modules/pkg-up/license" \
  --ignore="^/node_modules/pkg-up/readme.md" \
  --ignore="^/node_modules/readable-stream/LICENSE" \
  --ignore="^/node_modules/readable-stream/README.md" \
  --ignore="^/node_modules/ref-struct/History.md" \
  --ignore="^/node_modules/ref-struct/README.md" \
  --ignore="^/node_modules/ref/CHANGELOG.md" \
  --ignore="^/node_modules/ref/README.md" \
  --ignore="^/node_modules/ref/build/Makefile" \
  --ignore="^/node_modules/ref/build/Release/.deps/Release/obj.target/binding/src" \
  --ignore="^/node_modules/ref/build/Release/obj.target/binding/src" \
  --ignore="^/node_modules/ref/build/binding.Makefile" \
  --ignore="^/node_modules/ref/build/binding.target.mk" \
  --ignore="^/node_modules/ref/docs" \
  --ignore="^/node_modules/ref/src" \
  --ignore="^/node_modules/ref/test" \
  --ignore="^/node_modules/rimraf/LICENSE" \
  --ignore="^/node_modules/rimraf/README.md" \
  --ignore="^/node_modules/stream-parser/History.md" \
  --ignore="^/node_modules/stream-parser/LICENSE" \
  --ignore="^/node_modules/stream-parser/README.md" \
  --ignore="^/node_modules/stream-parser/node_modules/debug/.npmignore" \
  --ignore="^/node_modules/stream-parser/node_modules/debug/History.md" \
  --ignore="^/node_modules/stream-parser/node_modules/debug/Makefile" \
  --ignore="^/node_modules/stream-parser/node_modules/debug/Readme.md" \
  --ignore="^/node_modules/stream-parser/node_modules/ms/license.md" \
  --ignore="^/node_modules/stream-parser/node_modules/ms/README.md" \
  --ignore="^/node_modules/stream-parser/test" \
  --ignore="^/node_modules/string_decoder/LICENSE" \
  --ignore="^/node_modules/string_decoder/README.md" \
  --ignore="^/node_modules/temp/LICENSE" \
  --ignore="^/node_modules/temp/README.md" \
  --ignore="^/node_modules/temp/examples" \
  --ignore="^/node_modules/temp/node_modules/rimraf/AUTHORS" \
  --ignore="^/node_modules/temp/node_modules/rimraf/LICENSE" \
  --ignore="^/node_modules/temp/node_modules/rimraf/README.md" \
  --ignore="^/node_modules/temp/node_modules/rimraf/test" \
  --ignore="^/node_modules/temp/test" \
  --ignore="^/node_modules/tunajs/CONTRIBUTE.md" \
  --ignore="^/node_modules/tunajs/README.md" \
  --ignore="^/node_modules/tunajs/tests" \
  --ignore="^/node_modules/wav/History.md" \
  --ignore="^/node_modules/wav/README.md" \
  --ignore="^/node_modules/wav/examples" \
  --ignore="^/node_modules/wav/test" \
  --ignore="^/node_modules/wave-recorder/README.md" \
  --ignore="^/node_modules/wave-recorder/example.js" \
  --ignore="^/node_modules/wrappy/LICENSE" \
  --ignore="^/node_modules/wrappy/README.md" \
  --ignore="^/node_modules/xtend/LICENCE" \
  --ignore="^/node_modules/xtend/Makefile" \
  --ignore="^/node_modules/xtend/README.md" \
  --ignore="^/node_modules/xtend/test.js"



ち・か・ら・お・し!


これ、絶対、保守性悪いわ…
もうやっちゃったから、このまま残すけど…
たいしたアプリサイズの削減にもならないし、皆は、ここまではやらない方が良いぞ(^_^;)