压缩和混淆node.js服务端代码

在前端我们有webpack,gulp等构建工具提供了从项目结构搭建到部署打包,基本所有工作流程所需要的都被覆盖到了。

在后台node.js写的服务端却是透明,很多时候我们不愿意交付透明的代码。这个时候就需要对js代码进行压缩混淆。

目的

我有一个express纯api后台项目,在发布之前我需要对他进行压缩混淆。在开发完成以后我希望执行一个命令就能得到完整,压缩混淆之后的代码。然后一个命令启动,运行,维护等。

方案查找

百度谷歌上网找文章。找到了下面几种方案,但是都没有很好的案例可以参考。

这里列出几个与js混淆,编译,打包相关的库或网站:

  1. 混淆

    • JavaScript obfuscator-一个强大的JS混淆器。
    • 萨满科技-一套JS代码安全问题解决方案。
    • UglifyJS2 - 仅支持ECMAScript 5,更高的版本需要用Babel转换
  2. 编译
    • bytenode,一个极简的Node.js字节码编译器。
  3. 打包
    • ncc 可以把Node.js项目打包成一个js单文件,支持 TypeScript,动态导入。
    • pkg 可以把Node.js项目打包成一个二进制的可执行文件,pkg不支持动态导入,但是会将Node本身一起打包,可以实现在没安装Node.js的环境运行。
    • pmq20/node-packer 也能打包成一个二进制的可执行文件,它的优势在于支持各种形式的require, 也支持C++模块。可惜项目已经两年没更新了,只支持到Node.js 8.3.0, 对于更高版本的支持,请移步slee047/node-packer。

来源:https://juejin.im/post/5d89e996e51d453bc64802c0
作者:Winston_Lee

javascript-obfuscator

简介:A free and efficient obfuscator for JavaScript (including ES2017). Make your code harder to copy and prevent people from stealing your work. This tool is a Web UI to the excellent (and open source)

一个免费和高效的JavaScript混淆器(包括ES2017)。让你的代码更难复制,防止别人窃取你的成果。这个工具是一个优秀的Web UI(并且是开源的)

官网:https://obfuscator.io/

这个库很像在线JavaScript代码压缩网站,实际上也可以做一个在线压缩代码的网站。不过他吸引我的是他的cli工具。

❗ 作者在Github上说了没有很多时间来维护这个项目了,使用请慎重考虑。

文档

官网文档:https://github.com/javascript-obfuscator/javascript-obfuscator/

自己翻译:https://sunseekerx.github.io/javascript-obfuscator-README.zh-CN.md/

使用

0x0 全局安装javascript-obfuscator

npm i javascript-obfuscator -g

0x1 例如一个express项目,在项目根目录下新建javascript-obfuscator.json

{"compact": true,"controlFlowFlattening": true,"controlFlowFlatteningThreshold": 0.75,"deadCodeInjection": true,"deadCodeInjectionThreshold": 0.4,"debugProtection": false,"debugProtectionInterval": false,"disableConsoleOutput": true,"identifierNamesGenerator": "hexadecimal","log": false,"renameGlobals": false,"rotateStringArray": true,"selfDefending": true,"stringArray": true,"stringArrayEncoding": "base64","stringArrayThreshold": 0.75,"transformObjectKeys": true,"unicodeEscapeSequence": false
}

0x2 在package.jsonscript代码块中加上如下命令

下面命令会将压缩好的文件放在根目录下的obfuscated文件夹中,可以看到代码都是经过压缩混淆的,如果开启了selfDefending选项,如果代码经过格式化工具格式化出来也是无法运行的。

javascript-obfuscator ./ --output ./obfuscated --exclude node_modules --config javascript-obfuscator.json

问题

  • .js为后缀的文件会被压缩混淆但是其他的文件没有复制,达不到想要的开发完成一个命令压缩混淆代码,然后可以得到完成的可以部署的项目。(如果对shell脚本熟悉,可以自己写脚本实现。)
  • 项目已经停更,作者没有精力继续维护,存在不能用风险

UglifyJS2

UglifyJS是一个JavaScript解析器,缩小器,压缩器和美化工具包。

UglifyJS is a JavaScript parser, minifier, compressor and beautifier toolkit.

Note:

  • uglify-js@3 has a simplified API and CLI that is not backwards compatible with uglify-js@2.
  • Documentation for UglifyJS 2.x releases can be found here.
  • uglify-js only supports JavaScript (ECMAScript 5).
  • To minify ECMAScript 2015 or above, transpile using tools like Babel.

官方GitHub仅仅支持ECMAScript 5,弃用。

总结

就目前来看并没有一个很好的方案去压缩混淆Node的项目。不过javascript-obfuscator已经很接近我想要的效果了。后续更多的使用体验或更多的选择,我会继续写一篇文章。

压缩和混淆node.js服务端代码相关推荐

  1. 服务器项目混淆,压缩和混淆node.js服务端代码

    压缩和混淆node.js服务端代码 在前端我们有webpack,gulp等构建工具提供了从项目结构搭建到部署打包,基本所有工作流程所需要的都被覆盖到了. 在后台node.js写的服务端却是透明,很多时 ...

  2. node.js服务端代码学习

    node.js不会自动重启,需要用到supervisor,查看代码的更改,随时重启node.js supervisor 安装 $ npm install -g supervisor 运行 app.js ...

  3. rds基于什么开发_为什么不学基于TypeScript的Node.js服务端开发?

    为什么不学?学不动了吗?!别躺下啊,我扶你起来! 我们早就知道,如今的JavaScript已经不再是当初那个在浏览器网页中写写简单的表单验证.没事弹个alert框吓吓人的龙套角色了.借助基于v8引擎的 ...

  4. node.js服务端笔记文档学会写接口,学习分类:path、包、模块化、fs、express、中间件、jwt、开发模式、cors。

    node.js 学习笔记 node.js服务端笔记文档学会写接口,path.包.模块化.fs.express.中间件.JWT.开发模式.cors. gitee:代码接口笔记 1什么是node.js n ...

  5. 56 Node.js服务端开发入门

    技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.服务器端基本概念 1.1 网站的组成 网站应用程序主要分为两大部分:客户端和服务器端. ...

  6. node.js服务端搭建电影网站

    movieService[电影网站]服务端 基于node.js的express搭建的电影网站后台服务器,数据库为MongoDB,具有用户登录.注册.权限管理.专栏文章.点赞.电影推荐及增删改查管理的完 ...

  7. Node.js服务端开发总结(一)

    一.Node简介 为什么要学习Node 前端必备技能.可以更好的学习前端框架.能够进一步了解Web,有助于了解后端开发. Node是什么 Node.js是基于Chrome的V8 JavaScript引 ...

  8. bsdiff php,Apk差分升级Android客户端和Node.js服务端实现

    核心的内容是bsdiff和bspatch 源码根目录/bootable/recovery/applypatch下找到,bsdiff官网同样也是可以的,编出来的二进制文件可以在源码根目录out/host ...

  9. 签到APP:android入门级小项目,Node.js 提供服务端接口。

    2019独角兽企业重金招聘Python工程师标准>>> ###一.项目描述   实验室小伙伴们通过APP连接实验室路由器,比对路由器Mac地址进行签到.此外小伙伴们还可通过APP进行 ...

最新文章

  1. MySQL优化经验-值得细细品读
  2. linux centos git 自动更新,centos 升级git到高级版本
  3. vue学习笔记(二)- 数据绑定、列表渲染、条件判断
  4. prometheus命令_Prometheus 入门
  5. 文件字节输出流 java
  6. android java写文件_Android中文件的读写(一)----流操作
  7. python表单验证_python表单验证封装
  8. MySQL学习之——锁(行锁、表锁、页锁、乐观锁、悲观锁等)
  9. 52.网络参数管理者: DHCP
  10. Marshmallow详解
  11. java毕业设计学生社团管理与评价系统Mybatis+系统+数据库+调试部署
  12. Windows Subsystem for Android (WSA) 下载:在 Windows 11 上运行 Android 应用
  13. Java 小练习(图形面积计算器)
  14. STM32之定时器详解
  15. Python音乐可视化
  16. 你不知道的css——4. 基线、中线、x-height、单位ex(含文本与图标对齐技巧)
  17. c语言有哪些系统函数,C语言常用系统函数.doc
  18. 华师大 OJ 2822
  19. 连锁酒店网络互联解决方案
  20. docker容器启动后无法访问宿主机host

热门文章

  1. 基于机智云平台的智能家居系统
  2. Low Poly Experiment
  3. ESP8266 AT指令
  4. Python项目之学生管理系统
  5. C语言:实验5-1 使用函数计算两个复数之积.2021-07-23
  6. 弹出式窗口及网页对话框
  7. stm32初学之Systick
  8. 感人的小故事,谁懂谁就会流泪
  9. SQL语句统计排行前10
  10. unity3D游戏开发十五之NGUI二