如何打包资源
只想写个图形小工具,本质上还是调用写好的 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
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。