nodejspkg反編譯
A. 微信小程序反編譯沒保存
沒保存就需要重新編寫。
小程序反編譯,如果沒有保存的話是沒有辦法找回的,需要重新編寫才可以。要想拿到微信小程序源碼,先要拿到小程序的包,用反編譯腳本跑一下,微信小程序代碼包里的所有文件、所有資源就出來了(除了project.config.json小程序配置文件)。
操作時需准備工具:1、nodejs環境,這是反編譯腳本的運行環境,下方有地址。2、小程序包解密工具,PC版解包無需模擬器,附件中有這個。3、反編譯腳本下載,附件中有這個。4、微信PC端,運行小程序,自己下載電腦端微信。
B. 如何獲取微信小程序前端源碼
微信小程序都是在本地運行的,所以我們可以在我們的手機內存中找到小程序的源碼文件。
如果你的手機已經root了,那麼可以直接查找/data/data/com.tencent.mm/MicroMsg/.../appbrand/pkg/路徑中有一段...,這里表示不確定具體一個,一般是很長的數字和字母組成的文件 ,可以先將所有的小程序文件夾刪除,然後重新進入你想要的小程序,這樣就可以確定是哪個文件了,當然,如果沒有root可以使用模擬器來拿,建議還是使用模擬器,更方便一些。
拿到了wxpkg文件,但是我們還差一步,需要將這個文件進行反編譯得到內部的各個文件才可以。
wxpkg 是經過微信加密的文件,無法直接通過解壓來獲得,如果開發比較深入的話,可以直接拿到github的star比較多的wxunpkg ,然後安裝運行去解壓,如果不是很擅長的話,可以直接使用已經做好的傻瓜式的桌面軟體,直接進行反編譯處理 。
原理介紹:網頁鏈接
軟體獲取:網頁鏈接
我的建議還是直接去看下github的源碼,了解下反編譯原理,然後nodejs語言不擅長可以拿其他的語言來嘗試處理下,算是學習也可以。
C. require方法在js編譯後被注釋
RequireJS Optimizer 對腳本的優化支持目前流行的UglifyJS 和 Closure Compiler 兩種壓縮方式,UglifyJS 需要 NodeJS 環境支持,而Closure Compiler 則需要 Java 環境。這篇文章是以運行於 NodeJS 的 UglifyJS 來優化的,這也是RequireJS Optimizer 默認的壓縮方法。
首先需要安裝Node 0.4.0,然後下載r.js,下載好以後就可以在命令行里對前端代碼進行優化了。r.js的參數傳遞使用方式,一是直接加在命令行後面,如下:
node r.js -o baseUrl=. paths.jquery=some/other/jquery name=main out=main-built.js
二是新建一個配置文件,例如 build.js(推薦使用這種方式),這樣配置更方便,如下:
node r.js -o build.js
build.js 的配置代碼如下:
{ baseUrl: "../js", dir: "../dist", optimize: "uglify", optimizeCss: "standard.keepLines", mainConfigFile: "../js/main.js", removeCombined: true, fileExclusionRegExp: /^./, moles: [
{ name: "app/dispatcher",
},
{ name: "app/in-storage", exclude: [ "jquery", "app/common", "pkg/DatePicker/app"
]
}
]
}
基本參數介紹
appDir
應用程序的最頂層目錄。可選的,如果設置了的話,r.js會認為腳本在這個路徑的子目錄中,應用程序的文件都會被拷貝到輸出目錄(dir 定義的路徑)。如果不設置,則使用下面的 baseUrl 路徑。
baseUrl
dir
輸出目錄的路徑。如果不設置,則默認為和 build 文件同級的 build 目錄。
optimize
JavaScript 代碼優化方式。可設置的值:
- "uglify:使用UglifyJS 壓縮代碼,默認值;- "uglify2":使用2.1.2+ 版本進行壓縮;- "closure": 使用Google's Closure Compiler 進行壓縮合並,需要 Java 環境;- "closure.keepLines":使用Closure Compiler 進行壓縮合並並保留換行;- "none":不做壓縮合並;optimizeCss
CSS 代碼優化方式,可選的值有:
- "standard":標準的壓縮方式;
- "standard.keepLines":保留換行;
- "standard.keepComments":保留注釋;
- "standard.keepComments.keepLines":保留換行;
- "none":不壓縮;mainConfigFile
如果不想重復定義的話,可以使用這個參數配置 RequireJS 的配置文件路徑。
removeCombined
刪除之前壓縮合並的文件,默認值 false。
fileExclusionRegExp
要排除的文件的正則匹配的表達式。
moles
定義要被優化的模塊數組。每一項是模塊優化的配置,常用的幾個參數如下:
- `name:`模塊名;- `include:`額外引入的模塊,`create:`如果不存在,是否創建。默認`false`;- `exclude:`要排除的模塊。有些模塊有公共的依賴模塊,在合並的時候每個都會壓縮進去,例如一些基礎庫。使用 exclude 就可以把這些模塊在壓縮在一個更早之前載入的模塊中,其它模塊不用重復引入。- { baseUrl: "../js", dir: "../dist", optimize: "uglify", optimizeCss: "standard.keepLines", removeCombined: true, fileExclusionRegExp: /^./, moles: [
- { name: "app/dispatcher",
- },
- { name: "app/in-storage", exclude: [ "jquery", "app/common", "pkg/DatePicker/app"
- ]
- }
- ], paths: { jquery: 'lib/jquery', underscore: 'lib/underscore', backbone: 'lib/backbone/backbone', backboneLocalstorage: 'lib/backbone/backbone.localStorage', text: 'lib/require/text'
- }, shim: { underscore: { exports: '_'
- }, backbone: { deps: [ 'underscore', 'jquery'
- ], exports: 'Backbone'
- }, backboneLocalstorage: { deps: ['backbone'], exports: 'Store'
- }
- }
- }
- @echo off
- echo build...
- e:
- cd E:SCMSRCscm-html ew-scm-html ools
- node r.js -o build.js
- echo Press any key to exit!
- echo. & pause
- var mods = someCondition ? ['a', 'b'] : ['c', 'd'];require(mods);
- require(['a', 'b']);
- define(['a', 'b'], function (a, b) {});
- (function () { //almond will be here
- //main and its nested dependencies will be here}());
所有的模塊編譯為一個文件,沒有動態的載入;
所有的模塊都需要在 define() 定義 ID 和依賴,這個RequireJS Optimizer 會處理;
只能有一個requirejs.config() 或者 require.config() 調用;
不能使用 Require JS 多版本功能;
不能使用require.toUrl() 或者 require.nameToUrl();
不能使用packages/packagePaths 配置。
默認情況下,所有的模塊都是相對於這個路徑的。如果沒有設置,則模塊的載入是相對於 build 文件所在的目錄。另外,如果設置了appDir,那麼 baseUrl 應該定義為相對於 appDir 的路徑。
其它事項
RequireJS 配置也可以放到 RequireJS Optimizer配置文件裡面,例如:
RequireJS Optimizer 的配置參數還有很多,完整的參數介紹可以看這里:
example.build.js
為方便運行,可以新建一個批處理文件:
注意事項:RequireJS Optimizer 只支持使用 require 和 define 語法定義的模塊,因此下面這種通過變數定義的方式是不支持的:
而如果是這樣定義則可以:
或者:
進一步優化
使用 r.js 優化後的代碼可以使用almond來載入。almond 是一個輕量的 AMD 載入器,提供了最基礎的 AMD API 實現以及模塊載入功能。almond 只有不到 400 行代碼,要比 RequireJS 小很多。可以使用 r.js 把 almond 一起合並到業務代碼的前面,如下:
almond 特別適合使用 AMD 的網站或應用,但也有一些限制:
如果你的項目中沒有這些問題的話,可以放心使用 almond 進行載入。
D. 為什麼裝 node.js 要先裝 python.python 起到了什麼作用
Node.js 與 Python 作為後端服務的編程語言各有什麼優劣看過Node.js Web和Node下ExpressWeb框架的開發代碼,覺得其好處是和前端同一個語言,相對也屬於比較輕的,於是框架技術設施提供的特性有限。而PythonWeb系相對選擇就很多,目前流行的Flask和Django,Flask相對比較輕,Django屬於All In One,Web開發的東西基本都囊括進來了。而且PythonWeb下除了上面這兩個,還有更多的框架和技術選擇,相對可調用的包技術基礎可能比Node強一點,雖然Node也發展很快。這兩者都屬於目前快速開發的典型技術。