编译的困扰-经验分享

野生程序猿-杂烧5年前随意分享2454

开发的时候我们编译经常遇到坑,一会要用python3,一会又要用python 2.7的情况,nodejs一会要这个版本,一会要那个版本的情况,甚至npm都有版本要求。


在使用nodejs,electron开发过程中,我们一般npm install -g windows-build-tools 安装简易编译环境。这个时候会经常遇到奇奇怪怪的问题。


目前我有几个方案解决

1、专门建立编译用虚拟机,装不同的编译环境,用于编译,编译完了直接复制到开发环境使用。

随便列举几个自己编译遇到的实际问题

(1)实现electron加载dll功能,安装winax库(其他的库感觉没有这个库方便)。坑贼大,挑electron版本(nodejs,abi有特别讲究),简易编译环境根本没有用。后来虚拟机装全新系统,装几个G的VS,通过快照功能不停的试,最后再切换不同版本electron后编译成功了。尽管这个用于编译的electron与自己常用的electron版本不同,但是复制文件过去能正常使用。

(2)electron使用sqlite。nodejs下使用sqlite3是超级简单的,直接npm install sqlite3。electron下使用必须重新编译。开发环境编译的库太多,电脑里乱七八糟的,死活编译异常,解决了一个又一个还是不行。于是虚拟机快照回去初始编译环境,瞬间解决。复制出来用,挺完美的。

我准备了多个版本的虚拟机,来解决不同的编译环境问题,效果挺好的。一些老的库但是挺使用的,在老的nodejs版本下才能编译通过,很多甚至还要32位的。


2、bat设置临时变量。来解决一些挑python版本、nodejs版本、npm版本的库

先聊一下,这个方法的由来。很多年前用过一款软件wex5,它可以把h5的网页变成app。这个软件集成了一个开发环境,集成了cordova、jre、nodejs、adt-sdk、gradle。于是自己理解悟出了一套用bat设置临时环境变量,来改良编译的方法。

如我用cordova编译,直接cmd后运行,set.bat,然后就可以 cordova build android,直接编译了

[set.bat]

set MY_DIR=%CD%
set JAVA_HOME=%MY_DIR%\java\jre1.8
set PATH=%MY_DIR%\java\jre1.8\bin;%PATH%
set PATH=%MY_DIR%\node;%PATH%
set ANDROID_HOME=%MY_DIR%\tools\adt-sdk
set PATH=%MY_DIR%\tools\adt-sdk\tools;D:\WeX5_V3.8\tools\adt-sdk\platform-tools;%PATH%
set ANT_HOME=%MY_DIR%\tools\apache-ant
set CLASSPATH=%ANT_HOME%\lib
set PATH=%ANT_HOME%\bin;%PATH%
set GRADLE_HOME=C:\gradle-3.3
set PATH=%GRADLE_HOME%\bin;%PATH%
set PATH=%MY_DIR%\tools\cordova\bin;%PATH%
set _JAVA_OPTIONS=-Xmx512M

对于python,nodejs很多实际使用中,电脑上有多个版本,我们也可以。

[set.bat]

set PATH=D:\Python_v2.7.15;D:\node_v6.11.2;%PATH%
set PATH=D:\Python_v3.7.2;D:\node_v12.16.3;%PATH%
set PATH=D:\Python_v3.9.1;D:\node_v14.21.1;%PATH%


3、寻找网上编译好的资源

好心的网友或者一些团体组织有把一些编译繁琐的库编译好了,给大家直接用。

像sqlite3可以直接下载了 https://registry.npmmirror.com/binary.html?path=sqlite3/

像现在浏览器不支持flash了,我们就可以用electron来打包客户端,同时支持flash,官网有相关文档(新版本已经删除了, 切回老版本可以看到)。


相关文章

介绍一款文件比较工具Beyond Compare

介绍一款文件比较工具Beyond Compare

这款软件除了可以比较我们的代码差异,还可以比较图片形状差异。有以下几个优点1、代码支持特殊字符,如换行符的一些差异(不同操作系统,如linux跟windows下很多时候会有这个现象)。2、支持上下文功...

python小网站开发

看了前面讲的开发分段,开发小网站其实需要到的知识点不太多,有其他语言基础的基本可以直接上手。【views.py】""" 从module里 取方法,直接把数据提...

E语言吓退编程老司机

E语言吓退编程老司机

有门开发语言叫E语言,中文的编程语言。很多开发者瞧不上,但是少部分初中毕业的却用来开发外挂,而且赚了不少钱。很多人觉得e语言不稳定,玩游戏的都知道,其实稳定性特别强,只是开发没有生态,然后...

开发UI框架:【laylte】Svelte版LAYUI(缓一下,继续钻研一下填填坑)

开发UI框架:【laylte】Svelte版LAYUI(缓一下,继续钻研一下填填坑)

接下来准备做全局的方法了,象弹窗,还是希望尽量做到一句话调用。layui的弹窗组件里有一个tips功能,把我难住了。感觉这个jquery比较容易实现。有这样一个场景,滚动的页面里如果有tips功能,需...

如何判断一个经纬度是哪个省?

需求是这样的,有个卖gps防盗器的公司,需要分析出用户去年一年内经过了那些城市?假设有10万个用户,每个用户有100万个轨迹点。我们怎么分析呢?常规方法是一个点一个点的分析,那就是10w*100w=1...

vue通过组件的方式制作教学软件翻牌游戏环节

vue通过组件的方式制作教学软件翻牌游戏环节

为了方便学生记忆学习,将记忆知识点做成了翻牌游戏形式。由于记忆点知识比较多,我们可以设计成多个关卡,每个关卡就是一些知识点配置,通过组件的形式加载,更为合理,更为方便。【fanpai.vue】<...