您好,登錄后才能下訂單哦!
這篇文章主要講解了electron將任意資源打包的方法,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。
如何打包資源
只想寫個圖形小工具,本質上還是調用寫好的 java 程序,因為我覺得在命令行里面來回切目錄,復制路徑等操作實在是太麻煩了。
那么我現在已經搞定了如何從 electron 的 js 事件里獲得文件路徑,我也搞定了如何在 electron 的 main.js 里面創建新的進程執行指令,那么如何使用到打包好的 jar 包或者其他資源呢?
直接看下 packages.json 里面吧。
{ "name": "....", "version": "1.0.0", "description": "", "main": "main.js", "scripts": { "start": "export FAVOR=debug && electron .", "pack": "electron-packager ./ yourAppName --platform=darwin --arch=x64 --app-version=0.0.1 --app-bundle-id=com.xxxx.yourAppName --out=build --overwrite --extra-resource='./extraResources'" }, "build": { "extraResources": [ "./extraResources/**" ] }, }
需要注意的是 build 里面加了一個 extraResources,另外,通過 electron-packager 打包的參數里面也加上一個 --extra-resource='./extraResources'
然后打包的時候就可以把你想要的任何文件打包進去了,jar 也好,python 腳本也好。
如何引用資源
需要注意的是,debug 運行和 release 運行是不一樣的,這里,我們就需要一個東西來在運行時區分,我現在是 debug 還是 release。
注意上面的 json 腳本中,有一個 export FAVOR=debug,這個相當于在 debug 運行的時候加入了一個環境變量。
怎么讀取環境變量呢?在 main.js 里面這樣讀取:
console.log("favor: " + process.env.FAVOR)
接下來就是區分運行時來獲取資源路徑了。
function getResPath() { if (isDebug) { return "./extraResources" } else { return process.resourcesPath + "/extraResources" } }
僅此記錄一下,給可能需要的人。
electron打包的一些坑
我們知道使用electron打包的時候設置asar為true,electron-builder會智能的把一些native的程序不打包到app.asar里面,但是我碰到一個很奇怪的問題,周五的時候需要使用語音的格式轉換,用到了amrToMp3和ffmpeg-static這兩個庫,其中amrToMp3的主要代碼:
const exec = require('child_process').exec const path = require('path') const ffmpeg = require('ffmpeg-static') const ffmpegPath = ffmpeg.path function amrToMp3(filepath, outputDir = './src/mp3') { return new Promise((resolve, reject) => { const basename = path.basename(filepath) const filename = basename.split('.')[0] const etc = basename.split('.')[1] if (etc != 'amr') { console.log('please input a amr file') return } const cmdStr = `${ffmpegPath} -y -i ${filepath} ${outputDir}/${filename}.mp3` exec(cmdStr, (err, stdout, stderr) => { if (err) { console.log('error:' + stderr) reject('error:' + stderr) } else { resolve(`${outputDir}/${filename}.mp3`) console.log(`transform to mp3 success! ${filepath}->${outputDir}/${filename}.mp3`) } }) }) }
其中用到了exec這個命令,ffmpegPath打包后基本是****/app.asar/src/node_modules/ffmpeg-static/bin/darwin/x64/ffmpeg,但是打包后運行提示了can not found ****/app.asar/src/node_modules/ffmpeg-static/bin/darwin/x64/ffmpeg 很尷尬,但是我去解壓了,明明是存在的,后來我去看了類似的一個庫node-notifier,發現用的是execFile這個命令,然后我修改了一下,結果。。。。居然就可以了。這個地方誰知道原因,求解答。。。。
修改之后的程序代碼:
var ffmpegPath = path.join( __dirname, 'bin', platform, arch, platform === 'win32' ? 'ffmpeg.exe' : 'ffmpeg' ) execFile(ffmpegPath, ['-y', '-i', inputPath, cmdStr], function (err, stdout, stderr) { if (err) { console.log('error:' + stderr); reject('error:' + stderr); } else { resolve(outputDir + '/' + filename + '.mp3'); console.log('transform to mp3 success! ' + filepath + '->' + outputDir + '/' + filename + '.mp3'); } });
看完上述內容,是不是對electron將任意資源打包的方法有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。