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也发展很快。这两者都属于目前快速开发的典型技术。