我的目标是添加前缀,这些前缀将被放在所有模糊变量的前面。例如:它不会将myVar混淆为x,而是使用前缀$pre,因此结果将类似于:$prex
我使用的是闭包编译器。不幸的是,在使用Closure-compiler wiki之后,我使用了rename_variable_prefix,但没有成功。
代码示例:
const ClosureCompiler = require('google-closure-compiler').jsCompiler;
console.log(ClosureCompiler.CONTRIB_PATH); // absolute path to the contrib folder which contains externs
const closureCompiler = new ClosureCompiler({
compilation_level: 'ADVANCED',
rename_variable_prefix: '$pre'
});
const compilerProcess = closureCompiler.run([{
path: 'file-one.js',
src: 'function add(node){
let test = window["test"];
if (node.hzix == test)return 1;
}
add(window["node"]);
window.add = add;',
sourceMap: null // optional input source map
}], (exitCode, stdOut, stdErr) => {
//compilation complete
});结果代码为:
{\n"version":3,\n"file":"compiled.js",\n"lineCount":1,\n"mappings":"AAAiGA,MAAAC,IAAA,CAAjGA,QAAY,CAACC,CAAD,CAAM,CAA2B,GAAIA,CAAAC,EAAJ,EAAfH,MAAAI,KAAe,CAAsB,MAAO,EAAxD;",\n"sources":["file-one.js"],\n"names":["window","add","node","hzix","test"]\n}\n',
src: 'window.add=function(a){if(a.a==window.test)return 1};结果不包括前缀“$pre”。我遗漏了什么?
发布于 2021-08-25 17:50:16
如果有任何帮助的话,我通过编译器选项renamePrefix让它在Java闭包编译器中工作。例如:
m_options.renamePrefix = "$pre"; 其中m_options是传递到的CompilerOptions,例如compileModules:
m_compiler.compileModules(m_externals, m_modules, m_options);我的问题是我与来自第三方模块的另一个全局模糊变量发生了冲突,这两个变量都使用了全局名称空间。结果是一个微妙的,因此危险的bug,它只出现在精简的代码中。
例如,minifier生成全局符号aa,ab,ga等,这些符号很容易与另一个精简包中的相同符号发生冲突-所以你可以看到模块的灵感。
我认为你总是希望至少在缩小的全局变量前加上前缀,否则如果你也在加载第三方库,这可能是一个定时炸弹。
https://stackoverflow.com/questions/60925355
复制相似问题