electron项目构建打包缺少dll文件的问题解决办法
最近,在做electron项目中,使用了第三方dll,开发环境运行一切正常,可是当我们打包,最后生成的可执行程序再执行,发现调用dll总是不成功,猜测是少了dll。
后来发现果真是路径问题,我们开发环境,可以通过path.resolve()或着path.join()来指定任意目录下的dll,但是问题来了,到了构建生产环境的时候,我们想象的目录并没有按照开发环境的目录来进行打包了。
很明显的一条就是,我们在根目录下的package.json等文件就没有build到项目的根目录下。构建的时候,只是把相关的html,css,js等文件进行了合并压缩。而dll并不在这些文件之列,自然就不会打包到项目中了。
既然问题明确了,那就需要解决这个打包除html,css,js等文件之外的文件问题了。
好在package.json配置build节点下有这么一个配置项:extraResources:[{from:,to:}],我们只需要将我们需要打包的文件加入到这个配置中即可。
比如,我把dll文件放在了static目录下,这样呢,最后build的时候,不会生成这个目录,但是会有一个resources目录,而这个目录似乎就是根目录的一个软链接。代码中,可以这样写:
var dllpath = path.resolve(__dirname,"../../../static/visadll.dll"); if(process.env.NODE_ENV == production){ dllpath = path.resolve(__dirname,"../../../visadll.dll"); }
项目结构如下所示:
|-static/ |-src/renderer/components/
我的vue文件代码所在位置的上三级目录与static的位置是同一级。
这样,package.json的配置项build下的extraResouces配置如下:
这些需要的文件会打包到根目录下的resources目录下。这个目录很奇怪的地方在于,它虽然是根目录下的resources,但是它在path.resolve()解析到根目录即可,他会自动包含resources目录。
如下图所示,我们经过新的配置并构建,构建完成,打包后项目根目录下的resources目录就会包含我们的dll文件了。