如何打包资源
只想写个图形小工具,本质上还是调用写好的 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'); } });
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?