descjop で遊ぼう day 6 : Electronがうまくダウンロードできないとき
descjopを使おうと思って、Electronのダウンロードのところで詰まってしまうことがあります。
Electronがダウンロードし展開し終わったよという
Done, without errors.
が表示されず、そのままunzip状態で止まってしまう現象です。
こうなってしまうと、次に同様の作業をやった場合でもElectronが中途半端な状態で展開されてしまい、Electronのビルドから先のステップに進めなくなってしまいます。
なぜかというと、一回ダウンロードしたElectronを再利用するように出来ているためです。
こうなったときは、キャッシュされているElectronを消去してやることで再実行することが出来、無事Electronのダウンロードを終えることが出来ます。
download-atom-shell-task.coffee · atom/grunt-download-electronでは、次のように定義されています。
grunt.registerTask TaskName, 'Download electron', ->
@requiresConfig "#{TaskName}.version", "#{TaskName}.outputDir"
{version, outputDir, downloadDir, symbols, rebuild, apm, token, appDir} = grunt.config TaskName
downloadDir ?= path.join os.tmpdir(), 'downloaded-electron'
symbols ?= false
rebuild ?= true
apm ?= getApmPath()
version = "v#{version}"
versionDownloadDir = path.join(downloadDir, version)
appDir ?= process.cwd()
done = @async()
... 以下略
つまり、ダウンロードを一時的にされるディレクトリは、os.tmpdir()
つまりOSのテンポラリディレクトリに展開されるようになっています。
ただ、OSのテンポラリディレクトリを探すのがかったるいというケースもあるでしょう。
gruntfileの修正による対応
そこで、./Gruntfile.js
を少し修正します。
現状の./Gruntfile.js
は以下のようになっていると思います。
module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
"download-electron": {
version: "0.35.0",
outputDir: "./electron",
rebuild: true
}
});
grunt.loadNpmTasks('grunt-download-electron');
};
これに、
module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
"download-electron": {
version: "0.35.0",
outputDir: "./electron",
rebuild: true,
downloadDir: ".electron-download" // 追加します
}
});
grunt.loadNpmTasks('grunt-download-electron');
};
のように、downloadDir
というオプションを指定します。
このようにすると、カレントディレクトリ上にElectronのキャッシュがダウンロードされます。
.electron-download
というフォルダが出来ているのが見えましたよね。
以上、Electronがダウンロードうまくできないときのチップスでした。
Colophon
- 編集長
- Greative GK. 原一浩 ( kara_d )
- 製版システム
- Clojure / Compojure / Ring / Enlive / markdown-clj / Jetty / MySQL
- Share this magazine!
- Follow designudge
- Follow @designudge