electron 如何将任意资源打包的方法步骤
如何打包资源
只想写个图形小工具,本质上还是调用写好的java程序,因为我觉得在命令行里面来回切目录,复制路径等操作实在是太麻烦了。
那么我现在已经搞定了如何从electron的js事件里获得文件路径,我也搞定了如何在electron的main.js里面创建新的进程执行指令,那么如何使用到打包好的jar包或者其他资源呢?
直接看下packages.json里面吧。
{
"name":"....",
"version":"1.0.0",
"description":"",
"main":"main.js",
"scripts":{
"start":"exportFAVOR=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脚本中,有一个exportFAVOR=debug,这个相当于在debug运行的时候加入了一个环境变量。
怎么读取环境变量呢?在main.js里面这样读取:
console.log("favor:"+process.env.FAVOR)
接下来就是区分运行时来获取资源路径了。
functiongetResPath(){
if(isDebug){
return"./extraResources"
}else{
returnprocess.resourcesPath+"/extraResources"
}
}
仅此记录一下,给可能需要的人。
electron打包的一些坑
我们知道使用electron打包的时候设置asar为true,electron-builder会智能的把一些native的程序不打包到app.asar里面,但是我碰到一个很奇怪的问题,周五的时候需要使用语音的格式转换,用到了amrToMp3和ffmpeg-static这两个库,其中amrToMp3的主要代码:
constexec=require('child_process').exec
constpath=require('path')
constffmpeg=require('ffmpeg-static')
constffmpegPath=ffmpeg.path
functionamrToMp3(filepath,outputDir='./src/mp3'){
returnnewPromise((resolve,reject)=>{
constbasename=path.basename(filepath)
constfilename=basename.split('.')[0]
constetc=basename.split('.')[1]
if(etc!='amr'){
console.log('pleaseinputaamrfile')
return
}
constcmdStr=`${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(`transformtomp3success!${filepath}->${outputDir}/${filename}.mp3`)
}
})
})
}
其中用到了exec这个命令,ffmpegPath打包后基本是****/app.asar/src/node_modules/ffmpeg-static/bin/darwin/x64/ffmpeg,但是打包后运行提示了cannotfound****/app.asar/src/node_modules/ffmpeg-static/bin/darwin/x64/ffmpeg很尴尬,但是我去解压了,明明是存在的,后来我去看了类似的一个库node-notifier,发现用的是execFile这个命令,然后我修改了一下,结果。。。。居然就可以了。这个地方谁知道原因,求解答。。。。
修改之后的程序代码:
varffmpegPath=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('transformtomp3success!'+filepath+'->'+outputDir+'/'+filename+'.mp3');
}
});
到此这篇关于electron如何将任意资源打包的方法步骤的文章就介绍到这了,更多相关electron任意资源打包内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!