所有属性名称,许多变量都有它们的原始名称。即使明确指定了Terser的mangle选项:
这是网页包配置:
const TerserPlugin = require('terser-webpack-plugin');
const path = require('path');
module.exports = {
entry: './src/scripts/index.ts',
devtool: 'inline-source-map',
module: {
rules: [
{
test: /\.tsx?$/,
use: {
loader: 'ts-loader',
options: { configFile: 'tsconfig-build.json' }
},
exclude: /node_modules/,
},
],
},
resolve: {
extensions: [ '.tsx', '.ts', '.js' ],
},
plugins: [ ],
// PROBLEMS HERE:
optimization: {
minimize: true,
minimizer: [new TerserPlugin({
sourceMap: false,
extractComments: false, // To avoid separate file with licenses.
terserOptions: {
mangle: true,
sourceMap: false,
//keep_classnames: false,
keep_fnames: false,
toplevel: true,
},
})],
},
output: {
path: path.resolve(__dirname, resultDirPath),
filename: 'main.js',
publicPath: './',
}
}
我错过了配置中的什么吗?
mangle:{properties:true}
是安全的,如果你没有进行内省或其他在TypeScript中不典型的魔法:
class MyClassName {
constructor(public arg: string) {
console.log(arg);
}
getContext() {
console.log("I'm not mangled because I might be a HTMLCanvasElement.getContext");
}
someCustomMethodName() {
console.log("What's my name?");
}
}
const x = new Foo("Hello world");
x.getContext();
x.someCustomMethodName();
将变成
(() => {
const e = new class {
constructor(e) {
this.o = e, console.log(e);
}
getContext() {
console.log("I'm not mangled because I might be a HTMLCanvasElement.getContext");
}
t() {
console.log("What's my name?");
}
}("Hello world");
e.getContext(), e.t();
})();
不幸的是,没有简单的解决方案,而这段代码已经是使用Terser所能得到的最好的代码。
然而,我找到了一个完美的解决方案:“JavaScript混淆器”——https://github.com/javascript-obfuscator/javascript-obfuscator#readme
和它的WebPack插件:“javascript-obfucator plugin for Webpack”-https://github.com/javascript-obfuscator/webpack-obfuscator
顺便说一句,在我的情况下,它只大约35%。
所以,总结一下,你所需要的一切,只是为了:
const JavaScriptObfuscator = require('webpack-obfuscator');
// ...
// webpack plugins array
plugins: [
new JavaScriptObfuscator ({
rotateUnicodeArray: true
}, ['excluded_bundle_name.js'])
],
这就是全部!
我相信在你的原始配置中,你需要添加mangle。属性以使ES6类方法和数据成员被损坏。为了避免损坏外部库,我使用与下面的正则表达式匹配的前缀策略“唯一地”命名要损坏的所有方法和数据成员。
new TerserPlugin({ terserOptions: { mangle: { properties: { regex: /(^P1|^p1|^_p1)[A-Z]\w*/ } } } })
"terser-webpack-plugin": "^2.2.1",
这种方法的细微之处在于:
错误日志: com.android.build.api.transform.transformException:com.android.ide.common.Process.processException:java.util.concurrent.executionException:com.android.ide.common.Process.processException:org.gra
我是不是漏掉了什么?我应该如何使用这些异步方法来处理这样的错误响应呢?
Liniting是一个检查你代码风格和编码错误的一个过程,对于python中有很多流行的linting工具,我们这里使用Flake8 - 融合了pep8和pyflakes两种linting工具。 首先,在requrements.txt文件中添加flake8依赖包: flake8==3.5.0 同样的,重新构建容器: (tdd3)$ docker-compose -f docker-compose
问题内容: 我在GlassFish 4上使用java.util.logging。 我正在定义自己的类,以通过定义System属性 来初始化。 我的班级加载文件,将其与其他属性文件合并,并进行一些自定义替换。 以下是我文件的相关部分: 我正在使用标准并将其配置为使用格式化程序。 但是字符串被完全忽略了。相反,SimpleFormatter使用其默认格式。 我哪里做错了? 问题答案: 我假设系统属性是
QueryList遵循将业务与错误分离的原则, HTTP请求传输过程中如果出现的错误,QueryList将会抛出异常。 QueryList的HTTP客户端基于GuzzleHttp,它提供了丰富的HTTP异常类型,用户可以自行设计根据不同的异常类型做不同的处理。 如果你觉得麻烦,并不想每次都去处理HTTP异常,选择直接忽略,让程序继续运行下去,做法可以参考下面方式: 对内置的get()进行封装: u
问题内容: 我正在使用Retrofit(与OkHttp和GSON结合使用)与在线Web服务进行通信。该Web服务的所有响应都有一个默认包装,类似于: 在此示例中,将为或。此外,仅在处理请求时发生错误时才包含任何内容。最后但并非最不重要的一点将包含调用的实际结果(示例中为字符串,但是某些调用返回JSON数组或JSON对象)。 为了处理此元数据,我创建了一个通用类,如下所示: 我还创建了代表有时给出的