壓縮和混淆node.js服務端代碼

壓縮和混淆node.js服務端代碼

在前端我們有webpack,gulp等構(gòu)建工具提供了從項目結(jié)構(gòu)搭建到部署打包,基本所有工作流程所需要的都被覆蓋到了。

在后臺node.js寫的服務端卻是透明,很多時候我們不愿意交付透明的代碼。這個時候就需要對js代碼進行壓縮混淆。

目的

我有一個express純api后臺項目,在發(fā)布之前我需要對他進行壓縮混淆。在開發(fā)完成以后我希望執(zhí)行一個命令就能得到完整,壓縮混淆之后的代碼。然后一個命令啟動,運行,維護等。

方案查找

百度谷歌上網(wǎng)找文章。找到了下面幾種方案,但是都沒有很好的案例可以參考。

這里列出幾個與js混淆,編譯,打包相關(guān)的庫或網(wǎng)站:

  1. 混淆
  2. 編譯
    • bytenode,一個極簡的Node.js字節(jié)碼編譯器。
  3. 打包
    • ncc 可以把Node.js項目打包成一個js單文件,支持 TypeScript,動態(tài)導入。
    • pkg 可以把Node.js項目打包成一個二進制的可執(zhí)行文件,pkg不支持動態(tài)導入,但是會將Node本身一起打包,可以實現(xiàn)在沒安裝Node.js的環(huán)境運行。
    • pmq20/node-packer 也能打包成一個二進制的可執(zhí)行文件,它的優(yōu)勢在于支持各種形式的require, 也支持C++模塊??上ы椖恳呀?jīng)兩年沒更新了,只支持到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)。讓你的代碼更難復制,防止別人竊取你的成果。這個工具是一個優(yōu)秀的Web UI(并且是開源的)

官網(wǎng):https://obfuscator.io/

這個庫很像在線JavaScript代碼壓縮網(wǎng)站,實際上也可以做一個在線壓縮代碼的網(wǎng)站。不過他吸引我的是他的cli工具。

? 作者在Github上說了沒有很多時間來維護這個項目了,使用請慎重考慮。

文檔

官網(wǎng)文檔: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文件夾中,可以看到代碼都是經(jīng)過壓縮混淆的,如果開啟了selfDefending選項,如果代碼經(jīng)過格式化工具格式化出來也是無法運行的。

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

問題

  • .js為后綴的文件會被壓縮混淆但是其他的文件沒有復制,達不到想要的開發(fā)完成一個命令壓縮混淆代碼,然后可以得到完成的可以部署的項目。(如果對shell腳本熟悉,可以自己寫腳本實現(xiàn)。
  • 項目已經(jīng)停更,作者沒有精力繼續(xù)維護,存在不能用風險

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,棄用。

總結(jié)

就目前來看并沒有一個很好的方案去壓縮混淆Node的項目。不過javascript-obfuscator已經(jīng)很接近我想要的效果了。后續(xù)更多的使用體驗或更多的選擇,我會繼續(xù)寫一篇文章。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文介紹的是常見的3種工具的使用說明情況。 三種工具為: 1.Google Closure Compiler(本文...
    凡凡的小web閱讀 5,706評論 0 1
  • 在現(xiàn)在的前端開發(fā)中,前后端分離、模塊化開發(fā)、版本控制、文件合并與壓縮、mock數(shù)據(jù)等等一些原本后端的思想開始...
    Charlot閱讀 5,669評論 1 32
  • JS 簡史 Web 的興起已經(jīng)把 JavaScript 帶到一個前所未有的地步, 了解JS 的歷史更好的使用JS ...
    迷緣火葉閱讀 1,890評論 0 1
  • 一 、安裝流程: 1:安裝node 2:安裝npm 3:安裝– uglifyjs ,命令行cmd,在輸入:npm ...
    約書亞Luis閱讀 5,185評論 1 1
  • 春之初,風不思我。 夏之初,濕泥留香。 我耗盡一生頑固的等 驟起的風 無意里揚起柳絮漫天 驚醒了城 瞬間褪去了蒼白...
    得之我幸11111閱讀 399評論 0 0

友情鏈接更多精彩內(nèi)容