背景:这我来本公司的第一个任务,中间踩了很多坑。万幸的是最终解决了!我们所采用的技术栈是midway.js(node的框架,可以用koa、egg、express代替)+so+pkg。
so:作为现阶段可逆难度比较大的技术手段,采用so来做加密的案例有很多,这个就不过多的赘述了,动C++的做起来很方便,也可以用dll,用法大体类似。
pkg:作为JS的打包工具,会把环境和依赖都打包进一个可执行文件,随便复制到相应的地方就可以用了!
1、so的node使用,直接上代码
1 | ini复制代码const [data, key] = base64.decode(deCryptoKey).split(','); |
2、PKG打包配置——package.json
1 | go复制代码package.json |
3、PKG打包配置——dockerfile
1 | bash复制代码FROM nikolaik/python-nodejs:python3.8-nodejs12 |
4、PKG打包配置——bootstrap.js
1 | ini复制代码// 加载所有js文件-解决路由丢失问题 |
总结遇到的坑
1、python问题
换源、npm rebuild
2、项目启动问题
Node启动换为直接运行
3、npm build 丢失二进制文件问题
dockerfil复制进去
4、无效的内存地址或 nil 指针取消引用
so包不对
5、路由找不到
与作者沟通加了preloadModules方法
6、native complate have not……
将依赖放进打包目录assets下
7、V8报错
降低node版本
8、数据库dao无法加载
执行目录有问题,解决方案用:join(__dirname, ‘../‘, it)))
后续优化
1、因为我们用了SO,所以导致打出来的docker镜像比较大,后续可以采用二次打包,打出来要缩小十倍左右!
2、或者把SO做成服务,用SDK调用(我们的方案)
本文转载自: 掘金